XML_CancelReservation メッセージ・フローの作成

XML_CancelReservation メッセージ・フローを作成するには、次のようにします。 詳細な指示については、各ステップの終わりにあるリンクをクリックしてください。

XML_CancelReservation メッセージ・フローを作成および構成するには、次のようにします。

  1. XML_CancelReservation という新規メッセージ・フローを作成します。
    その方法については、メッセージ・フローの作成を参照してください。
  2. メッセージ・フロー・エディターで、次の表にリストされているノードを追加して名前変更します。
    その方法については、ノードの追加を参照してください。
    ノードのタイプ ノード名
    MQInput XML_CANCELRESERVATION_IN
    MQOutput XML_CANCELRESERVATION_OUT
    MQOutput XML_CANCELRESERVATION_FAIL1_1
    MQOutput XML_CANCELRESERVATION_FAIL1_2
    MQOutput XML_CANCELRESERVATION_FAIL2
    Compute DeleteReservation
    Compute IncrementSeat
    Trace Trace
    Trace Trace1
    Trace Trace2
  3. 次の表に示されているように、ノードを接続します。
    その方法については、ノードの接続を参照してください。
    ノードが正しく接続されたかどうかを確認する には、『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. 次の表に示されているように、ノードのプロパティーを構成します。 この表に代替値が示されていなければ、すべてのプロパティーに関してデフォルト値を受け入れます。
    その方法については、ノードの構成を参照してください。
    ノード名 ページ プロパティー
    XML_CANCELRESERVATION_IN 基本 キュー名 XML_CANCELRESERVATION_IN
    (これは、メッセージ・フローがメッセージを取り出すローカル・キューです。)
    デフォルト メッセージ・ドメイン XML
    (これは、汎用 XML パーサーを使用するようにブローカーに指示します。)
    DeleteReservation 基本 データ・ソース RESERVDB
    (これは、このノードで使用されるデータベースです。)
    基本 ESQL モジュール DeleteReservation
    (これは、処理中にこのノードによって使用される ESQL モジュールの名前です。 この名前は、ESQL ファイル中の CREATE COMPUTE MODULE ステートメント中の名前と一致していなければなりません。)
    基本 データベース・エラー時に例外を送出 (Throw exception on database error) チェック・ボックスをクリアして、メッセージ・フローがデータベース・エラーを扱う方法を ESQL で指定できるようにします。 チェック・ボックスが選択されている場合は、デフォルトにより、データベース・エラーがある場合にメッセージ・フローが例外をスローして、メッセージを FAIL キューに受け渡します。
    Trace 基本 宛先 (Destination) ローカル・エラー・ログ
    (これは、トレース情報をローカル・エラー・ログに書き込むように、ノードに指示します。 Windows 上では、ローカル・エラー・ログはイベント・ビューアーです。Linux 上では、ローカル・エラー・ログは syslog です。)
    基本 パターン (Pattern) ==== Error from Delete Reservation node ==================
    ${ExceptionList}

    (これはメッセージの ExceptionList ツリー部分をログ記録します。)
    基本 メッセージ番号 3051
    XML_CANCELRESERVATION_FAIL1_1 基本 キュー名
    (キューはブローカーと同じキュー・マネージャーで定義されるので、キュー・マネージャーの名前を指定する必要はありません。)
    XML_CANCELRESERVATION_FAIL1
    (これは、処理が失敗した場合にメッセージ・フローがメッセージを書き込むローカル・キューです。)
    XML_CANCELRESERVATION_FAIL1_2 基本 キュー名
    (キューはブローカーと同じキュー・マネージャーで定義されるので、キュー・マネージャーの名前を指定する必要はありません。)
    XML_CANCELRESERVATION_FAIL1
    (これは、処理が失敗した場合にメッセージ・フローがメッセージを書き込むローカル・キューです。)
    Trace1 基本 宛先 (Destination) ローカル・エラー・ログ
    (これは、トレース情報をローカル・エラー・ログに書き込むように、ノードに指示します。 Windows 上では、ローカル・エラー・ログはイベント・ビューアーです。Linux 上では、ローカル・エラー・ログは syslog です。)
    基本 パターン (Pattern) ========== Message after Delete Reservation node ===================
    ${Root}
    ${Environment}

    (これはメッセージの Message および Environment ツリー部分をログ記録します。)
    基本 メッセージ番号 3051
    IncrementSeat 基本 データ・ソース RESERVDB
    (これは、このノードで使用されるデータベースです。)
    基本 ESQL モジュール IncrementSeat
    (これは、処理中にこのノードによって使用される ESQL モジュールの名前です。 この名前は、XML_CancelReservation.esql ファイル中の CREATE COMPUTE MODULE ステートメント中の名前と一致していなければなりません。)
    Trace2 基本 宛先 (Destination) ローカル・エラー・ログ
    (これは、トレース情報をローカル・エラー・ログに書き込むように、ノードに指示します。 Windows 上では、ローカル・エラー・ログはイベント・ビューアーです。Linux 上では、ローカル・エラー・ログは syslog です。)
    基本 パターン (Pattern) ======== Error from Increment Seat node ===================
    ${ExceptionList}


    (これはメッセージの ExceptionList ツリー部分をログ記録します。)
    基本 メッセージ番号 3051
    XML_CANCELRESERVATION_FAIL2 基本 キュー名
    (キューはブローカーと同じキュー・マネージャーで定義されるので、キュー・マネージャーの名前を指定する必要はありません。)
    XML_CANCELRESERVATION_FAIL2
    (これは、処理が失敗した場合にメッセージ・フローがメッセージを書き込むローカル・キューです。)
    XML_CANCELRESERVATION_OUT 基本 キュー名
    (キューはブローカーと同じキュー・マネージャーで定義されるので、キュー・マネージャーの名前を指定する必要はありません。)
    XML_CANCELRESERVATION_OUT
    (これは、メッセージ・フローがメッセージを書き込むローカル・キューです。)
  5. XML Airline メッセージ・フローのプロジェクトで、ESQL ファイル・プロジェクトをダブルクリックして ESQL エディターで開き、以下の ESQL コード・モジュールを ESQL ファイルにコピーして貼り付けます。 詳しくは、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.XML.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;

これで、XML_CancelReservation メッセージ・フローの作成が終わりました。 このメッセージ・フローは、以前に XML_Reservation メッセージ・フローが以前に行った予約を取り消します。

メインページのアイコン   『Airline Reservations サンプルのビルド』に戻る