Questo argomento contiene le seguenti sezioni:
Utilizzare il nodo Filter per instradare un messaggio in base al contenuto del messaggio. Si definisce l'instradamento codificando un'espressione di filtro in ESQL. E' possibile includere elementi del messaggio di input o proprietà del messaggio nell'espressione del filtro. E' possibile anche utilizzare i dati presenti in un database esterno per completare l'espressione. Il terminale di output a cui è instradato il messaggio dipende da come viene valutata l'espressione, se true, false o unknown.
Connettere i terminali idonei per tutte le situazioni che potrebbero risultare dal filtro; se il nodo trasmette il messaggio ad un terminale che non è connesso, il messaggio viene eliminato anche se è transazionale.
Questo nodo accetta le istruzioni ESQL nello stesso modo dei nodi Compute e Database. L'ultima istruzione eseguita deve essere RETURN <expression> la cui espressione ha un valore Booleano. Tale valore Booleano stabilisce a quale terminale è instradato il messaggio. In molti casi, l'algoritmo dell'instradamento è un semplice confronto di valori campo del messaggio. Il confronto è descritto dall'espressione e la sola istruzione è RETURN. Se si codifica RETURN senza un'espressione (RETURN;) o con un'espressione NULL, il nodo trasmette il messaggio al terminale unknown.
Se il flusso di messaggi richiede opzioni di instradamento più complesse, si possono utilizzare i nodi RouteToLabel e Label.
Il nodo Filter è rappresentato nel workbench dalla seguente icona:
Fare riferimento ai seguenti esempi per capire come utilizzare questo nodo:
Prendere in considerazione una situazione in cui è stato prodotto un test in linea con dieci domande a scelta multipla. Ogni messaggio in arrivo riporta il nome di un candidato e il suo indirizzo seguito da una serie di risposte. Ogni risposta viene controllata e, se è corretta, il campo PUNTEGGIO viene incrementato di 1. Una volta controllate tutte le risposte, si controlla il campo PUNTEGGIO per vedere se è superiore a 5. Se lo è, il nodo Filter trasmette il messaggio al flusso che gestisce l'input dei candidati che ha superato il test; altrimenti il messaggio viene filtrato nell'elaborazione relativa ai candidati respinti e viene creato un messaggio in tal senso.
Una volta inserita un'istanza del nodo Filter in un flusso di messaggi, è possibile configurarla. Fare clic con il tasto destro del mouse sul nodo nella vista dell'editor e fare clic su Proprietà. Vengono visualizzate le proprietà base del nodo.
Tutte le proprietà obbligatorie, per le quali è necessario immettere un valore (quelle per le quali non è specificato un valore predefinito), sono contrassegnate con un asterisco nella finestra di dialogo delle proprietà.
Configurare il nodo Filter come segue:
Sui sistemi z/OS, il broker utilizza l'ID dell'attività avviata dal broker o l'ID utente e la password specificati nel JCL del comando mqsisetdbparms, BIPSDBP nel data set di personalizzazione <hlq>.SBIPPROC.
Codificare le istruzioni ESQL per personalizzare il funzionamento del nodo Filter in un file ESQL associato al flusso di messaggi in cui è stata inclusa questa istanza del nodo Filter. Il file ESQL, che per impostazione predefinita ha il nome <message_flow_name>.esql, contiene ESQL per ogni nodo nel flusso di messaggi che lo richieda. Ogni parte del codice correlata ad un nodo specifico è nota come modulo.
Se non esiste ancora un file ESQL per questo flusso di messaggi, fare clic con il tasto destro del mouse sul nodo Filter e fare clic su Apri ESQL. In questo modo si crea e si apre un nuovo file ESQL nella vista Editor ESQL.
Se il file già esiste, fare clic sul pulsante Sfoglia accanto alla proprietà Espressione filtro. In questo modo viene visualizzata la finestra di dialogo Selezione modulo, che elenca i moduli disponibili del nodo Filter nei file ESQL a cui può accedere questo flusso di messaggi (i file ESQL possono essere definiti in altri progetti dipendenti). Selezionare il modulo appropriato e fare clic su OK. Se non sono disponibili moduli adatti, l'elenco è vuoto.
Se il modulo specificato non esiste, tale modulo viene creato e l'editor posiziona il file in modo da visualizzarlo. Se il file e il modulo già esistono, l'editor posiziona il file e visualizza ed evidenzia il modulo corretto.
Se si preferisce, è possibile aprire il file ESQL appropriato nel Navigator risorse e selezionare questo nodo nella vista Profilo.
Se si crea uno skeleton del modulo per questo nodo in un file ESQL nuovo o esistente, questo consiste nel seguente ESQL. In questo esempio è riportato il nome del modulo predefinito:
CREATE FILTER MODULE <flow_name>_Filter CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN RETURN TRUE; END; END MODULE;
Se si crea il proprio modulo ESQL, è necessario creare esattamente questo skeleton. E' possibile aggiornare il nome predefinito, ma assicurarsi che il nome specificato corrisponda al nome della proprietà del nodo corrispondente Espressione filtro.
Aggiungere il proprio ESQL per personalizzare questo nodo dopo l'istruzione BEGIN e prima dell'istruzione RETURN. Se l'espressione nell'istruzione RETURN non è TRUE o FALSE, il suo valore è risolto per stabilire il terminale a cui trasmettere il messaggio. Se l'espressione si risolve in un valore NULL o si codifica RETURN; oppure si omette l'istruzione RETURN, il nodo propaga il messaggio al terminale unknown.
E' possibile anche fare clic su
per creare un file ESQL.E' possibile utilizzare tutte le istruzioni ESQL comprese le istruzioni SET, WHILE, DECLARE e IF in questo modulo, ma (a differenza del nodo Compute) il nodo Filter trasmette il messaggio che riceve sul terminale di input al terminale di output senza modifiche. Ciò significa che, come per il nodo Database, si dispone di un solo messaggio a cui fare riferimento in un nodo Filter.
Poiché non è possibile modificare sezioni di alcun messaggio, l'istruzione di assegnazione (l'istruzione SET, non la clausola SET dell'istruzione INSERT) può assegnare valori solo alle variabili temporanee. L'ambito delle azioni che si possono intraprendere con un'istruzione di assegnazione è quindi limitato.
Quando si seleziona tale casella, il nodo gestisce tutti i codici di ritorno positivi provenienti dal database come errori e genera eccezioni nello stesso modo in cui gestisce gli errori negativi o più gravi.
Se non si seleziona la casella, il nodo considera le avvertenze come codici di ritorno normali e non genera alcuna eccezione. L'avvertenza più significativa è non trovato, che può essere gestita come un codice di ritorno normale senza alcun rischio, nella maggior parte dei casi.
Se si deseleziona tale casella, è necessario includere ESQL per verificare la presenza di eventuali errori di database che potrebbero essere restituiti dopo ogni chiamata fatta al database (per fare ciò, è possibile utilizzare SQLCODE e SQLSTATE). Se si è verifica un errore, è necessario gestire l'errore nel flusso di messaggi per garantire l'integrità del broker e del database: l'errore viene ignorato se non lo si gestisce con la propria elaborazione, poiché si è scelto di non richiamare la gestione errori predefinita da parte del broker. Ad esempio, è possibile includere l'istruzione ESQL THROW per generare un'eccezione in questo nodo o utilizzare il nodo Throw per generare la propria eccezione in un punto successivo.
Fare clic su Annulla per chiudere la finestra di dialogo ed eliminare tutte le modifiche apportate alle proprietà.
I terminali del nodo Filter sono descritti nella seguente tabella.
Terminale | Descrizione |
---|---|
In | Il terminale di input che accetta un messaggio affinché venga elaborato dal nodo. |
Failure | Il terminale di output a cui è instradato il messaggio se si rileva un errore durante il calcolo. |
Unknown | Il terminale di output a cui è instradato il messaggio se l'espressione di filtro specificata ha valore unknown o null. |
False | Il terminale di output a cui è instradato il messaggio se l'espressione di filtro specificata ha valore false. |
True | Il terminale di output a cui è instradato il messaggio se l'espressione di filtro specificata ha valore true. |
Le seguenti tabelle descrivono le proprietà del nodo; la colonna con l'intestazione O indica se la proprietà è obbligatoria (contrassegnata con un asterisco nella finestra di dialogo delle proprietà, se è necessario immettere un valore quando non è specificato un valore predefinito), la colonna con l'intestazione C indica se la proprietà è configurabile (è possibile modificare il valore quando si aggiunge un flusso di messaggi a un file bar per distribuirlo).
Le proprietà base del nodo Filter sono descritte nella seguente tabella.
Proprietà | O | C | Valore predefinito | Descrizione |
---|---|---|---|---|
Origine dati | No | Sì | Il nome dell'origine dati ODBC del database in cui risiedono le tabelle a cui si fa riferimento nell'ESQL associato a questo nodo (identificato dalla proprietà Espressione filtro). | |
Transazione | Sì | No | Automatico | La modalità transazione per il nodo. Questa può avere il valore di Automatico o Commit. |
Espressione filtro | Sì | No | Filtro | Il nome del modulo nella risorsa ESQL (file) che contiene le istruzioni da eseguire sul messaggio ricevuto nel nodo. |
Valuta le avvertenze come errori | Sì | No | Deselezionata | Indica di valutare le avvertenze SQL del database come errori. Questa azione viene eseguita se si seleziona la casella di spunta. |
Genera eccezione in caso di errore database | Sì | No | Selezionata | Gli errori di database fanno sì che il broker generi un'eccezione. Questa azione viene eseguita se si seleziona la casella di spunta. |
Le proprietà Descrizione del nodo Filter sono descritte nella seguente tabella.
Proprietà | O | C | Valore predefinito | Descrizione |
---|---|---|---|---|
Descrizione breve | No | No | Una breve descrizione del nodo. | |
Descrizione completa | No | No | Testo che descrive lo scopo del nodo nel flusso di messaggi. |