cniSqlCreateModifyablePathExpression

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.

Syntax

CciSqlPathExpression* cniSqlCreateModifiablePathExpression( 
	int*           returnCode,
CciNode*            nodeObject,
CciChar*           dataSourceName,
	CciChar* path);

Parameters

Rückkehrcode (Ausgabe)
Die Eingabe eines Nullzeigers bedeutet, dass der benutzerdefinierte Knoten nicht für Fehler zuständig sein möchte. Alle Ausnahmebedingungen, die bei der Ausführung dieses Aufrufs ausgegeben werden, werden beim nächsten vorgeschalteten Knoten im Nachrichtenfluss erneut ausgegeben. Wenn die Eingabe nicht NULL ist, gibt die Ausgabe den Erfolgsstatus des Aufrufs an. Wenn bei der Ausführung eine Ausnahmebedingung auftritt, wird als Wert für '*returnCode' bei der Ausgabe CCI_EXCEPTION festgelegt. Rufen Sie cciGetLastExceptionData für Details der Ausnahmebedingung auf. Wenn ein ungültiger 'nodeObject'-Parameter übergeben wurde, wird der Rückkehrcode auf CCI_INV_NODE_OBJECT gesetzt. Wenn ein ungültiger Pfadparameter, wie z. B. NULL oder eine leere Zeichenfolge, übergeben wurde, wird der Rückkehrcode auf CCI_INV_ESQL_PATH_EXPR gesetzt.
nodeObject (Eingabe)
Gibt den Verarbeitungsknoten des Nachrichtenflusses an, dem der ESQL-Pfadausdruck angehört. Dieser Zeiger wird an die Implementierungsfunktion cniCreateNodeContext übermittelt. Dieser Parameter darf nicht NULL sein.
dataSourceName (Eingabe)
Der ODBC-Datenquellenname, der verwendet wird, wenn die Anweisung auf eine externe Datenbank verweist. Dieser Parameter darf NULL sein.
path (Eingabe)
Zeiger auf eine mit NULL beendete Zeichenfolge von 'CciChars'. Dadurch wird der ESQL-Pfadausdruck angegeben, der, wie vom Syntaxdiagramm der ESQL-Feldreferenz definiert, erstellt werden soll. Allerdings kann er keine lokalen ESQL-Variablen, ESQL-Referenzvariablen, benutzerdefinierten Funktionen und ESQL-Namespace-Konstanten enthalten, da diese nicht deklariert werden können. Dieser Parameter darf nicht NULL sein.

Rückgabewerte

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.

Beispiel

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>
Das Verwenden dieser Methode im Gegensatz zu 'cniCreateElementAsLastChild' usw. hat folgende Vorteile:
  • Der Pfad ist dynamischer - die Pfadzeichenfolge kann zum Zeitpunkt des Implementierens festgelegt werden, z. B. auf einem Knotenattribut basierend (CciSQLPathExpression kann in der Implementierungsfunktion cniSetAttribute erstellt werden).
  • Während der Navigation zum Element und während dessen Erstellung wird nur ein Funktionsaufruf anstatt mehrerer gemacht. Dies wird deutlicher, wenn sich das Zielelement weit innerhalb der Baumstruktur befindet.
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
as08032_