Erstellt ein änderbares SqlPathExpression-Objekt, das den durch das Pfadargument angegebenen Pfad darstellt. Änderbar bedeutet, dass Pfadelemente erstellt werden, wenn zu ihnen navigiert wird und sie nicht bereits vorhanden sind. Diese Funktion gibt einen Zeiger auf das Objekt 'PathExpression' zurück, das als Eingabe für die Funktionen, 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 cniSqlNavigate für jede Nachricht verwendet werden. Es ist möglich, den Ausdruck CciSqlPathExpression auf einem anderen Thread zu verwenden, als in dem, in dem er erstellt wurde.
CciSqlPathExpression* cniSqlCreateModifiablePathExpression( int* returnCode, CciNode* nodeObject, CciChar* dataSourceName, CciChar* path);
Bei erfolgreicher Ausführung 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.
Durch Hinzufügen des folgenden Codes zum Umwandlungsknotenmuster kann leicht mit einem Funktionsaufruf ein Element und alle notwendigen Vorgängerelemente erstellt werden.
CciSQLPathExpression wird in der Funktion '_Transform_createNodeContext' erstellt:
{ CciChar ucsPathExpressionString[32]; char* mbPathExpressionString = "OutputRoot.XML.Request.A.B.C.D.E"; /* Pfadzeichenfolge in Unicode konvertieren*/ cciMbsToUcs(NULL, mbPathExpressionString, ucsPathExpressionString, 32, BIP_DEF_COMP_CCSID); p->pathExpression = cniSqlCreateModifiablePathExpression( NULL, nodeObject, NULL,/*es wird nicht auf die Datenbank verwiesen*/ ucsPathExpressionString); }
und dieses 'CciSqlPathExpression'-Objekt kann später in der Funktion '_Transform_evaluate' verwendet werden.
{ CciElement* newElement = cniSqlNavigatePath( NULL, ((NODE_CONTEXT_ST *)context)->pathExpression, message, destinationList, exceptionList, outMsg, NULL,/*es wird nicht auf OutputLocalEnvironment verwiesen*/ NULL/*es wird nicht auf OutputLExceptionList verwiesen*/); }
Durch die Eingabe der Eingabenachricht 'PluginSample.change.xml':
<Request type="change"> <CustomerAccount>01234567</CustomerAccount> <CustomerPhone>555-0000</CustomerPhone> </Request>
wird folgende Ausgabenachricht angezeigt.
<Request type="modify"> <CustomerAccount>01234567</CustomerAccount> <CustomerPhone>555-0000</CustomerPhone> <A> <B> <C> <D/> </C> </B> </A> </Request>