Sentencia PROPAGATE

La sentencia PROPAGATE propaga un mensaje a los nodos en sentido descendente.

SINTAXIS

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.

Cláusula TO TERMINAL
Si está presente la cláusula TO TERMINAL, se evalúa ExpresiónTerminal. Si el resultado es del tipo CHARACTER, se propaga un mensaje a un terminal, según la norma:
‘nowhere’ : no se propaga
‘failure’ : Anomalía
‘out’    : Salida
‘out 1'  : Salida1
‘out 2'  : Salida2
‘out 3'  : Salida3
‘out 4’  : Salida4
Consejo: Los nombres de terminal son sensibles a mayúsculas y minúsculas, por ejemplo, "Salida1" no coincide con ningún terminal.
Si el resultado de ExpresiónTerminal es del tipo INTEGER, se propaga un mensaje a un terminal, según la norma:
-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".

Consejo: La utilización de valores de caracteres en expresiones de terminal conduce a un código muy natural y legible. Sin embargo, los valores enteros son más fáciles de manipular en bucles y ligeramente más rápidos.
Cláusula TO LABEL
Si está presente la cláusula TO LABEL, se evalúa ExpresiónEtiqueta. Si el resultado es del tipo CHARACTER y hay un nodo Label con un atributo de etiqueta que coincide con ExpresiónEtiqueta, en el mismo flujo, el intermediario propaga un mensaje a ese nodo.
Consejo: Las etiquetas, como los terminales, son sensibles a las mayúsculas y minúsculas. Además, observe que, al igual que con los nodos RoutetoLabel, es el atributo labelName del nodo Label el que define el destino, no la etiqueta del nodo en sí.

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

Cláusulas MessageSources

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

Los valores que puede especificar en las cláusulas MessageSources son:
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.

Cláusula FINALIZE
La finalización es un proceso que fija cadenas de cabecera y relaciona la carpeta Properties con las cabeceras. La cláusula FINALIZE, si está presente, permite controlar la finalización.

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.

Cláusula DELETE
La cláusula DELETE permite controlar el borrado del entorno local, el mensaje y la lista de excepciones de salida.

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.

El nodo Compute permite que otros nodos cambien su mensaje de salida (cuando los otros nodos cambian sus mensajes de entrada). Sin embargo, un mensaje creado por un nodo Compute no puede ser cambiado por otro nodo después de:
  • Haber finalizado
  • Haber llegado a un nodo de salida, u otro nodo que genera una corriente de bits

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>
Conceptos relacionados
Visión general de ESQL
Codificación de ESQL para manejar errores
Tareas relacionadas
Desarrollo de ESQL
Generación de varios mensajes de salida
Confirmación de actualizaciones de base de datos
Referencia relacionada
Diagramas de sintaxis: tipos disponibles
Sentencias ESQL
Sentencia RETURN
Mensaje de ejemplo
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 04/05/2006
ak05110_