É possível usar ESQL para calcular o intervalo de tempo entre dois eventos e para configurar um cronômetro para ser acionado após um intervalo especificado.
(Quando você faz uma chamada para a função de data/hora CURRENT_, o valor retornado é idêntico ao valor retornado a outra chamada no mesmo nó. Isso assegura que você possa utilizar a função consistentemente dentro de um único nó.)
CALL CopyMessageHeaders();
Declare PutTime INTERVAL;
SET PutTime = (CURRENT_GMTTIME - InputRoot.MQMD.PutTime) MINUTE TO SECOND;
SET OutputRoot.XMLNS.Test.PutTime = PutTime;
A mensagem de saída possui o formato (embora os valores reais sejam variados):
<Test>
<PutTime>INTERVAL '1:21.862' MINUTE TO SECOND</PutTime>
</Test>
O trecho de código a seguir configura um cronômetro, a ser acionado após um intervalo especificado do início do processamento, para verificar se o processamento foi concluído. Se o processamento não tiver sido concluído dentro do tempo decorrido, o disparo do cronômetro pode, por exemplo, acionar algum processamento de recuperação.
O campo StartTime da mensagem de pedido de tempo limite está configurado para a hora atual, além do período de retardo permitido, que é definido por uma propriedade definida pelo usuário no fluxo. (A propriedade definida pelo usuário foi configurada como uma cadeia no formato "HH:MM:SS" pelo administrador).
DECLARE StartDelyIntervalStr EXTERNAL CHARACTER '01:15:05';
CREATE PROCEDURE ValidateTimeoutRequest() BEGIN
-- Configurar o tempo limite
DECLARE timeoutStartTimeRef REFERENCE TO
OutputRoot.XMLNSC.Envelope.Header.TimeoutRequest.StartTime;
IF LASTMOVE(timeoutStartTimeRef)
THEN
-- Já configurado
ELSE
-- Configure-o a partir da UDP StartDelyIntervalStr
DECLARE startAtTime TIME CURRENT_TIME
+ CAST(StartDelyIntervalStr AS INTERVAL HOUR TO SECOND);
-- Converter "TIME 'hh.mm.ss.fff'" para o formato hh.mm.ss
-- necessário no campo StartTime
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;