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

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

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

  1. XML_PassengerQuery という新規のメッセージ・フローを作成します。
    その方法については、メッセージ・フローの作成を参照してください。
  2. メッセージ・フロー・エディターで、次の表にリストされているノードを追加して名前変更します。
    その方法については、ノードの追加を参照してください。
    ノード・タイプ ノード名
    MQInput XML_PASSENGERQUERY_IN
    MQOutput XML_PASSENGERQUERY_OUT
    MQOutput XML_PASSENGERQUERY_FAIL_1
    MQOutput XML_PASSENGERQUERY_FAIL_2
    Compute DecideOnQuery
    Compute GetPassengerInformation
    Compute GetReservationsInformation
    Label SinglePassenger
    Label AllReservations
    RouteToLabel RouteToLabel

    RouteToLabel ノードは、メッセージに関連付けられた LocalEnvironment の内容に基づいて、メッセージを動的に経路指定します。 LocalEnvironment には、(ノード名ではなく) 「ラベル名」プロパティーによって識別される 1 つ以上の宛先 Label ノードの ID が含まれています。

  3. 次の表に示されているように、ノードを接続します。
    その方法については、ノードの接続を参照してください。
    ノードが正しく接続されたかどうかを確認する には、『XML_PassengerQuery メッセージ・フローについて』の図を参照してください。
    ノード名 ターミナル 接続先
    XML_PASSENGERQUERY_IN Failure XML_PASSENGERQUERY_FAIL_1
    Out DecideOnQuery
    Catch XML_PASSENGERQUERY_FAIL_2
    DecideOnQuery Out RouteToLabel
    SinglePassenger Out GetPassengerInformation
    AllReservations Out GetReservationsInformation
    GetPassengerInformation Out XML_PASSENGERQUERY_OUT
    GetReservationsInformation Out XML_PASSENGERQUERY_OUT
  4. 次の表に示されているように、ノードのプロパティーを構成します。 この表に代替値が示されていなければ、すべてのプロパティーに関してデフォルト値を受け入れます。
    その方法については、ノードの構成を参照してください。
    ノード名 ページ プロパティー
    XML_PASSENGERQUERY_IN 基本 キュー名 XML_PASSENGERQUERY_IN
    (これは、メッセージ・フローがメッセージを取り出すローカル・キューです。)
    デフォルト メッセージ・ドメイン XML
    (これは、汎用 XML パーサーを使用するようにブローカーに指示します。)
    XML_PASSENGERQUERY_FAIL_1 基本 キュー名
    (キューはブローカーと同じキュー・マネージャーで定義されるので、キュー・マネージャーの名前を指定する必要はありません。)
    XML_PASSENGERQUERY_FAIL
    (これは、処理が失敗した場合にメッセージ・フローがメッセージを書き込むローカル・キューです。)
    XML_PASSENGERQUERY_FAIL_2 基本 キュー名
    (キューはブローカーと同じキュー・マネージャーで定義されるので、キュー・マネージャーの名前を指定する必要はありません。)
    XML_PASSENGERQUERY_FAIL
    (これは、処理が失敗した場合にメッセージ・フローがメッセージを書き込むローカル・キューです。)
    DecideOnQuery 基本 ESQL モジュール DecideOnQuery
    (これは、処理中にこのノードによって使用される ESQL モジュールの名前です。 この名前は、ESQL ファイル中の CREATE COMPUTE MODULE ステートメント中の名前と一致していなければなりません。)
    基本 Compute モード (Compute Mode) LocalEnvironment and Message
    (この値は、LocalEnvironment に加えてメッセージも、変更後に RouteToLabel ノードに渡されます。)
    RouteToLabel 基本 モード (Mode) Route to First
    (これにより、RouteToLabel ノードが宛先のリストの処理を、リストの先頭の最初の項目から開始するようになります。)
    SinglePassenger 基本 ラベル名 (Label Name) SinglePassenger
    (これは、メッセージ・フローがメッセージを受け渡す Label ノードの名前です。 この名前は、Decide On The Query ノード中のラベル名セットと一致していなければなりません。 下記の Decide_on_query モジュールの ESQL を参照してください。)
    AllReservations 基本 ラベル名 (Label Name) AllReservations
    (これは、メッセージ・フローがメッセージを受け渡す Label ノードの名前です。 この名前は、Decide On The Query ノード中のラベル名セットと一致していなければなりません。 下記の Decide_on_query モジュールの ESQL を参照してください。)
    GetPassengerInformation 基本 データ・ソース RESERVDB
    (これは、このノードで使用されるデータベースです。)
    基本 ESQL モジュール GetPassengerInformation
    (これは、処理中にこのノードによって使用される ESQL モジュールの名前です。 この名前は、ESQL ファイル中の CREATE COMPUTE MODULE ステートメント中の名前と一致していなければなりません。)
    基本 Compute モード (Compute Mode) LocalEnvironment and Message
    (この値は、LocalEnvironment に加えてメッセージも、変更後に XML_PASSENGERQUERY_OUT ノードに渡されます。)
    GetReservationsInformation 基本 データ・ソース RESERVDB
    (これは、このノードで使用されるデータベースです。)
    基本 ESQL モジュール GetReservationsInformation
    (これは、処理中にこのノードによって使用される ESQL モジュールの名前です。 この名前は、ESQL ファイル中の CREATE COMPUTE MODULE ステートメント中の名前と一致していなければなりません。)
    基本 Compute モード (Compute Mode) LocalEnvironment and Message
    (この値は、LocalEnvironment に加えてメッセージも、変更後に XML_PASSENGERQUERY_OUT ノードに渡されます。)
    XML_PASSENGERQUERY_OUT 基本 キュー名
    (キューはブローカーと同じキュー・マネージャーで定義されるので、キュー・マネージャーの名前を指定する必要はありません。)
    XML_PASSENGERQUERY_OUT
    (これは、メッセージ・フローがメッセージを書き込むローカル・キューです。)
  5. XML Airline メッセージ・フローのプロジェクトで、ESQL ファイル・プロジェクトをダブルクリックして ESQL エディターで開き、以下の ESQL コード・モジュールを ESQL ファイルにコピーして貼り付けます。 詳しくは、ESQL の開発を参照してください。
    -- ************************************************
    -- * ESQL for the XML_PassengerQuery message flow
    -- ************************************************
    
    CREATE COMPUTE MODULE DecideOnQuery
    	CREATE FUNCTION Main() RETURNS BOOLEAN
    	BEGIN
    		SET OutputRoot = InputRoot;
    		IF InputRoot.XML.PassengerQuery.ReservationNumber <> '' THEN
    			SET OutputLocalEnvironment.Destination.RouterList.DestinationData[1].labelname = 'SinglePassenger';
    		ELSE
    			SET OutputLocalEnvironment.Destination.RouterList.DestinationData[1].labelname = 'AllReservations';
    		END IF;
    		RETURN TRUE;
    	END;
    END MODULE;
    
    CREATE COMPUTE MODULE GetPassengerInformation
    	CREATE FUNCTION Main() RETURNS BOOLEAN
    	BEGIN
    		SET OutputRoot = InputRoot;
    		SET OutputRoot.XML.PassengerQuery = NULL;
    		-- populate the environment with passenger info from the database
    		SET Environment.Variables =
    			THE (SELECT T.* FROM Database.XMLPASSENGERTB AS T
    				WHERE T.RESERVATIONNO = InputRoot.XML.PassengerQuery.ReservationNumber);
    
    		-- populate the output message with info from the database query
    		CREATE FIELD OutputRoot.XML.PassengerInfoResponse.PassengerInfo;
    		DECLARE outpass REFERENCE TO OutputRoot.XML.PassengerInfoResponse.PassengerInfo;
    		SET outpass.ReservationNumber = Environment.Variables.RESERVATIONNO;
    		SET outpass.FirstName = Environment.Variables.FIRSTNAME;
    		SET outpass.LastName = Environment.Variables.LASTNAME;
    		SET outpass.FlightNumber = Environment.Variables.FLIGHTNO;
    		SET outpass.Date = Environment.Variables.FLIGHTDATE;
    		SET outpass.Class = Environment.Variables.CLASSTYPE;
    		RETURN TRUE;
    	END;
    END MODULE;
    
    CREATE COMPUTE MODULE GetReservationsInformation
    	CREATE FUNCTION Main() RETURNS BOOLEAN
    	BEGIN
    		SET OutputRoot = InputRoot;
    		SET OutputRoot.XML.PassengerQuery = NULL;
    		-- populate the environment with reservations info from the database
    		SET Environment.Variables.Reservation[] =
    			(SELECT T.* FROM Database.XMLPASSENGERTB AS T
    				WHERE T.FIRSTNAME = InputRoot.XML.PassengerQuery.FirstName
    				AND T.LASTNAME = InputRoot.XML.PassengerQuery.LastName);
    
    		-- populate the output message with info from the database query
    		CREATE FIELD OutputRoot.XML.PassengerInfoResponse.ListOfReservations;
    		DECLARE outres REFERENCE TO OutputRoot.XML.PassengerInfoResponse.ListOfReservations;
    		DECLARE I INTEGER 1;
    		DECLARE J INTEGER CARDINALITY(Environment.Variables.*[]);
    		WHILE I <= J DO
    			SET outres.Reservation[I].FlightNumber = Environment.Variables.Reservation[I].FLIGHTNO;
    			SET outres.Reservation[I].Date = Environment.Variables.Reservation[I].FLIGHTDATE;
    			SET outres.Reservation[I].Class = Environment.Variables.Reservation[I].CLASSTYPE;
    			SET I = I + 1;
    		END WHILE;
    		RETURN TRUE;
    	END;
    END MODULE;

これで、XML_PassengerQuery メッセージ・フローの作成が終わりました。このメッセージ・フローはフライトの座席を予約した特定の乗客に関する情報を取り出します。

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