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. Las adiciones realizadas en esta sentencia ayudan en el manejo de errores - consulte Codificación de ESQL para manejar errores.
‘nowhere’ : no se propaga ‘failure’ : Anomalía ‘out’ : Salida ‘out1' : Salida1 ‘out2' : Salida2 ‘out3' : Salida3 ‘out4’ : Salida4
-2 : no se propaga -1 : anomalía 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. Esta opción es necesaria si desea que los nodos mantengan y permitan actualizaciones de todo el árbol de mensajes en sentido descendente en el flujo de mensajes y se utiliza con DELETE NONE como se describe en el siguiente apartado.
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. Utilice DELETE NONE si desea que los nodos en sentido descendente puedan ver una sola instancia del mensaje del entorno local de salida y árboles de listas de excepciones.
Cada propagación se inicia con el contenido de estos árboles, tal como lo ha creado
la propagación anterior en lugar de empezar con árboles vacíos.
Si desea ver estos nodos para actualizar el árbol de salida, se debe utilizar DELETE NONE
con la opción FINALIZE NONE descrita en el apartado anterior.
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>