Fare clic con il tasto destro del mouse sul nodo (che
deve essere Compute, Database o Filter) e fare clic su
Apri ESQL. Il file ESQL predefinito per questo flusso di messaggi, <message_flow_name>.esql, viene aperto nella vista dell'editor (il file viene creato solo se non esiste già).
Se il file predefinito è già stato creato e si fa clic su
Apri ESQL, il file viene aperto nella vista nell'editor
e viene creato ed evidenziato un nuovo modulo.
Alla fine del file ESQL viene creato un modulo skeleton per questo
nodo. L'esatto contenuto dipende dal tipo di nodo.
Per un nodo Compute, viene creato il seguente modulo:
CREATE COMPUTE MODULE <module_name>
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
-- CALL CopyMessageHeaders();
-- CALL CopyEntireMessage();
RETURN TRUE;
END;
CREATE PROCEDURE CopyMessageHeaders() BEGIN
DECLARE I INTEGER 1;
DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
WHILE I < J DO
SET OutputRoot.*[I] = InputRoot.*[I];
SET I = I + 1;
END WHILE;
END;
CREATE PROCEDURE CopyEntireMessage() BEGIN
SET OutputRoot = InputRoot;
END;
END MODULE;
Per rendere il
codice ESQL precedente distribuibile su un broker
Versione 2.1, è necessario passare le variabili a livello del modulo
InputRoot
e
OutputRoot alla procedura o alla funzione come
illustrato dal testo in grassetto nell'esempio riportato di seguito:
CREATE COMPUTE MODULE <module_name>
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
-- CALL CopyMessageHeaders(InputRoot, OutputRoot);
-- CALL CopyEntireMessage(InputRoot, OutputRoot);
RETURN TRUE;
END;
CREATE PROCEDURE CopyMessageHeaders(IN InputRoot REFERENCE, IN
OutputRoot REFERENCE) BEGIN
DECLARE I INTEGER 1;
DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
WHILE I < J DO
CREATE LASTCHILD OF OutputRoot DOMAIN FIELDNAME (
InputRoot.*[I] ); /*create the parser for OutputRoot*/
SET OutputRoot.*[I] = InputRoot.*[I];
SET I = I + 1;
END WHILE;
END;
CREATE PROCEDURE CopyEntireMessage(IN InputRoot REFERENCE, IN
OutputRoot REFERENCE) BEGIN
SET OutputRoot = InputRoot;
END;
END MODULE;
Il nome del modulo è determinato dal valore impostato per la
proprietà del nodo corrispondente. L'impostazione predefinita è <message_flow_name>_<node_type>.
La funzione Main contiene chiamate a due procedure, descritte di seguito,
dichiarate all'interno del modulo del nodo Compute dopo la funzione Main. Tali chiamate sono commentate. Per includere la funzione che esse forniscono, annullare il commento di tali
righe e posizionarle nel punto appropriato del codice ESQL creato per Main.
- CopyMessageHeaders
- Questa procedura esegue un loop attraverso le intestazioni contenute nel
messaggio di input e copia ciascuna intestazione nel messaggio di output.
Se si sta eseguendo la migrazione dalla Versione
2.1, questa procedura è equivalente al codice generato quando si seleziona il
pulsante Copia intestazioni messaggio nella finestra delle proprietà del nodo
Compute.
- CopyEntireMessage
- Questa procedura copia tutto il contenuto del messaggio di input,
incluse le intestazioni, nel messaggio di output.
Se si sta eseguendo la migrazione dalla Versione
2.1, questa procedura è equivalente al codice generato quando si seleziona
il pulsante Copia messaggio intero nella finestra delle proprietà del nodo
Compute.
Se si crea un modulo ESQL per un nodo Database, viene
creato il seguente modulo:
CREATE DATABASE MODULE <module_name>
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
RETURN TRUE;
END;
END MODULE;
Per un nodo Filter, il modulo è identico a quello creato per il nodo
Database, ad eccezione della prima riga, riportata di seguito:
CREATE FILTER MODULE <module_name>
Aggiungere il codice ESQL a questo file per personalizzare il
funzionamento del nodo.
Aggiungere le istruzioni ESQL all'interno della
funzione Main, dopo l'istruzione BEGIN e prima di RETURN TRUE. E'
possibile aggiungere istruzioni
DECLARE all'interno del modulo che non sono all'interno della funzione
Main. Per aggiungere una nuova riga al file, premere Invio.
Per consentire la scrittura di un codice ESQL valido, l'editor
visualizza un elenco di funzioni ed istruzioni valide nel punto indicato dal
cursore. Per richiamare questa funzione, fare clic su
.
Su alcuni sistemi, è possibile anche utilizzare la combinazione di tasti
Ctrl+Spazio.
Scorrere l'elenco visualizzato per individuare ed evidenziare la funzione
desiderata e premere Invio. Il codice appropriato viene inserito nel modulo e l'elenco non viene più
visualizzato.
La funzione Content Assist viene fornita nelle seguenti aree:
- Parole chiavi applicabili, in base alla sintassi del linguaggio.
- Blocchi di codice, come ad esempio
BEGIN
END;.
- Costanti definite, identificativi, etichette, funzioni e procedure
che possono essere utilizzati, mentre le routine possono essere in
qualsiasi progetto, anche se non indicati dal progetto corrente.
- Schema di database e nomi di tabella dopo il nome della
correlazione del database, nomi di colonna della tabella nelle istruzioni
INSERT, UPDATE, DELETE e SELECT e, nella maggior parte dei casi, le clausole
WHERE di tali istruzioni.
- Elementi dei riferimenti di campo del messaggio: nome del dominio
runtime (programma di analisi), formato delle espressioni di tipo,
identificativi dello spazio dei nomi, nomi di attributi ed elementi con
spazio dei nomi e formato dell'espressione di indice.
- Contenuto nella cartella Proprietà nella root del messaggio
di output.
- Per l'istruzione DECLARE NAMESPACE, gli spazi dei nomi di destinazione delle
serie di messaggi e dei nomi dello schema.
Content Assist funziona solo se il codice ESQL può essere
analizzato correttamente.
Alcuni errori, come l'istruzione END mancante dopo BEGIN ed altre istruzioni
di blocco non terminate, determinano errori del programma di analisi e la
funzione Content Assist non viene fornita. Provare ad utilizzare Content Assist in altre aree intorno all'istruzione in
cui non funziona per restringere il punto di errore. In alternativa, salvare il file ESQL; il salvataggio del file causa
la convalida e tutti gli errori di sintassi vengono scritti nella
vista Attività. Fare riferimento agli errori indicati per comprendere e correggere la
sintassi ESQL. Se si utilizza Content Assist per generare la maggior parte
delle istruzioni (come ad esempio le istruzioni di blocco), le istruzioni
vengono immesse correttamente e si riducono le possibilità di errore.