환경 트리는 자체 상관 이름인 환경을 가지므로 이 트리의 컨텐츠를 참조하거나 설정하는 모든 ESQL문에서는 이를 사용해야 합니다.
환경 트리는 항상 입력 메시지에 대해 논리적 트리가 작성될 때 작성됩니다. 그러나, 메시지 플로우는 이 트리를 채우거나 트리 컨텐츠를 사용하지 않습니다. 한 노드에서 다른 노드로 정보를 전달하는 것과 같이 사용자의 목적을 위해 이 트리를 사용할 수 있습니다. 전체 트리를 스크래치패드 또는 작업 영역으로 사용할 수 있습니다.
환경 트리에서 사용자 전용 데이터를 작성하는 이점은 이 데이터가 논리적 트리의 부분으로서 메시지 플로우에 있는 후속 노드로 전달되는 것입니다. Compute 노드에서 새 출력 메시지를 작성하면, 환경 트리가 또한 입력 메시지로부터 새 출력 메시지로 복사됩니다. (이는 사용자가 명시적으로 요청할 경우 출력 메시지에만 포함되는 로컬 환경(LocalEnvironment) 트리와 대조되는 점입니다.)
메시지 플로우의 지속 기간 동안 하나의 환경만 존재합니다. 한 노드에서 작성하는 모든 데이터 갱신사항이나 추가사항은 보유되며, 메시지 플로우의 모든 노드는 이 트리의 마지막 사본에 액세스할 수 있습니다. 메시지가 메시지 플로우를 역으로 흐르는 경우(예를 들면, 예외가 발생하거나 메시지가 FlowOrder 노드의 두 번째 터미널을 통해 처리되는 경우)에도 마지막 상태는 보유됩니다.
이는 메시지가 메시지 플로우를 역으로 흐를 경우 이를 이전 상태로 되돌리는 로컬 환경 트리와는 대조되는 점입니다.
SET Environment.Variables = ROW('granary' AS bread, 'reisling' AS wine, 'stilton' AS cheese); SET Environment.Variables.Colors[] = LIST{'yellow', 'green', 'blue', 'red', 'black'}; SET Environment.Variables.Country[] = LIST{ROW('UK' AS name, 'pound' AS currency), ROW('USA' AS name, 'dollar' AS currency)};
이 정보는 메시지 플로우의 상대 위치에 관계없이 메시지가 전달되는 모든 노드에 사용 가능합니다.
Environment를 사용하여 메시지 플로우의 다른 노드에서 사용되는 정보를 저장할 수 있는 방법의 또다른 예는 Airline 샘플 프로그램의 Reservation 메시지 플로우를 참조하십시오. 이 메시지 플로우의 Compute 노드는 입력 메시지의 필드 값에 따라 데이터베이스에서 추출한 정보를 서브트리 Environment.Variables에 씁니다.