Erstellt ein nicht änderbares SqlPathExpression-Objekt, das den durch das Pfadargument angegebenen Pfad darstellt. Nicht änderbar bedeutet, dass der Pfad, zu dem navigiert wird, keine Pfadelemente erstellt, wenn sie noch nicht vorhanden sind. Diese Funktion gibt einen Zeiger auf das Objekt PathExpression zurück, das als Eingabe für die Funktionen verwendet wird, die zu dem Pfad, d. h. zur cniSqlNavigatePath-Familie, navigieren.
Das Erstellen des Ausdrucks ist mit einem Aufwand verbunden. Wenn also für jede Nachricht derselbe Pfadausdruck verwendet werden soll, sollte diese Funktion einmal aufgerufen werden und der Ausdruck CciSqlPathExpression*, der zurückgegeben wird, sollte in einem Aufruf an niSqlNavigate für jede Nachricht verwendet werden. Es ist möglich, den Ausdruck CciSqlPathExpression* auf einem anderen Thread zu verwenden, als dem, in dem er erstellt wurde.
CciSqlPathExpression* cniSqlCreateReadOnlyPathExpression( int* returnCode, CciNode* nodeObject, CciChar* dataSourceName, CciChar* path );
Bei Erfolg wird die Adresse des Objekts 'SQLPathExpression' zurückgegeben. Wenn ein Fehler auftritt wird CCI_NULL_ADDR zurückgegeben, und der Rückkehrcodeparameter gibt die Fehlerursache an. Sobald 'SQLPathExpression' nicht mehr benötigt wird (normalerweise wenn der Knoten gelöscht wurde), sollte es gelöscht werden, indem cniSqlDeletePathExpression aufgerufen wird.
Im Knotenbeispiel zum Umschalten wird gezeigt, wie mit Hilfe von Funktionen wie cniFirstChild zu einem Syntaxelement navigiert werden kann. Der folgende Code kann verwendet werden, um dasselbe Ergebnis zu erzielen.
In der Funktion '_Switch_createNodeContext' wird CciSqlPathExpression für die spätere Verwendung erstellt.
{ CciChar ucsPathExpressionString[32]; char* mbPathExpressionString = "InputBody.Request.type"; /* Pfadzeichenfolge in Unicode konvertieren*/ cciMbsToUcs( NULL, mbPathExpressionString, ucsPathExpressionString, 32, BIP_DEF_COMP_CCSID); p->pathExpression = cniSqlCreateReadOnlyPathExpression( NULL, nodeObject, NULL,/*es wird nicht auf die Datenbank verwiesen*/ ucsPathExpressionString); }
Dann kann CciSqlPathExpression in der Funktion '_Switch_evaluate' verwendet werden.
CciElement* targetElement = cniSqlNavigatePath( NULL, ((NODE_CONTEXT_ST *)context)->pathExpression, message, destinationList, exceptionList, NULL, /*auf Ausgabebaumstrukturen wird nicht verwiesen*/ NULL, NULL);