首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

Message Flow for ESB 十

2012-06-30 
Message Flow for ESB 10--超时需要特殊处理 --SET OutputLocalEnvironment.Destination.RouterList.Desti

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;

热点排行