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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值