PROPAGATE 문은 메시지를 다운스트림 노드로 전달합니다.
Compute 및 Database 노드에서 PROPAGATE 문을 사용할 수 있지만 Filter 노드에서는 사용할 수 없습니다. 이 명령문이 추가되어 오류 핸들링을 지원합니다. 오류 핸들링을 위한 ESQL 코딩을 참조하십시오.
‘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
TerminalExpression의 결과가 CHARACTER나 INTEGER가 아닌 경우 브로커에서 예외가 발생합니다.
TO TERMINAL 절이나 TO LABEL 절이 없는 경우 브로커에서 메시지를 "out" 터미널로 전달합니다.
LabelExpression의 결과가 널(null)이거나 CHARACTER 유형이 아니거나 플로우에 일치하는 Label 노드가 없는 경우 브로커에서 예외가 발생합니다.
TO TERMINAL 절이나 TO LABEL 절이 없는 경우 브로커에서 메시지를 "out" 터미널로 전달합니다.
MessageSources 절은 전달할 메시지 트리를 선택합니다. 이 절은 Compute 노드에만 적용됩니다(Database 노드에는 영향을 주지 않음).
ENVIRONMENT : InputLocalEnvironment OutputLocalEnvironment Message : InputRoot OutputRoot ExceptionList : InputExceptionList OutputExceptionList
MessageSources 절이 없는 경우 전달할 메시지를 판별하는 데 노드의 "compute mode" 속성이 사용됩니다.
이 절은 Compute 노드에만 적용됩니다(Database 노드에는 영향을 주지 않음).
FINALIZE가 DEFAULT로 설정되거나 FINALIZE절이 없으면 전달되기 전에 출력 메시지(Environment, Local Environment 또는 Exception List는 아님)가 완료됩니다.
FINALIZE가 NONE으로 설정된 경우
완료되지 않습니다. 메시지 플로우의 다운스트림 노드가 전체 출력 메시지를 보존하거나 갱신할 수 있게 하려면 이 옵션이 필요하며, 이 옵션은
다음 절에 설명된 것처럼 DELETE NONE과 함께 사용됩니다.
DELETE 절은 Compute 노드에만 적용됩니다(Database 노드에는 영향을 주지 않음).
DELETE가 DEFAULT로 설정되거나 DELETE절이 없는 경우 출력 로컬 환경, 메시지 및 예외 목록이 모두 지워지고 전달 후에 메모리가 즉시 복구됩니다.
DELETE가 NONE으로 설정되는 경우에는 아무
것도 지워지지 않습니다. 다운스트림 노드가 출력 로컬 환경 메시지의 단일 인스턴스 및 예외 목록 트리를 볼 수 있게 하려면
DELETE NONE을 사용하십시오. 각 전달은 비어있는 트리와 함께 시작하지 않고 이전 전달에 의해 생성되는 이 트리의 컨텐츠와
함께 시작합니다. 이 노드가 출력을 갱신할 수 있게 하려면 앞 절에 설명된 것처럼 FINALIZE NONE 옵션과 함께 DELETE NONE을 사용해야 합니다.
전달되는 사항에 상관없이 완료되고 지워지는 출력 트리입니다.
전달은 동기적 프로세스입니다. 즉, 다운스트림 노드의 모든 메시지 처리가 완료될 때까지 다음 명령문이 실행되지 않습니다. 이 처리에 의해 예외가 발생할 수 있으며 이 예외가 발견되지 않는 경우 PROPAGATE 호출 다음의 명령문에 도달하지 않음에 주의하십시오. 이것이 플로우의 논리에 필요한 사항일 수 있지만 그렇지 않은 경우 핸들러를 사용하여 예외를 포착하여 필수 조치를 수행할 수 있습니다. 포착하지 않은 경우 전달의 예외 발생 다운스트림은 Compute 또는 Database 노드의 마지막 자동 조치(예: 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;
다음은 PROPAGATE문의 의해 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>