A instrução PROPAGATE propaga uma mensagem para os nós de recebimento de dados.
Você pode utilizar a instrução PROPAGATE em nós Compute e Database, mas não em nós Filter. As inclusões nesta instrução auxiliam na manipulação de erros - consulte Codificando o ESQL para Tratar Erros.
'nowhere' : no propagation ‘failure’ : Failure ‘out’ : Out ‘out1' : Out1 ‘out2' : Out2 ‘out3' : Out3 ‘out4’ : Out4
-2 : no propagation -1 : failure 0 : out 1 : out1 2 : out2 3 : out3 4 : out4
Se o resultado de TerminalExpression não for CHARACTER nem INTEGER, o intermediário emitirá uma exceção.
Se não houver uma cláusula TO TERMINAL nem TO LABEL, o intermediário propagará uma mensagem para o terminal "out".
Se o resultado de LabelExpression for NULL ou não for do tipo CHARACTER ou não houver um nó Label correspondente no fluxo, o intermediário emitirá uma exceção.
Se não houver uma cláusula TO TERMINAL nem TO LABEL, o intermediário propagará uma mensagem para o terminal "out".
As cláusulas MessageSources selecionam as árvores de mensagens a serem propagadas. Essa cláusula é aplicável apenas ao nó Compute (não tem efeito no nó Database).
ENVIRONMENT : InputLocalEnvironment OutputLocalEnvironment Mensagem: InputRoot OutputRoot ExceptionList : InputExceptionList OutputExceptionList
Se não houver uma cláusula MessageSources, o atributo "modo de computação" do nó será utilizado para determinar quais mensagens serão propagadas.
Essa cláusula é aplicável apenas ao nó Compute (não tem efeito em um nó Database).
Se FINALIZE for configurado como DEFAULT, ou a cláusula FINALIZE estiver ausente, a mensagem de saída (mas não o Ambiente, Ambiente Local ou Lista de Exceções) será finalizada antes da propagação.
Se
FINALIZE for configurado como NONE, não ocorrerá finalização.Essa opção é requerida se você quiser preservar e permitir atualizações de toda a árvore de mensagens de saída pelos nós de recebimento de dados no fluxo de mensagens e é utilizada com DELETE NONE conforme descrito na seção a seguir.
A cláusula DELETE é aplicável apenas ao nó Compute (não tem efeito em um nó Database).
Se DELETE for configurado como DEFAULT, ou a cláusula DELETE estiver ausente, o ambiente local de saída, a mensagem e a lista de exceções serão todos limpos e suas memórias recuperadas imediatamente após a propagação.
Se DELETE for configurado
como NONE, nada será limpo. Utilize DELETE NONE se quiser que os nós de recebimento de dados sejam capazes de ver uma única instância da mensagem de saída do ambiente local e árvores de listas de exceção.
cada propagação começa com o conteúdo dessas árvores conforme criado pela propagação anterior em vez de iniciar com as árvores vazias.
Se também quiser que esses nós atualizem a árvore de saída, DELETE NONE deve ser utilizado com a opção FINALIZE NONE descrita na seção anterior.
Observe que as árvores de saída finalizadas são limpas, independentemente de quais são propagadas.
A propagação é um processo síncrono. Ou seja, a próxima instrução não será executada até que todo o processamento da mensagem em nós de recebimento de dados tenha sido concluído. Saiba que esse processamento pode emitir exceções e que, se essas exceções não forem capturadas, elas impedirão que a instrução após a chamada PROPAGATE seja alcançada. Isso pode ser o que a lógica de seu fluxo requer mas, se não for, você poderá utilizar uma rotina de tratamento para capturar a exceção e desempenhar as ações necessárias. Observe que exceções emitidas no recebimento de dados de uma propagação, se não capturadas, também impedirão que as ações automáticas finais de um nó Compute ou Database (por exemplo, emitindo uma COMMIT Transaction configurada como Commit) ocorram.
DECLARE i INTEGER 1; DECLARE count INTEGER; SET count = CARDINALITY(InputRoot.XML.Invoice.Purchases."Item"[]) WHILE i <= count DO --utilize o procedimento gerado pelas ferramentas padrão para copiar cabeçalhos da mensagem CALL CopyMessageHeaders(); SET OutputRoot.XML.BookSold.Item = InputRoot.XML.Invoice.Purchases.Item[i]; PROPAGATE; SET i = i + 1; END WHILE; RETURN FALSE;
Aqui estão as mensagens produzidas no terminal OUT pela instrução PROPAGATE:
<BookSold> <Item> <Title Category="Computer" Form="Paperback" Edition="2">The XML Companion </Title> <ISBN>0201674866</ISBN> <Author>Neil Bradley</Author> <Publisher>Addison-Wesley</Publisher> <PublishDate>October 1999</PublishDate> <UnitPrice>27.95</UnitPrice> <Quantity>2</Quantity> </Item> </BookSold>
<BookSold> <Item> <Title Category="Computer" Form="Paperback" Edition="2">A Complete Guide to DB2 Universal Database</Title> <ISBN>1558604820</ISBN> <Author>Don Chamberlin</Author> <Publisher>Morgan Kaufmann Publishers</Publisher> <PublishDate>April 1998</PublishDate> <UnitPrice>42.95</UnitPrice> <Quantity>1</Quantity> </Item> </BookSold>
<BookSold> <Item> <Title Category="Computer" Form="Hardcover" Edition="0">JAVA 2 Developers Handbook</Title> <ISBN>0782121799</ISBN> <Author>Phillip Heller, Simon Roberts </Author> <Publisher>Sybex, Inc.</Publisher> <PublishDate>September 1998</PublishDate> <UnitPrice>59.99</UnitPrice> <Quantity>1</Quantity> </Item> </BookSold>