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:Inicio del cambio
‘nowhere’ : no se propaga
‘failure’ : Anomalía
 ‘out’    : Salida 
 ‘out1'   : Salida1
 ‘out2'   : Salida2
 ‘out3'   : Salida3
 ‘out4’   : Salida4
Fin del cambio
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).

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

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.

Inicio del cambioSi 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.Fin del cambio

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.

Inicio del cambioSi 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.Fin del cambio

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>
Conceptos relacionados
Visión general de ESQL
Codificación de ESQL para manejar errores
Tareas relacionadas
Desarrollo de ESQL
Generar varios mensajes de salida
Confirmar las 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: 22/08/2006
ak05110_