La sentencia PROPAGATE propaga un mensaje a los nodos en sentido descendente.
Puede utilizar la sentencia PROPAGATE en los nodos Compute y Database, pero no en los nodos Filter.
‘nowhere’ : no se propaga ‘failure’ : anomalías ‘out’ : salida ‘out 1 : salida1 ‘out 2 : salida2 ‘out 3 : salida3 ‘out 4’ : salida4
-2 : no se propaga -1 : anomalías 0 : salida 1 : salida1 2 : salida2 3 : salida3 4 : salida4
Si el resultado de ExpresiónTerminal no es CHARACTER ni INTEGER, el intermediario genera una excepción.
Si no hay una cláusula TO TERMINAL ni TO LABEL, el intermediario propaga un mensaje al terminal de "salida".
Si el resultado de ExpresiónEtiqueta es NULL o no es del tipo CHARACTER, o no hay ningún nodo Label coincidente en el flujo, el intermediario genera una excepción.
Si no hay una cláusula TO TERMINAL ni TO LABEL, el intermediario propaga un mensaje al terminal de "salida".
Las cláusulas MessageSources seleccionan los árboles de mensajes que deben propagarse. Esta cláusula sólo es aplicable al nodo Compute (no tiene ningún efecto en el nodo Database).
ENVIRONMENT : InputLocalEnvironment OutputLocalEnvironment Message : InputRoot OutputRoot ExceptionList : InputExceptionList OutputExceptionList
Si no hay ninguna cláusula MessageSources, se utiliza el atributo "modalidad de cálculo" del nodo para determinar los mensajes que se han de propagar.
Esta cláusula sólo es aplicable al nodo Compute (no tiene ningún efecto en un nodo Database).
Si FINALIZE está establecido en DEFAULT, o la cláusula FINALIZE no está presente, el mensaje de salida (pero no el Entorno, Entorno local o Lista de excepciones) finaliza antes de la propagación.
Si FINALIZE está establecido en NONE, no tiene lugar ninguna finalización.
La cláusula DELETE sólo es aplicable al nodo Compute (no tiene ningún efecto en un nodo Database).
Si DELETE está establecido en DEFAULT, o la cláusula DELETE no está presente, se borran el entorno local, el mensaje y la lista de excepciones de salida, y su memoria se recupera inmediatamente después de la propagación.
Si DELETE está establecido en NONE, no se borra nada.
Observe que son los árboles de salida los que se finalizan y borran, independientemente de los que se propaguen.
La propagación es un proceso síncrono. Es decir, la siguiente sentencia no se ejecuta hasta que se completan todos los procesos del mensaje en nodos en sentido descendente. Tenga en cuenta que este proceso puede generar excepciones y que, si no se detectan estas excepciones, impedirán que se alcance la sentencia siguiente a la llamada a PROPAGATE. Es posible que esto sea lo que requiere la lógica del flujo, pero si no es así, puede utilizar un manejador para detectar la excepción y realizar las acciones necesarias. Las excepciones que se generan en sentido descendente desde una propagación, si no se detectan, también impedirán que se realicen las acciones automáticas finales de un nodo Compute o Database (por ejemplo, emitir un COMMIT Transaction set to Commit).
DECLARE i INTEGER 1; DECLARE count INTEGER; SET count = CARDINALITY(InputRoot.XML.Invoice.Purchases."Item"[]) WHILE i <= count DO --utilizar el procedimiento por omisión generado por herramientas para --copiar cabeceras de mensajes CALL CopyMessageHeaders(); SET OutputRoot.XML.BookSold.Item = InputRoot.XML.Invoice.Purchases.Item[i]; PROPAGATE; SET i = i+1; END WHILE; RETURN FALSE;
Los siguientes son los mensajes que la sentencia PROPAGATE genera en el terminal OUT:
<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>