使用以下指示信息可创建 XML_CancelReservation 消息流。 有关更多详细的指示信息,请单击在每个步骤末尾提供的链接。
要创建和配置 XML_CancelReservation 消息流:
| 选用板抽屉 | 节点的类型 | 节点的名称 |
|---|---|---|
| WebSphere MQ | MQInput | XML_CANCELRESERVATION_IN |
| WebSphere MQ | MQOutput | XML_CANCELRESERVATION_OUT |
| WebSphere MQ | MQOutput | XML_CANCELRESERVATION_FAIL1_1 |
| WebSphere MQ | MQOutput | XML_CANCELRESERVATION_FAIL1_2 |
| WebSphere MQ | MQOutput | XML_CANCELRESERVATION_FAIL2 |
| 变换 | Compute | DeleteReservation |
| 变换 | Compute | IncrementSeat |
| 构造 | Trace | Trace |
| 构造 | Trace | Trace1 |
| 构造 | Trace | Trace2 |
| 节点名 | 终端 | 连接到 |
|---|---|---|
| XML_CANCELRESERVATION_IN | Out | DeleteReservation |
| Catch | XML_CANCELRESERVATION_FAIL1_1 | |
| DeleteReservation | Failure | Trace |
| Out | Trace1 | |
| Trace | Out | XML_CANCELRESERVATION_FAIL1_2 |
| Trace1 | Out | IncrementSeat |
| IncrementSeat | Failure | Trace2 |
| Out | XML_CANCELRESERVATION_OUT | |
| Trace2 | Out | XML_CANCELRESERVATION_FAIL2 |
| 节点名 | 页面 | 属性 | 值 |
|---|---|---|---|
| XML_CANCELRESERVATION_IN | 基本 | 队列名 | XML_CANCELRESERVATION_IN (此值是消息流从中取得消息的本地队列。) |
| 输入消息解析 | 消息域 | XMLNSC:对于 XML 消息 (namespace aware, validation, low memory use) (此值告知 Integration 节点使用优化的一般 XML 解析器。) |
|
| DeleteReservation | 基本 | 数据源 | RESERVDB (此值是此节点使用的数据库。) |
| 基本 | ESQL 模块 | DeleteReservation (此值是处理期间此节点使用的 ESQL 模块的名称。 该名称必须匹配 ESQL 文件中 CREATE COMPUTE MODULE 语句中的名称。) |
|
| 基本 | 数据库出错时抛出异常 | 清除该复选框,以便您可以在 ESQL 中指定消息流必须如何处理数据库错误。 如果已选中该复选框,那么当有数据库错误时,缺省情况下消息流会产生一个异常,并将消息传递至 FAIL 队列。 | |
| Trace | 基本 | 目标 | 本地错误日志 (此值指示节点将跟踪信息写入本地错误日志。 在 Windows 上,本地错误日志是事件查看器;在 Linux 上,本地错误日志是 syslog。) |
| 基本 | 模式 | ==== Delete Reservation 节点的错误 ================== ${ExceptionList} (此值记录消息的 ExceptionList 树部分。) |
|
| 基本 | 消息号 | 3051 | |
| XML_CANCELRESERVATION_FAIL1_1 | 基本 | 队列名 (您无需指定队列管理器的名称,因为队列是在与 Integration 节点相同的队列管理器上定义的。) |
XML_CANCELRESERVATION_FAIL1 (此值是处理失败时,消息流放置消息的本地队列。) |
| XML_CANCELRESERVATION_FAIL1_2 | 基本 | 队列名 (您无需指定队列管理器的名称,因为队列是在与 Integration 节点相同的队列管理器上定义的。) |
XML_CANCELRESERVATION_FAIL1 (此值是处理失败时,消息流放置消息的本地队列。) |
| Trace1 | 基本 | 目标 | 本地错误日志 (此值指示节点将跟踪信息写入本地错误日志。 在 Windows 上,本地错误日志是事件查看器;在 Linux 上,本地错误日志是 syslog。) |
| 基本 | 模式 | ========== Delete Reservation 节点之后的消息 =================== ${Root} ${Environment} (此值记录消息的“消息”和“环境”树部分。) |
|
| 基本 | 消息号 | 3051 | |
| IncrementSeat | 基本 | 数据源 | RESERVDB (此值是此节点使用的数据库。) |
| 基本 | ESQL 模块 | IncrementSeat (此值是处理期间此节点使用的 ESQL 模块的名称。 该名称必须匹配 XML_CancelReservation.esql 文件中 CREATE COMPUTE MODULE 语句中的名称。) |
|
| Trace2 | 基本 | 目标 | 本地错误日志 (此值指示节点将跟踪信息写入本地错误日志。 在 Windows 上,本地错误日志是事件查看器;在 Linux 上,本地错误日志是 syslog。) |
| 基本 | 模式 | ======== Increment Seat 节点的错误 =================== ${ExceptionList} (此值记录消息的 ExceptionList 树部分。) |
|
| 基本 | 消息号 | 3051 | |
| XML_CANCELRESERVATION_FAIL2 | 基本 | 队列名 (您无需指定队列管理器的名称,因为队列是在与 Integration 节点相同的队列管理器上定义的。) |
XML_CANCELRESERVATION_FAIL2 (此值是处理失败时,消息流放置消息的本地队列。) |
| XML_CANCELRESERVATION_OUT | 基本 | 队列名 (您无需指定队列管理器的名称,因为队列是在与 Integration 节点相同的队列管理器上定义的。) |
XML_CANCELRESERVATION_OUT (此值是消息流放置消息的本地队列。) |
-- ************************************************
-- * ESQL for the XML_CancelReservation message flow
-- ************************************************
CREATE COMPUTE MODULE DeleteReservation
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
DECLARE SQLState1 CHARACTER;
DECLARE SQLErrorText1 CHARACTER;
DECLARE SQLCode1 INTEGER;
DECLARE SQLNativeError1 INTEGER;
SET OutputRoot = InputRoot;
DECLARE cancel REFERENCE TO InputRoot.XMLNSC.CancelReservation.ListOfReservations;
DECLARE I INTEGER 1;
DECLARE J INTEGER CARDINALITY(cancel.ReservationNumber[]);
WHILE I <= J DO -- loop through the reservations to be cancelled
-- check that the requested reservation exists
SET Environment.ListOfReservations.Info[I] =
THE(SELECT T.CLASSTYPE, T.FLIGHTNO, T.FLIGHTDATE
FROM Database.XMLPASSENGERTB AS T
WHERE T.RESERVATIONNO = cancel.ReservationNumber[I]);
IF (SELECT COUNT(*) FROM Environment.ListOfReservations.Info[I].*[] AS I1) IS NULL THEN
THROW USER EXCEPTION CATALOG 'MyCatalog' MESSAGE 1234 VALUES('No record to delete');
END IF;
-- delete the record from the database
DELETE FROM Database.XMLPASSENGERTB AS T WHERE T.RESERVATIONNO = cancel.ReservationNumber[I];
SET I = I + 1;
SET SQLCode1 = SQLCODE;
IF SQLCode1 <> 0 THEN
SET SQLState1 = SQLSTATE;
SET SQLErrorText1 = SQLERRORTEXT;
SET SQLNativeError1 = SQLNATIVEERROR;
THROW USER EXCEPTION MESSAGE 2950 VALUES('The SQL State' , SQLState1 , SQLCode1 , SQLNativeError1 , SQLErrorText1);
END IF;
END WHILE;
RETURN TRUE;
END;
END MODULE;
CREATE COMPUTE MODULE IncrementSeat
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
DECLARE SQLState1 CHARACTER;
DECLARE SQLErrorText1 CHARACTER;
DECLARE SQLCode1 INTEGER;
DECLARE SQLNativeError1 INTEGER;
SET OutputRoot = InputRoot;
DECLARE I INTEGER 1;
DECLARE J INTEGER CARDINALITY(Environment.ListOfReservations.*[]);
-- loop through the cancellations, updating the seat availability
WHILE I <= J DO
IF Environment.ListOfReservations.Info[I].CLASSTYPE = 'Y' THEN
UPDATE Database.XMLFLIGHTTB AS T
SET ECONOMICCLASS = T.ECONOMICCLASS-1, TOTALECONOMIC = T.TOTALECONOMIC+1
WHERE T.FLIGHTNO = Environment.ListOfReservations.Info[I].FLIGHTNO
AND T.FLIGHTDATE = Environment.ListOfReservations.Info[I].FLIGHTDATE;
END IF;
IF Environment.ListOfReservations.Info[I].CLASSTYPE = 'F' THEN
UPDATE Database.XMLFLIGHTTB AS T
SET FIRSTCLASS = T.FIRSTCLASS-1, TOTALFIRST= T.TOTALFIRST+1
WHERE T.FLIGHTNO = Environment.ListOfReservations.Info[I].FLIGHTNO
AND T.FLIGHTDATE = Environment.ListOfReservations.Info[I].FLIGHTDATE;
END IF;
SET I = I + 1;
SET SQLCode1 = SQLCODE;
IF SQLCode1 <> 0 THEN
SET SQLState1 = SQLSTATE;
SET SQLErrorText1 = SQLERRORTEXT;
SET SQLNativeError1 = SQLNATIVEERROR;
THROW USER EXCEPTION MESSAGE 2950 VALUES('The SQL State' , SQLState1 , SQLCode1 , SQLNativeError1 , SQLErrorText1);
END IF;
END WHILE;
RETURN TRUE;
END;
END MODULE;