(CURRENT_ datetime 関数を呼び出すと、戻される値は同じノードの別の呼び出しに戻される値と同じです。 このため、単一ノード内では関数を一貫して使用できます。)
CALL CopyMessageHeaders(); Declare PutTime INTERVAL; SET PutTime = (CURRENT_GMTTIME - InputRoot.MQMD.PutTime) MINUTE TO SECOND; SET OutputRoot.XML.Test.PutTime = PutTime;
出力メッセージの形式は、次のとおりです (実際の値は異なります)。
<Test> <PutTime>INTERVAL '1:21.862' MINUTE TO SECOND</PutTime> </Test>
以下のコード断片は、処理が完了したことを確認するために、処理の開始から指定インターバル後にトリガーされるようにタイマーを設定します。 例えば、経過時間内に処理が完了しなかった場合に、タイマーの起動によっていくつかのリカバリー処理をトリガーすることもできるかもしれません。
タイムアウト要求メッセージの StartTime フィールドは、現行時刻に許容遅延期間 (フローのユーザー定義プロパティーによって定義される) を加えたものに設定されます (ユーザー定義プロパティーは管理者によって、"HH:MM:SS" 形式のストリングに設定されます)。
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;