Crear el flujo de mensajes XML_FlightQueryIn

Utilice las siguientes instrucciones para crear el flujo de mensajes XML_FlightQueryIn. Para obtener instrucciones más detalladas, pulse en los enlaces que se proporcionan al final de cada paso.

Antes de crear el flujo de mensajes XML_FlightQueryReply, debe crear los flujos de mensajes XML_FlightQueryOut y XML_FlightQueryReply. Para ver las instrucciones, consulte los apartados Crear el flujo de mensajes XML_FlightQueryOut y Crear el flujo de mensajes XML_FlightQueryReply.

Para crear y configurar el flujo de mensajes XML_FlightQueryIn:

  1. Cree un nuevo flujo de mensajes denominado XML_FlightQueryIn.
    Para obtener instrucciones, consulte Crear un flujo de mensajes.
  2. En el editor de flujos de mensajes, añada y renombre los nodos que se listan en la siguiente tabla.
    Para ver las instrucciones, consulte el apartado Añadir un nodo.
    Tipo de nodo Nombre de nodo
    MQInput XML_FLIGHTQUERY_REPLIES
    MQOutput XML_FLIGHTQUERY_OUT
    MQOutput XML_FLIGHTQUERY_TIMEOUT
    MQOutput XML_FLIGHTQUERY_FAIL
    Compute BuildOutputMessage
    Compute ProcessTimeout
    AggregateReply AggregateReplies
  3. Conecte los nodos tal como se muestra en la siguiente tabla.
    Para obtener instrucciones, consulte Conectar nodos.
    Para comprobar si ha conectado los nodos correctamente, vea la figura de Acerca del flujo de mensajes XML_FlightQueryIn.
    Nombre de nodo Terminal Conectar a
    XML_FLIGHTQUERY_REPLIES Out (de salida) AggregateReplies (terminal In)
    Catch (de captación) XML_FLIGHTQUERY_FAIL
    AggregateReplies Out (de salida) BuildOutputMessage
    Timeout (de tiempo de espera) ProcessTimeout
    BuildOutputMessage Out (de salida) XML_FLIGHTQUERY_OUT
    ProcessTimeout Out (de salida) XML_FLIGHTQUERY_TIMEOUT
  4. Configure las propiedades del nodo, tal como se muestra en la siguiente tabla. Acepte los valores por omisión para todas las propiedades, a menos que en la tabla se muestre un valor alternativo.
    Para ver las instrucciones, consulte el apartado Configurar un nodo.
    Nombre de nodo Página Propiedad Valor
    XML_FLIGHTQUERY_REPLIES Básico Nombre de cola XML_FLIGHTQUERY_REPLIES
    (Esta es la cola donde XML_FlightQueryOut ha colocado el mensaje de control.)
    Valor por omisión Dominio del mensaje XML
    (Indica al intermediario que utilice el analizador XML genérico.)
    Aggregate Replies Básico Nombre de agregación FLIGHTDETAILSAGG
    (Este nombre debe coincidir con la propiedad Nombre de agregación del nodo Request details del flujo de mensajes FlightQuery_Out.)
    Básico Tiempo de espera excedido de mensaje desconocido 60
    (Es el tiempo durante el cual se retienen los mensajes que no pueden identificarse como respuestas antes de propagarlos al terminal desconocido (Unknown).)
    Build output message Básico Módulo ESQL BuildOutputMessage
    (Este es el nombre del módulo ESQL que utiliza este nodo durante el proceso. El nombre ha de coincidir con el nombre que aparece en la sentencia CREATE COMPUTE en el archivo ESQL.)
    XML_FLIGHTQUERY_OUT Básico Nombre de cola
    (No es necesario especificar el nombre del gestor de colas porque la cola está definida en el mismo gestor de colas que el intermediario.)
    XML_FLIGHTQUERY_OUT
    (Esta es la cola local en la que el flujo de mensajes coloca el mensaje.)
    Process timeout Básico Módulo ESQL ProcessTimeout
    (Este es el nombre del módulo ESQL que utiliza este nodo durante el proceso. El nombre ha de coincidir con el nombre que aparece en la sentencia CREATE COMPUTE en el archivo ESQL.)
    XML_FLIGHTQUERY_TIMEOUT Básico

    Nombre de cola
    (No es necesario especificar el nombre del gestor de colas porque la cola está definida en el mismo gestor de colas que el intermediario.)

    XML_FLIGHTQUERY_TIMEOUT
    (Esta es la cola local en la que el flujo de mensajes coloca el mensaje agregado incompleto si algún mensaje de respuesta no llega al nodo Aggregate Replies antes del tiempo de espera especificado en el nodo Request Details del flujo de mensajes XML_FlightQueryOut.)
    XML_FLIGHTQUERY_FAIL Básico Nombre de cola
    (No es necesario especificar el nombre del gestor de colas porque la cola está definida en el mismo gestor de colas que el intermediario.)
    XML_FLIGHTQUERY_FAIL
    (Es donde el flujo de mensajes coloca el mensaje si el proceso falla.)
  5. En el proyecto de flujos de mensajes de Reserva de vuelos XML, efectúe una doble pulsación en el proyecto de archivo ESQL para abrirlo en el editor ESQL y, a continuación, copie y pegue los siguientes módulos de código ESQL en el archivo ESQL. Si desea ver más información, consulte el apartado Desarrollar ESQL.
    -- ************************************************
    -- * ESQL para el flujo de mensajes XML_FlightQueryIn
    -- *******************************************************
    
    CREATE COMPUTE MODULE BuildOutputMessage
    	CREATE FUNCTION Main() RETURNS BOOLEAN
    	BEGIN
    		-- fije el mensaje de respuesta agregado a una cola para su salida
    		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;
    
    		-- llene el mensaje de salida con información del vuelo de la respuesta agregada
    		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;
    
    		-- llene el menaje de salida con información sobre los pasajeros de la respuesta agregada
    		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 -- habrá una respuesta o ninguna
    			SET timedout.TimedOut = reps.XML;
    		END IF;
    		RETURN TRUE;
    	END;
    END MODULE;
    

Acaba de crear el flujo de mensajes XML_FlightQueryIn, que es la parte de abanico de entrada agregada del flujo de mensajes XML_FlightQuery. El flujo de mensajes XML_FlightQueryIn trabaja con los flujos de mensajes XML_FlightQueryOut y XML_FlightQueryReply para solicitar información sobre un vuelo específico y los pasajeros que han reservado asientos en ese vuelo.

Icono de la página principal   Volver al ejemplo Crear el ejemplo Reserva de vuelos