En el proyecto Error Handler Message Flows, efectúe una doble pulsación en el archivo
Error_Handler.esql para abrirlo en el Editor ESQL.
Copie y pegue los siguientes módulos de código ESQL en el archivo ESQL y
luego guarde el archivo.
Para obtener más información, consulte
Desarrollo de ESQL
en la documentación de WebSphere Message Broker.
CREATE FILTER MODULE Error_Handler_Filter
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
IF Root.MQMD.BackoutCount='0' THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END;
END MODULE;
CREATE DATABASE MODULE Error_Handler_Database
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
DECLARE Error INTEGER;
DECLARE Text CHARACTER;
DECLARE Place INTEGER;
DECLARE LastPlace INTEGER;
DECLARE NodeName CHARACTER;
DECLARE Label CHARACTER;
DECLARE FlowName CHARACTER;
-- Establecer el punto de partida
DECLARE start REFERENCE TO ExceptionList.*[1];
WHILE start.Number IS NOT NULL DO
SET Error = start.Number;
IF Error = 3001 THEN
SET Text = SUBSTRING(start.Insert.Text FROM 1 FOR 250);
ELSE
SET Text = SUBSTRING(start.Text FROM 1 FOR 250);
END IF;
SET Label = start.Label;
SET Place = POSITION('.' IN Label);
SET LastPlace = Place;
WHILE Place <>0 DO
SET Label=SUBSTRING(Label FROM (Place+1));
SET Place=POSITION('.' IN Label);
SET LastPlace = LastPlace + Place;
END WHILE;
SET Label=start.Label;
SET FlowName=SUBSTRING(Label FROM 1 FOR (LastPlace-1));
SET NodeName=SUBSTRING(Label FROM (LastPlace+1));
-- Mover el inicio al último hijo del campo al que señala actualmente
MOVE start LASTCHILD;
END WHILE;
INSERT INTO Database.ERRORS(MSGID,TEXT,ERRORNUM, ERRORDATE,MSGDATA,FLOWNAME,NODENAME)
VALUES(CAST(Root.MQMD.MsgId AS BLOB),Text,Error,CURRENT_TIMESTAMP,BITSTREAM(Root),
FlowName,NodeName);
RETURN TRUE;
END;
END MODULE
CREATE COMPUTE MODULE Error_Handler_Compute
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
CALL CopyMessageHeaders();
CALL CopyEntireMessage();
RETURN TRUE;
END;
CREATE PROCEDURE CopyMessageHeaders() BEGIN
DECLARE I INTEGER 1;
DECLARE J INTEGER;
SET J = CARDINALITY(InputRoot.*[]);
WHILE I < J DO
SET OutputRoot.*[I] = InputRoot.*[I];
SET I = I + 1;
END WHILE;
END;
CREATE PROCEDURE CopyEntireMessage() BEGIN
SET OutputRoot = InputRoot;
END;
END MODULE;