L'istruzione PROPAGATE propaga un messaggio ai nodi downstream.
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.
‘nowhere’ : no propagation ‘failure’ : Failure ‘out’ : Out ‘out1' : Out1 ‘out2' : Out2 ‘out3' : Out3 ‘out4’ : Out4
-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".
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".
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).
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.
Questa clausola è applicabile solo al nodo Compute (non ha effetto in un nodo Database).
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.
Se
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.
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.
Se 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.
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>