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

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

XML_FlightQueryReply メッセージ・フローを作成するためには、まず、XML_FlightQueryOut メッセージ・フローと XML_FlightQueryReply メッセージ・フローを作成する必要があります。 その方法については、XML_FlightQueryOut メッセージ・フローの作成、および XML_FlightQueryReply メッセージ・フローの作成を参照してください。

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

  1. XML_FlightQueryIn という新規のメッセージ・フローを作成します。
    その方法については、メッセージ・フローの作成を参照してください。
  2. メッセージ・フロー・エディターで、次の表にリストされているノードを追加して名前変更します。
    その方法については、ノードの追加を参照してください。
    ノードのタイプ ノード名
    MQInput XML_FLIGHTQUERY_REPLIES
    MQOutput XML_FLIGHTQUERY_OUT
    MQOutput XML_FLIGHTQUERY_TIMEOUT
    MQOutput XML_FLIGHTQUERY_FAIL
    Compute BuildOutputMessage
    Compute ProcessTimeout
    AggregateReply AggregateReplies
  3. 次の表に示されているように、ノードを接続します。
    その方法については、ノードの接続を参照してください。
    ノードが正しく接続されたかどうかを確認する には、『XML_FlightQueryIn メッセージ・フローについて』の図を参照してください。
    ノード名 ターミナル 接続先
    XML_FLIGHTQUERY_REPLIES Out AggregateReplies (In ターミナル)
    Catch XML_FLIGHTQUERY_FAIL
    AggregateReplies Out BuildOutputMessage
    Timeout ProcessTimeout
    BuildOutputMessage Out XML_FLIGHTQUERY_OUT
    ProcessTimeout Out XML_FLIGHTQUERY_TIMEOUT
  4. 次の表に示されているように、ノードのプロパティーを構成します。 この表に代替値が示されていなければ、すべてのプロパティーに関してデフォルト値を受け入れます。
    その方法については、ノードの構成を参照してください。
    ノード名 ページ プロパティー
    XML_FLIGHTQUERY_REPLIES 基本 キュー名 XML_FLIGHTQUERY_REPLIES
    (これは、XML_FlightQueryOut によって制御メッセージが書き込まれたキューです。)
    デフォルト メッセージ・ドメイン XML
    (これは、汎用 XML パーサーを使用するようにブローカーに指示します。)
    Aggregate Replies 基本 集約名 FLIGHTDETAILSAGG
    (この名前は、FlightQuery_Out メッセージ・フローの Request Details ノードの「集合名」プロパティーと一致していなければなりません。)
    基本 不明なメッセージ・タイムアウト 60
    (これは応答として識別できないメッセージが、Unknown ターミナルに伝搬されるまでに保持される時間の長さです。)
    Build output message 基本 ESQL モジュール BuildOutputMessage
    (これは、処理中にこのノードによって使用される ESQL モジュールの名前です。 この名前は、ESQL ファイル中の CREATE COMPUTE MODULE ステートメント中の名前と一致していなければなりません。)
    XML_FLIGHTQUERY_OUT 基本 キュー名
    (キューはブローカーと同じキュー・マネージャーで定義されるので、キュー・マネージャーの名前を指定する必要はありません。)
    XML_FLIGHTQUERY_OUT
    (これは、メッセージ・フローがメッセージを書き込むローカル・キューです。)
    Process timeout 基本 ESQL モジュール ProcessTimeout
    (これは、処理中にこのノードによって使用される ESQL モジュールの名前です。 この名前は、ESQL ファイル中の CREATE COMPUTE MODULE ステートメント中の名前と一致していなければなりません。)
    XML_FLIGHTQUERY_TIMEOUT 基本

    キュー名
    (キューはブローカーと同じキュー・マネージャーで定義されるので、キュー・マネージャーの名前を指定する必要はありません。)

    XML_FLIGHTQUERY_TIMEOUT
    (これは、XML_FlightQueryOut メッセージ・フロー中の Request Details ノード中に指定されたタイムアウトの前に、Aggregate Replies ノードに達しない応答メッセージがある場合に、メッセージ・フローが未完成の集約メッセージを書き込むローカル・キューです。)
    XML_FLIGHTQUERY_FAIL 基本 キュー名
    (キューはブローカーと同じキュー・マネージャーで定義されるので、キュー・マネージャーの名前を指定する必要はありません。)
    XML_FLIGHTQUERY_FAIL
    (これは、処理が失敗した場合にメッセージ・フローがメッセージを書き込む場所です。)
  5. XML Airline メッセージ・フローのプロジェクトで、ESQL ファイル・プロジェクトをダブルクリックして ESQL エディターで開き、以下の ESQL コード・モジュールを ESQL ファイルにコピーして貼り付けます。 詳しくは、ESQL の開発を参照してください。
    -- ************************************************
    -- * ESQL for the XML_FlightQueryIn message flow
    -- ************************************************
    
    CREATE COMPUTE MODULE BuildOutputMessage
    	CREATE FUNCTION Main() RETURNS BOOLEAN
    	BEGIN
    		-- fix the aggregate reply message for output to a queue
    		SET OutputRoot.Properties = InputRoot.Properties;
    		CREATE NEXTSIBLING OF OutputRoot.Properties DOMAIN 'MQMD';
    		SET OutputRoot.MQMD.StrucId = MQMD_STRUC_ID;
    		SET OutputRoot.MQMD.Version = MQMD_CURRENT_VERSION;
    
    		DECLARE inflight REFERENCE TO InputRoot.ComIbmAggregateReplyBody.FlightDetails.XML.Flight;
    		DECLARE inpass REFERENCE TO InputRoot.ComIbmAggregateReplyBody.PassengerDetails.XML.ListOfPassengers;
    		CREATE FIELD OutputRoot.XML.FlightDetailsInfoResponse;
    		DECLARE outresp REFERENCE TO OutputRoot.XML.FlightDetailsInfoResponse;
    
    		-- populate the output message with flight info from the aggregate reply
    		CREATE FIRSTCHILD OF outresp.Flight TYPE NameValue NAME 'number' VALUE inflight.FLIGHTNO;
    		SET outresp.Flight.(XML.Attribute)Flightdate VALUE = inflight.FLIGHTDATE;
    		SET outresp.Flight.FirstClass.Capacity = inflight.TOTALFIRST;
    		SET outresp.Flight.FirstClass.Used = inflight.FIRSTCLASS;
    		SET outresp.Flight.FirstClass.Price = inflight.FIRSTPRICE;
    		SET outresp.Flight.EconomyClass.Capacity = inflight.TOTALECONOMIC;
    		SET outresp.Flight.EconomyClass.Used = inflight.ECONOMICCLASS;
    		SET outresp.Flight.EconomyClass.Price = inflight.ECONOMICPRICE;
    		SET outresp.Flight.Origin = inflight.STARTPOINT;
    		SET outresp.Flight.Destination = inflight.ENDPOINT;
    
    		-- populate the output message with passenger info from the aggregate reply		
    		DECLARE I INTEGER 1;
    		DECLARE J INTEGER CARDINALITY(inpass.*[]);
    		WHILE I <= J DO
    			SET outresp.ListOfPassengers.Passenger[I].ReservationNumber = inpass.PassengerDetails[I].RESERVATIONNO;
    			SET outresp.ListOfPassengers.Passenger[I].FirstName = inpass.PassengerDetails[I].FIRSTNAME;
    			SET outresp.ListOfPassengers.Passenger[I].LastName = inpass.PassengerDetails[I].LASTNAME;
    			SET outresp.ListOfPassengers.Passenger[I].Class = inpass.PassengerDetails[I].CLASSTYPE;
    			SET I = I + 1;
    		END WHILE;
    	RETURN TRUE;
    	END;
    END MODULE;
    
    CREATE COMPUTE MODULE ProcessTimeout
    	CREATE FUNCTION Main() RETURNS BOOLEAN
    	BEGIN
    		SET OutputRoot.Properties = InputRoot.Properties;
    		CREATE NEXTSIBLING OF OutputRoot.Properties DOMAIN 'MQMD';
    		SET OutputRoot.MQMD.StrucId = MQMD_STRUC_ID;
    		SET OutputRoot.MQMD.Version = MQMD_CURRENT_VERSION;
    		CREATE FIELD OutputRoot.XML.ComIbmAggregateReplyBody;
    		DECLARE timedout REFERENCE TO OutputRoot.XML.ComIbmAggregateReplyBody;
    		DECLARE reps REFERENCE TO InputRoot.ComIbmAggregateReplyBody;
    		MOVE reps FIRSTCHILD;
    		IF LASTMOVE(reps) THEN -- there will either be one reply, or none
    			SET timedout.TimedOut = reps.XML;
    		END IF;
    		RETURN TRUE;
    	END;
    END MODULE;
    

これで、XML_FlightQueryIn メッセージ・フローの作成が終わりました。このメッセージ・フローは、XML_FlightQuery メッセージ・フローの集約ファンイン部分です。 XML_FlightQueryIn メッセージ・フローは、XML_FlightQueryOut および XML_FlightQueryReply メッセージ・フローと連動して、特定のフライトおよびそのフライトの座席を予約した乗客に関する情報を要求します。

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