Criando o Fluxo de Mensagens XML_FlightQueryIn

Utilize as instruções a seguir para criar o fluxo de mensagens XML_FlightQueryIn. Para obter instruções mais detalhadas, clique nos links fornecidos no final de cada etapa.

Antes de criar o fluxo de mensagens XML_FlightQueryReply, é necessário criar os fluxos de mensagens XML_FlightQueryOut e XML_FlightQueryReply. Para obter instruções, consulte Criando o Fluxo de Mensagens XML_FlightQueryOut e Criando o Fluxo de Mensagens XML_FlightQueryReply.

Para criar e configurar o fluxo de mensagens XML_FlightQueryIn:

  1. Crie um novo fluxo de mensagens denominado XML_FlightQueryIn.
    Para obter instruções, consulte Criando um Fluxo de Mensagens.
  2. No editor de Fluxo de Mensagens, inclua e renomeie os nós listados na tabela a seguir.
    Para obter instruções, consulte Incluindo um Nó.
    Tipo do Nó Nome do Nó
    MQInput XML_FLIGHTQUERY_REPLIES
    MQOutput XML_FLIGHTQUERY_OUT
    MQOutput XML_FLIGHTQUERY_TIMEOUT
    MQOutput XML_FLIGHTQUERY_FAIL
    Compute BuildOutputMessage
    Compute ProcessTimeout
    AggregateReply AggregateReplies
  3. Conecte os nós conforme mostrado na tabela a seguir.
    Para obter instruções, consulte Conectando Nós.
    Para verificar se os nós foram conectados corretamente, veja a figura em Sobre o Fluxo de Mensagens XML_FlightQueryIn.
    Nome do Nó Terminal Conectar a
    XML_FLIGHTQUERY_REPLIES Out AggregateReplies (Terminal Entrada)
    Catch XML_FLIGHTQUERY_FAIL
    AggregateReplies Out BuildOutputMessage
    Timeout ProcessTimeout
    BuildOutputMessage Out XML_FLIGHTQUERY_OUT
    ProcessTimeout Out XML_FLIGHTQUERY_TIMEOUT
  4. Configure as propriedades do nó, conforme mostradas na tabela a seguir. Aceite os valores padrão para todas as propriedades, a menos que seja mostrado um valor alternativo na tabela.
    Para obter instruções, consulte Configurando um Nó.
    Nome do Nó Ativo Propriedade Valor
    XML_FLIGHTQUERY_REPLIES Básico Nome da fila XML_FLIGHTQUERY_REPLIES
    (Essa é a fila na qual a mensagem de controle foi colocada pelo XML_FlightQueryOut.)
    Padrão Domínio de Mensagens XML
    (Isso instrui o intermediário a utilizar o analisador XML genérico.)
    Aggregate Replies Básico Nome Agregado FLIGHTDETAILSAGG
    (Este nome deve corresponder à propriedade Nome Agregado do nó Request Details no fluxo de mensagens FlightQuery_Out.)
    Básico Tempo Limite de Mensagens Desconhecido 60
    (Esse é o período de tempo para o qual as mensagens que não podem ser identificadas como respostas são retidas antes de serem propagadas para o terminal Desconhecido.)
    Build output message Básico Módulo ESQL BuildOutputMessage
    (Esse é o nome do módulo ESQL utilizado por esse nó durante o processamento. O nome deve corresponder ao nome na instrução CREATE COMPUTE MODULE no arquivo ESQL.)
    XML_FLIGHTQUERY_OUT Básico Nome da fila
    (Não é necessário especificar o nome do Gerenciador de Filas, porque a fila está definida no mesmo gerenciador de filas que o intermediário.)
    XML_FLIGHTQUERY_OUT
    (Essa é a fila local na qual o fluxo de mensagens coloca a mensagem.)
    Process timeout Básico Módulo ESQL ProcessTimeout
    (Esse é o nome do módulo ESQL utilizado por esse nó durante o processamento. O nome deve corresponder ao nome na instrução CREATE COMPUTE MODULE no arquivo ESQL.)
    XML_FLIGHTQUERY_TIMEOUT Básico

    Nome da fila
    (Não é necessário especificar o nome do Gerenciador de Filas, porque a fila está definida no mesmo gerenciador de filas que o intermediário.)

    XML_FLIGHTQUERY_TIMEOUT
    (Essa á a fila local na qual o fluxo de mensagens coloca a mensagem agregada incompleta se todas as mensagens de resposta não atingirem o nó Aggregate Replies antes do tempo limite especificado no nó Request Details no fluxo de mensagens XML_FlightQueryOut.)
    XML_FLIGHTQUERY_FAIL Básico Nome da fila
    (Não é necessário especificar o nome do Gerenciador de Filas, porque a fila está definida no mesmo gerenciador de filas que o intermediário.)
    XML_FLIGHTQUERY_FAIL
    (É onde o fluxo de mensagens coloca a mensagem se o processamento falhar.)
  5. No projeto XML Airline Messageflows, dê um clique duplo no projeto do arquivo ESQL para abri-lo no editor ESQL e, em seguida, copie e cole os seguintes módulos do código ESQL no arquivo ESQL. Para obter informações adicionais, consulte Desenvolvendo ESQL.
    -- ************************************************
    -- * ESQL para o fluxo de mensagens XML_FlightQueryIn
    -- ************************************************
    
    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 -- haverá uma resposta ou nenhuma
    			SET timedout.TimedOut = reps.XML;
    		END IF;
    		RETURN TRUE;
    	END;
    END MODULE;
    

Agora, você criou o fluxo de mensagens XML_FlightQueryIn, que é a parte de recepção agregada do fluxo de mensagens XML_FlightQuery. O fluxo de mensagens XML_FlightQueryIn funciona com os fluxos de mensagens XML_FlightQueryOut e XML_FlightQueryReply para solicitar informações sobre um vôo específico ou sobre passageiros que reservaram assentos naquele vôo.

Ícone Página Principal   Voltar para Construção da Amostra Reservas Aéreas