Message Flow for ESB 10

--超時需要特殊處理
--SET OutputLocalEnvironment.Destination.RouterList.DestinationData[1].labelName = 'NO';

--獲取最後一個RecoverableException
DECLARE ref REFERENCE TO InputExceptionList.*[1];
DECLARE tmp REFERENCE TO InputExceptionList.*[1];
DECLARE errMsg CHARACTER 'ExceptionList {';
DECLARE I INTEGER;

WHILE ENDSWITH(FIELDNAME(ref),'Exception') AND ENDSWITH(FIELDNAME(tmp),'Exception') DO

SET errMsg = errMsg || '[Catalog=' || COALESCE(ref.Catalog,'') || ',Label=' || COALESCE(ref.Label,'') || ',Number=' || CAST(ref.Number AS CHARACTER) || ',Text=' || COALESCE(ref.Text,'');

FOR errorText AS ref.Insert[] DO

IF LENGTH(errorText.Text) >= 256 THEN
SET errMsg = errMsg || ',Insert=' || SUBSTRING(errorText.Text FROM 1 FOR 256);
ELSE
SET errMsg = errMsg || ',Insert=' || errorText.Text;
END IF;

END FOR;

SET errMsg = errMsg || ']';

MOVE tmp LASTCHILD;

IF ENDSWITH(FIELDNAME(tmp),'Exception') THEN
SET ref = tmp;
END IF;

END WHILE;

SET errMsg = errMsg || '}';

If ref.Number IS NULL THEN
SET Environment.Variables.RequestHeader.RetCode = '9999';
SET Environment.Variables.RequestHeader.RetMsg = 'Unknow Exception';
ELSE
SET Environment.Variables.RequestHeader.RetCode = CAST(ref.Number AS CHARACTER);
SET Environment.Variables.RequestHeader.RetMsg = ref.Text;
END IF;

SET Environment.Variables.RequestHeader.ExceptionName = FIELDNAME(ref);
SET Environment.Variables.RequestHeader.errClass = ref.Catalog;
SET Environment.Variables.RequestHeader.Desc = errMsg;

/**
DECLARE ref_new REFERENCE TO InputExceptionList.*[1];
WHILE FIELDNAME(ref) = 'RecoverableException' and POSITION('Exception' IN FIELDNAME(ref_new)) > 0 DO
--MOVE ref LASTCHILD;
MOVE ref_new LASTCHILD;
IF POSITION('Exception' IN FIELDNAME(ref_new)) > 0 THEN
SET ref = ref_new;
END IF;
END WHILE;

DECLARE errMsg CHAR FIELDNAME(ref.*[<]);
SET errMsg = ref.{errMsg}.*[<].Text;
IF errMsg IS NULL THEN
SET errMsg = ref.[<].Text;
END IF;

--設置異常狀態
SET Environment.Variables.RequestHeader.RetCode = CAST(ref.Number AS CHARACTER);
SET Environment.Variables.RequestHeader.RetMsg = trim(ref.Text)||','||trim(errMsg);
If ref.Number = NULL then
SET Environment.Variables.RequestHeader.RetCode = '9999';
END IF;
*/


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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章