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.
CciSqlPathExpression* cniSqlCreateModifiablePathExpression( int* returnCode, CciNode* nodeObject, CciChar* dataSourceName, CciChar* path);
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.
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>