Istruzione PROPAGATE

L'istruzione PROPAGATE propaga un messaggio ai nodi downstream.

SINTASSI

E' possibile utilizzare l'istruzione PROPAGATE nei nodi Compute e Database, ma non nei nodi Filter. Le aggiunte a questa istruzione sono utili per la gestione degli errori - consultare Codifica ESQL per gestire gli errori.

Clausola TO TERMINAL
Se è presente la clausola TO TERMINAL, TerminalExpression viene valutata. Se il risultato è di tipo CHARACTER, viene propagato un messaggio ad un terminale in base alla regola:Inizio modifica
‘nowhere’ : no propagation
‘failure’ : Failure
 ‘out’    : Out 
 ‘out1'  : Out1
 ‘out2'  : Out2
 ‘out3'  : Out3
 ‘out4’  : Out4
Fine modifica
Suggerimento: I nomi di terminali sono sensibili al maiuscolo/minuscolo, per cui, ad esempio, "Out1" non corrisponde a qualsiasi terminale.
Se il risultato di TerminalExpression è di tipo INTEGER, viene propagato un messaggio ad un terminale in base alla regola:
-2 : no propagation
-1 : failure
 0 : out 
 1 : out1
 2 : out2
 3 : out3
 4 : out4

Se il risultato di TerminalExpression non è CHARACTER oppure INTEGER, il broker genera un'eccezione.

Se non sono presenti una clausola TO TERMINAL oppure TO LABEL, il broker propaga un messaggio al terminale "out".

Suggerimento: L'utilizzo dei valori character nelle espressioni del terminale consente di scrivere codice naturale e facilmente leggibile. Tuttavia, i valori integer sono più semplici da manipolare nei loop e più rapidi.
Clausola TO LABEL
Se è presente la clausola TO LABEL, LabelExpression viene valutata. Se il risultato è di tipo CHARACTER ed esiste un nodo Label con un attributo label che corrisponde a LabelExpression, nello stesso flusso, il broker propaga un messaggio a tale nodo.
Suggerimento: Le etichette, come i terminali, sono sensibili al maiuscolo/minuscolo. Inoltre, notare che, per quanto riguarda i nodi Label, è l'attributo labelName del nodo Label che definisce la destinazione, non l'etichetta del nodo.

Se il risultato di LabelExpression è NULL oppure non è di tipo CHARACTER oppure se non esiste un nodo Label corrispondente nel flusso, il broker genera un'eccezione.

Se non sono presenti una clausola TO TERMINAL oppure TO LABEL, il broker propaga un messaggio al terminale "out".

Clausole MessageSources

Le clausole MessageSources selezionano le strutture ad albero del messaggio da propagare. Questa clausola è applicabile solo al nodo Compute (non ha effetto nel nodo Database).

Di seguito sono riportati i valori che possono essere specificati nella clausole MessageSources:
ENVIRONMENT : 
  InputLocalEnvironment 
  OutputLocalEnvironment 

Message : 
  InputRoot 
  OutputRoot

ExceptionList : 
  InputExceptionList
  OutputExceptionList

Se non è presente la clausola MessageSources, viene utilizzato l'attributo "compute mode" del nodo per stabilire quali messaggi vengono propagati.

Clausola FINALIZE
La finalizzazione è un processo che fissa le catene dell'intestazione ed associa la cartella Properties alle intestazioni. Se presente, la clausola FINALIZE consente di controllare la finalizzazione.

Questa clausola è applicabile solo al nodo Compute (non ha effetto in un nodo Database).

Il nodo Compute consente ad altri nodi (nodi che modificano i relativi messaggi di input) di modificare il proprio messaggio di output. Tuttavia, un messaggio creato da un nodo Compute non può essere modificato da un altro nodo dopo:
  • Che è stato finalizzato
  • Che ha raggiunto un nodo di output o un altro nodo che genera un flusso di bit

Se FINALIZE è impostata su DEFAULT oppure se la clausola FINALIZE è assente, il messaggio di output (ma non Ambiente, Ambiente locale o Elenco di eccezioni) viene finalizzato prima della propagazione.

Inizio modificaSe FINALIZE è impostata su NONE, la finalizzazione non viene eseguita. Questa opzione è necessaria per preservare e consentire gli aggiornamenti dell'intero albero di messaggi di output tramite il downstream di nodi nel flusso di messaggio e viene utilizzata con DELETE NONE come indicato nella sezione successiva.Fine modifica

Clausola DELETE
La clausola DELETE consente di controllare l'eliminazione dell'elenco di eccezioni, del messaggio e dell'ambiente locale di output.

La clausola DELETE è applicabile solo al nodo Compute (non ha effetto in un nodo Database).

Se DELETE è impostata su DEFAULT oppure la clausola DELETE è assente, l'elenco di eccezioni, il messaggio e l'ambiente locale di output vengono eliminati e la relativa memoria recuperata immediatamente dopo la propagazione.

Inizio modificaSe DELETE è impostata su NONE, non viene eliminato alcun elemento. Utilizzare DELETE NONE per consentire ai nodi downstream di visualizzare una singola istanza del messaggio di ambiente locale di output e gli alberi dell'elenco di eccezioni. Ogni propagazione inizia con il contenuto di tali alberi, come è stato creato dalla propagazione precedente anziché iniziare con alberi vuoti. Per fare in modo che tali nodi aggiornino l'albero di output, occorre utilizzare DELETE NONE con l'opzione FINALIZE NONE descritta nella sezione precedente.Fine modifica

Notare che vengono eliminate sono le strutture ad albero di output finalizzate, indipendentemente da quelle propagate.

La propagazione è un processo sincrono. L'istruzione successiva non viene eseguita fino a quando non viene completata tutta l'elaborazione del messaggio nei nodi downstream. Considerare che tale elaborazione potrebbe generare delle eccezioni e che, se tali eccezioni non vengono rilevate, impediscono di raggiungere l'istruzione che segue la chiamata PROPAGATE. Ciò potrebbe essere richiesto dalla logica del proprio flusso, ma, in caso contrario, è possibile utilizzare un programma di gestione per rilevare l'eccezione ed eseguire le azioni necessarie. Notare che le eccezioni generate downstream di propagate, se non rilevate, impediscono anche l'esecuzione delle azioni automatiche finali di un nodo Compute o Database (ad esempio, immettendo COMMIT Transaction set to Commit).

DECLARE i INTEGER 1;
DECLARE count INTEGER;
SET count = CARDINALITY(InputRoot.XML.Invoice.Purchases."Item"[])

WHILE i <= count DO 
  --use the default tooling-generated procedure for copying message headers 
  CALL CopyMessageHeaders(); 
  SET OutputRoot.XML.BookSold.Item = InputRoot.XML.Invoice.Purchases.Item[i]; 
  PROPAGATE; 
  SET i = i+1; 
END WHILE; 
RETURN FALSE;

Di seguito sono riportati i messaggi creati sul terminale OUT dall'istruzione 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>
Concetti correlati
Panoramica di ESQL
Codifica ESQL per gestire gli errori
Attività correlate
Sviluppo di ESQL
Creazione di più messaggi di output
Commit degli aggiornamenti del database
Riferimenti correlati
Diagrammi di sintassi: tipi disponibili
Istruzioni ESQL
Istruzione RETURN
Messaggio di esempio
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ak05110_