Criando o Fluxo de Mensagens XML_CancelReservation

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

Para criar e configurar o fluxo de mensagens XML_CancelReservation:

  1. Crie um novo fluxo de mensagens denominado XML_CancelReservation.
    Para obter instruções, consulte Criando um Fluxo de Mensagens.
  2. No editor Message Flow, 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_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. 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_CancelReservation.
    Nome do Nó Terminal Conectar a
    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. 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_CANCELRESERVATION_IN Básico Nome da fila XML_CANCELRESERVATION_IN
    (Essa é a fila local de onde o fluxo de mensagens obtém a mensagem.)
    Padrão Domínio de Mensagens XML
    (Isso instrui o intermediário a utilizar o analisador XML genérico.)
    DeleteReservation Básico Fonte de Dados RESERVDB
    (Esse é o banco de dados utilizado por esse nó.)
    Básico Módulo ESQL DeleteReservation
    (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.)
    Básico Exceção Emitida em Erro do Banco de Dados Limpe a caixa de opções para que você possa especificar no ESQL, como o fluxo de mensagens deve lidar com erros de banco de dados. Se a caixa de opções for selecionada, quando houver um erro de banco de dados, o fluxo de mensagens, por padrão, emitirá uma exceção e transmitirá a mensagem para a fila FAIL.
    Trace Básico Destino Local Error Log
    (Isso instrui o nó a gravar as informações de rastreio no registro de erros local. No Windows, o registro de erros local é o Visualizador de Eventos; no Linux, o registro de erros local é syslog.)
    Básico Padrão ==== Erro ao Excluir nó Reservation ==================
    ${ExceptionList}

    (Isso registra a parte da árvore ExceptionList da mensagem.)
    Básico Número da Mensagem 3051
    XML_CANCELRESERVATION_FAIL1_1 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_CANCELRESERVATION_FAIL1
    (Essa é a fila local na qual o fluxo de mensagens coloca a mensagem se o processamento falhar.)
    XML_CANCELRESERVATION_FAIL1_2 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_CANCELRESERVATION_FAIL1
    (Essa é a fila local na qual o fluxo de mensagens coloca a mensagem se o processamento falhar.)
    Trace1 Básico Destino Local Error Log
    (Isso instrui o nó a gravar as informações de rastreio no registro de erros local. No Windows, o registro de erros local é o Visualizador de Eventos; no Linux, o registro de erros local é syslog.)
    Básico Padrão ========== Mensagem após Excluir nó Reservation ===================
    ${Root}
    ${Environment}

    (Isso registra a parte da árvore Mensagem e Ambiente da mensagem.)
    Básico Número da Mensagem 3051
    IncrementSeat Básico Fonte de Dados RESERVDB
    (Esse é o banco de dados utilizado por esse nó.)
    Básico Módulo ESQL IncrementSeat
    (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 XML_CancelReservation.esql.)
    Trace2 Básico Destino Local Error Log
    (Isso instrui o nó a gravar as informações de rastreio no registro de erros local. No Windows, o registro de erros local é o Visualizador de Eventos; no Linux, o registro de erros local é syslog.)
    Básico Padrão ======== Erro ao Incrementar nó Seat ===================
    ${ExceptionList}


    (Isso registra a parte da árvore ExceptionList da mensagem.)
    Básico Número da Mensagem 3051
    XML_CANCELRESERVATION_FAIL2 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_CANCELRESERVATION_FAIL2
    (Essa é a fila local na qual o fluxo de mensagens coloca a mensagem se o processamento falhar.)
    XML_CANCELRESERVATION_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_CANCELRESERVATION_OUT
    (Essa é a fila local na qual o fluxo de mensagens coloca a mensagem.)
  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_CancelReservation
    -- ************************************************
    
    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;

Agora você criou o fluxo de mensagens XML_CancelReservation, que cancela reservas feitas anteriormente pelo fluxo de mensagens XML_Reservation.

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