La struttura ad albero Environment ha il proprio nome di correlazione, Environment, ed è necessario utilizzare questo nome in tutte le istruzioni ESQL che fanno riferimento al contenuto di questa struttura ad albero.
La struttura ad albero Environment viene sempre creata quando si crea la struttura ad albero logica per un messaggio di input. Tuttavia, il flusso di messaggi non popola la struttura e non ne utilizza il contenuto. E' possibile utilizzare questa struttura ad albero per i propri fini, ad esempio, per trasmettere informazioni da un nodo all'altro. E' possibile utilizzare l'intera struttura ad albero come blocco per scrivere o come area di lavoro.
Il vantaggio di creare i propri dati nella struttura ad albero Environment è che questi dati sono trasmessi come parte della struttura ad albero logica ai nodi successivi nel flusso di messaggi. Se si crea un nuovo messaggio di output in un nodo Compute, anche la struttura ad albero Environment viene copiata dal messaggio di input al nuovo messaggio di output. (Questo è in contrasto con la struttura ad albero LocalEnvironment, che è inclusa nel messaggio di output solo se lo si richiede esplicitamente).
E' presente solo una struttura ad albero Environment per la durata del flusso di messaggi. Tutti gli aggiornamenti o le aggiunte di dati che vengono eseguiti in un nodo sono conservati e tutti i nodi nel flusso di messaggi hanno accesso all'ultima copia di questa struttura ad albero. Anche se il messaggio torna indietro nel flusso di messaggi (ad esempio, se è generata un'eccezione o se il messaggio viene elaborato tramite il secondo terminale del nodo FlowOrder), viene conservato lo stato più recente.
Questo è in contrasto con la struttura ad albero LocalEnvironment, che torna allo stato precedente se il messaggio torna indietro nel flusso di messaggi.
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)};
Queste informazioni sono ora disponibili a tutti i nodi a cui è trasmesso il messaggio, indipendentemente dalla rispettiva posizione nel flusso di messaggi.
Per un altro esempio di come utilizzare Environment per memorizzare le informazioni utilizzate da altri nodi nel flusso di messaggi, fare riferimento al flusso di messaggi Reservation nel programma di esempio Compagnie aeree. Il nodo Compute in questo flusso di messaggi scrive, nella struttura ad albero secondaria Environment.Variables, le informazioni estratte da un database in base al valore di un campo nel messaggio di input.