Verwenden Sie diese Funktion, um ein SqlPathExpression-Objekt zu erstellen, das den durch das Pfadargument angegebenen Pfad darstellt. Pfadelemente werden erstellt, 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. Sie können CciSqlPathExpression für andere Threads verwenden als für den Thread, für den der Ausdruck erstellt wurde.
CciSqlPathExpression* cniSqlCreateModifiablePathExpression(
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.
Durch Hinzufügen des folgenden Codes zum Umwandlungsknotenmuster kann 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.XMLNS.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);
}
Nun 'CciSqlPathExpression' in der Funktion '_Transform_evaluate' verwenden.
{
CciElement* newElement =
cniSqlNavigatePath(
NULL,
((NODE_CONTEXT_ST *)context)->pathExpression,
message,
localEnvironment,
exceptionList,
outMsg,
NULL,/*es wird nicht auf OutputLocalEnvironment verwiesen*/
NULL/*es wird nicht auf OutputLExceptionList verwiesen*/);
}
Durch Übergeben der Eingabenachricht PluginSample.change.xml:
<Request
type="change">
<CustomerAccount>01234567</CustomerAccount>
<CustomerPhone>555-0000</CustomerPhone>
</Request>
Es wird folgende Ausgabenachricht generiert:
<Request
type="modify">
<CustomerAccount>01234567</CustomerAccount>
<CustomerPhone>555-0000</CustomerPhone>
<A>
<B>
<C>
<D/>
</C>
</B>
</A>
</Request>