cniSqlCreateModifyablePathExpression

Crea un oggetto SqlPathExpression modificabile che rappresenta il percorso specificato dal relativo argomento. Modificabile significa che quando navigati, gli elementi del percorso vengono creati se non sono già esistenti. Questa funzione restituisce un puntatore all'oggetto PathExpression che viene utilizzato come input delle funzioni che eseguono la navigazione del percorso, ovvero la famiglia cniSqlNavigatePath. Si verifica un sovraccarico nella creazione dell'espressione; quindi, se per ogni messaggio deve essere utilizzata la stessa espressione del percorso, allora questa funzione deve essere richiamata una volta e CciSqlPathExpression* che viene restituito deve essere utilizzato in una chiamata a cniSqlNavigate per ciascun messaggio. E' possibile utilizzare CciSqlPathExpression su un thread diverso da quello creato.

Sintassi

CciSqlPathExpression* cniSqlCreateModifiablePathExpression( 
int*      returnCode,
CciNode*  nodeObject,
CciChar*           dataSourceName,
	CciChar* path);

Parametri

returnCode (output)
Un input del puntatore NULL indica che il nodo definito dall'utente non intende gestire gli errori. Eventuali eccezioni generate durante l'esecuzione di questa chiamata, vengono generate nuovamente nel nodo successivo a monte del flusso. Se l'input è diverso da NULL, l'output indicherà lo stato positivo della chiamata. Se durante l'esecuzione si verifica un'eccezione, *returnCode verrà impostato su CCI_EXCEPTION nell'output. Per informazioni dettagliate relative all'eccezione, richiamare cciGetLastExceptionData. Se è stato passato un parametro nodeObject non valido, returnCode verrà impostato su CCI_INV_NODE_OBJECT. Se è stato passato un parametro di percorso non valido, quale una stringa vuota o NULL, returnCode verrà impostato su CCI_INV_ESQL_PATH_EXPR.
nodeObject (input)
Specifica il nodo di elaborazione del flusso di messaggi a cui apparterrà l'espressione di percorso ESQL. Tale puntatore viene trasferito alla funzione di implementazione cniCreateNodeContext. Questo parametro non deve essere NULL.
dataSourceName (input)
Il nome di origine dei dati ODBC da utilizzare se l'istruzione fa riferimento a un database esterno. Questo parametro può essere NULL.
path (input)
Puntatore ad una stringa terminata con NULL di CciChars. Specifica l'espressione del percorso ESQL da creare come definito dal diagramma della sintassi di riferimento del campo ESQL, eccetto che non può includere le variabili ESQL locali, le variabili di riferimento ESQL, le funzioni definite dall'utente e le costanti di spazio dei nomi ESQL, in quanto non possono essere dichiarate. Questo parametro non deve essere NULL.

Valori di restituzione

Se ha esito positivo, viene restituito l'indirizzo dell'oggetto SQLPathExpression. Se si verifica un errore, viene restituito CCI_NULL_ADDR e il parametro codice di ritorno indica il motivo dell'errore. Una volta che non si ha più necessità di SQLPathExpression, (solitamente quando il nodo viene eliminato) eseguirne l'eliminazione richiamando cniSqlDeletePathExpression.

Esempio

Aggiungendo il seguente codice all'esempio del nodo Transform è possibile creare facilmente un elemento e tutti gli elementi predecessori necessari con una chiamata alla funzione.

Si procede alla creazione di CciSQLPathExpression nella funzione _Transform_createNodeContext:

 {
        CciChar ucsPathExpressionString[32];
        char*   mbPathExpressionString =
                           "OutputRoot.XML.Request.A.B.C.D.E";
        /* converte la stringa percorso in unicode*/
        cciMbsToUcs(NULL,
            mbPathExpressionString,
            ucsPathExpressionString,
            32,
            BIP_DEF_COMP_CCSID);
        
        p->pathExpression =
                     cniSqlCreateModifiablePathExpression(
                                 NULL,
                                 nodeObject,
                                 NULL, /*non si fa riferimento a Database*/
                                 ucsPathExpressionString);
    }

è possibile quindi utilizzare CciSqlPathExpression successivamente nella funzione _Transform_evaluate

{
      CciElement* newElement = 
               cniSqlNavigatePath(
                     NULL,
                    ((NODE_CONTEXT_ST *)context)->pathExpression,
                     message,
                     destinationList,
                     exceptionList,
                     outMsg,
                     NULL,/*non si fa riferimento a OutputLocalEnvironment*/
                     NULL/*non si fa riferimento a OutputLExceptionList*/);
}

Quindi, passando il messaggio di input PluginSample.change.xml:

<Request
type="change">
  <CustomerAccount>01234567</CustomerAccount>
  <CustomerPhone>555-0000</CustomerPhone>
</Request>

si ottiene il seguente messaggio di output.

<Request
type="modify">
  <CustomerAccount>01234567</CustomerAccount>
  <CustomerPhone>555-0000</CustomerPhone>
  <A>
    <B>
      	<C>
        <D/>
      	</C>
    </B>
  </A>
</Request>
Utilizzando tale metodo, in contrapposizione all'uso di cniCreateElementAsLastChild e così via, si hanno i seguenti vantaggi:
  • Il percorso è più dinamico – la stringa percorso potrebbe essere determinata in fase di distribuzione; ad esempio, in base ad un attributo nodo (si potrebbe creare CciSQLPathExpression nella funzione di implementazione cniSetAttribute).
  • Mentre si esegue la navigazione e si crea l'elemento, viene eseguita un'unica chiamata alla funzione anziché diverse. Ciò è più evidente quando l'elemento di destinazione è all'interno della struttura ad albero.
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
as08032_