创建 XML_CancelReservation 消息流

使用以下指示信息可创建 XML_CancelReservation 消息流。 有关更多详细的指示信息,请单击在每个步骤末尾提供的链接。

要创建和配置 XML_CancelReservation 消息流:

  1. 创建名为 XML_CancelReservation 的新消息流。
    有关指示信息,请参阅 IBM Integration Bus 文档中的创建消息流
  2. 在“消息流”编辑器中,添加并重命名下表中列出的节点。
    有关指示信息,请参阅 IBM Integration Bus 文档中的添加消息流节点
    选用板抽屉 节点的类型 节点的名称
    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
  3. 将节点连接在一起,如下表中所示。
    有关指示信息,请参阅 IBM Integration Bus 文档中的连接消息流节点
    要检查您是否已将节点正确连接在一起,请参阅有关 XML_CancelReservation 消息流中的图。
    节点名 终端 连接到
    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
  4. 配置节点属性,如下表中所示。 除非在表中显示了备用值,否则接受所有属性的缺省值。
    有关指示信息,请参阅 IBM Integration Bus 文档中的配置消息流节点
    节点名 页面 属性
    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
    (此值是消息流放置消息的本地队列。)
  5. 在“XML 航空消息流”项目中,双击 ESQL 文件以在 ESQL 编辑器中将其打开。 复制以下 ESQL 代码模块并将其粘贴到 ESQL 文件中,然后保存该文件。 有关更多信息,请参阅 IBM Integration Bus 文档中的开发 ESQL
    -- ************************************************
    -- * 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;
    
  6. 保存消息流。
您已创建 XML_CancelReservation 消息流,这会取消 XML_Reservation 消息流先前作出的预订。

返回到“构建‘航空预订’样本”