Instrução PROPAGATE

A instrução PROPAGATE propaga uma mensagem para os nós de recebimento de dados.

SINTAXE

Você pode utilizar a instrução PROPAGATE em nós Compute e Database, mas não em nós Filter.

Cláusula TO TERMINAL
Se a cláusula TO TERMINAL estiver presente, TerminalExpression será avaliado. Se o resultado for do tipo CHARACTER, uma mensagem será propagada para um terminal de acordo com a regra:
'nowhere' : no propagation
'failure' : failure
 ‘out’    : out 
 ‘out 1   : out1
 ‘out 2   : out2
 ‘out 3   : out3
 ‘out 4’  : out4
Dica: Os nomes de terminais fazem distinção entre maiúsculas e minúsculas, por exemplo, "Out1" não corresponde a nenhum terminal.
Se o resultado de TerminalExpression for do tipo INTEGER, uma mensagem será propagada para um terminal de acordo com a regra:
-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".

Dica: Utilizar valores de caracteres nas expressões de terminal conduzem a um código mais natural e legível. Entretanto, valores inteiros são mais fáceis de serem manipulados em loops e um pouco mais rápidos.
Cláusula TO LABEL
Se a cláusula TO LABEL estiver presente, LabelExpression será avaliado. Se o resultado for do tipo CHARACTER e houver um nó Label com um atributo de rótulo que corresponda à LabelExpression, no mesmo fluxo, o intermediário propagará uma mensagem para esse nó.
Dica: Os rótulos, como terminais, fazem distinção entre maiúsculas e minúsculas. Observe também que, quanto à rota para os nós Label, é o atributo labelName do nó Label que define o destino, não o próprio rótulo do nó.

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".

Cláusulas MessageSources

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).

Os valores que podem ser especificados em cláusulas MessageSources são:
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.

Cláusula FINALIZE
A finalização é um processo que corrige cadeias de cabeçalhos e faz a pasta Propriedades corresponder aos cabeçalhos. Se presente, a cláusula FINALIZE permite que a finalização seja controlada.

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.

Cláusula DELETE
A cláusula DELETE permite a limpeza do ambiente local de saída, da mensagem e da lista de exceções a serem controlados.

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.

Observe que são as árvores de saída que são finalizadas e limpas, independentemente de quais foram propagadas.

O nó Compute permite que sua mensagem de saída seja alterada por outros nós (pelos outros nós que estão alterando suas mensagens de saída). Entretanto, uma mensagem criada por um nó Compute não pode ser alterada por um outro nó depois de:
  • Ser finalizada
  • Ter alcançado qualquer saída ou outro nó que gera um fluxo de bits

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>
Conceitos relacionados
Visão Geral do ESQL
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2005 Última Atualização: 04/11/2005
ak05110_