Crea un oggetto SqlPathExpression non modificabile che rappresenta il percorso specificato dal relativo argomento. Non modificabile significa che i percorsi in cui è stata eseguita la navigazione non creano elementi di percorsi se questi 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* cniSqlCreateReadOnlyPathExpression( 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.
L'esempio del nodo switch mostra come navigare in un elemento di sintassi utilizzando funzioni come cniFirstChild. Il codice riportato di seguito può essere utilizzato per raggiungere lo stesso risultato.
Nella funzione _Switch_createNodeContext viene creato CciSqlPathExpression da utilizzare in un secondo momento.
{ CciChar ucsPathExpressionString[32]; char* mbPathExpressionString = "InputBody.Request.type"; /* converte la stringa percorso in unicode*/ cciMbsToUcs( NULL, mbPathExpressionString, ucsPathExpressionString, 32, BIP_DEF_COMP_CCSID); p->pathExpression = cniSqlCreateReadOnlyPathExpression( NULL, nodeObject, NULL, /*non si fa riferimento a Database*/ ucsPathExpressionString); }
E' possibile quindi utilizzare CciSqlPathExpression nella funzione _Switch_evaluate.
CciElement* targetElement = cniSqlNavigatePath( NULL, ((NODE_CONTEXT_ST *)context)->pathExpression, message, destinationList, exceptionList, NULL, /*non si fa riferimento ad alcuna struttura ad albero di output*/ NULL, NULL);