(Cuando efectúa una llamada a una función CURRENT_ datetime, el valor que se devuelve es idéntico al valor que devuelve otra llamada del mismo nodo. Esto garantiza que puede utilizar la función de forma coherente en un solo nodo.)
CALL CopyMessageHeaders(); Declare PutTime INTERVAL; SET PutTime = (CURRENT_GMTTIME - InputRoot.MQMD.PutTime) MINUTE TO SECOND; SET OutputRoot.XML.Test.PutTime = PutTime;
El mensaje de salida tiene el formato (aunque los valores reales varían):
<Test> <PutTime>INTERVAL '1:21.862' MINUTE TO SECOND</PutTime> </Test>
La siguiente sección de código establece un temporizador, que se debe desencadenar después de un intervalo especificado a partir del inicio del proceso, a fin de comprobar que el proceso se ha completado. Si el proceso no se ha completado una vez que ha transcurrido el tiempo, es posible que la activación del temporizador desencadene, por ejemplo, algún proceso de recuperación.
El campo StartTime del mensaje de petición de tiempo de espera se establece en la hora actual más el periodo de retardo permitido, definido por una propiedad definida por el usuario en el flujo. (El administrador ha establecido la propiedad definida por el usuario en una serie de caracteres con el formato "HH:MM:SS".)
DECLARE StartDelyIntervalStr EXTERNAL CHARACTER '01:15:05'; CREATE PROCEDURE ValidateTimeoutRequest() BEGIN -- Establecer el periodo de tiempo de espera DECLARE timeoutStartTimeRef REFERENCE TO OutputRoot.XMLNSC.Envelope.Header.TimeoutRequest.StartTime; IF LASTMOVE(timeoutStartTimeRef) THEN -- Ya establecido ELSE -- Establecerlo a partir de UDP StartDelyIntervalStr DECLARE startAtTime TIME CURRENT_TIME + CAST(StartDelyIntervalStr AS INTERVAL HOUR TO SECOND) ; -- Convertir "TIME 'hh.mm.ss.fff'" en el formato hh.mm.ss -- necesario en el 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;