Sie können mithilfe von ESQL das Zeitintervall zwischen zwei Ereignissen berechnen und einen Zeitgeber festlegen, der nach einem angegebenen Intervall ausgelöst werden soll.
(Wenn Sie einen Aufruf an eine Datum/Zeit-Funktion des Typs CURRENT_ ausgeben, ist der zurückgegebene Wert mit dem Wert identisch, der an einen anderen Aufruf in demselben Code zurückgegeben wurde. Auf diese Weise wird sichergestellt, dass Sie die Funktion durchgängig in einem einzelnen Knoten verwenden können.)
CALL CopyMessageHeaders();
Declare PutTime INTERVAL;
SET PutTime = (CURRENT_GMTTIME - InputRoot.MQMD.PutTime) MINUTE TO SECOND;
SET OutputRoot.XMLNS.Test.PutTime = PutTime;
Die Ausgabenachricht hat folgendes Format (die Ist-Werte können jedoch leicht abweichen):
<Test>
<PutTime>INTERVAL '1:21.862' MINUTE TO SECOND</PutTime>
</Test>
Im folgenden Codefragment wird ein Zeitgeber festgelegt, der nach einem angegebenen Intervall nach dem Start der Verarbeitung ausgelöst wird und überprüft, ob diese Verarbeitung beendet wurde. Wenn die Verarbeitung während der abgelaufenen Zeit nicht beendet wurde, wird durch den Zeitgeber beispielsweise ein Prozess zur Fehlerbehebung ausgelöst.
Im Feld StartTime der Nachricht über eine Zeitlimitanforderung wird die aktuelle Zeit plus die zulässige Verzögerungszeit festgelegt, die durch eine benutzerdefinierte Eigenschaft im Nachrichtenfluss definiert ist. (Für die benutzerdefinierte Eigenschaft wurde vom Administrator eine Zeichenfolge im Format "HH:MM:SS" festgelegt.)
DECLARE StartDelyIntervalStr EXTERNAL CHARACTER '01:15:05';
CREATE PROCEDURE ValidateTimeoutRequest() BEGIN
-- Set the timeout period
DECLARE timeoutStartTimeRef REFERENCE TO OutputRoot.XMLNSC.Envelope.Header.TimeoutRequest.StartTime;
IF LASTMOVE(timeoutStartTimeRef)
THEN
-- Already set
ELSE
-- Set it from the UDP StartDelyIntervalStr
DECLARE startAtTime TIME CURRENT_TIME + CAST(StartDelyIntervalStr AS INTERVAL HOUR TO SECOND) ;
-- Convert "TIME 'hh.mm.ss.fff'" to hh.mm.ss format
-- needed in StartTime field
DECLARE startAtTimeStr CHAR;
SET startAtTimeStr = startAtTime;
SET startAtTimeStr = SUBSTRING(startAtTimeStr FROM 7 FOR 8);
SET OutputRoot.XMLNSC.Envelope.Header.TimeoutRequest.StartTime
= startAtTimeStr;
END IF;
END;