Utilice esta función para crear un objeto SqlPathExpression que represente la vía de acceso especificada por el argumento de vía de acceso. Cuando se recorren, se crean elementos de vía de acceso si todavía no existen. Esta función devuelve un puntero al objeto PathExpression que se utiliza como entrada a las funciones que recorren la vía de acceso, es decir, la familia cniSqlNavigatePath.
Puesto que al crear la expresión se genera una carga general, si la misma expresión de vía de acceso se va a utilizar para cada mensaje, llame a esta función una vez y utilice el CciSqlPathExpression* que se devuelve en una llamada a cniSqlNavigate para cada mensaje. Puede utilizar CciSqlPathExpression en hebras que no sean en la que se ha creado.
CciSqlPathExpression* cniSqlCreateModifiablePathExpression(
int* returnCode,
CciNode* nodeObject,
CciChar* dataSourceName,
CciChar* path);
Si la ejecución se realiza satisfactoriamente, se devuelve la dirección del objeto SQLPathExpression. Si se produce un error, se devuelve CCI_NULL_ADDR y el parámetro del código de retorno indica el motivo del error. Una vez ya no se necesita SQLPathExpression (normalmente cuando se suprime el nodo), llame a cniSqlDeletePathExpression para suprimirlo.
Si añade el código siguiente al ejemplo de nodo Transform, puede crear un elemento, y todos los elementos ascendientes necesarios, con una llamada a una función.
Cree la CciSQLPathExpression en la función _Transform_createNodeContext:
{
CciChar ucsPathExpressionString[32];
char* mbPathExpressionString =
"OutputRoot.XMLNS.Request.A.B.C.D.E";
/* convertir la serie de vía de acceso a unicode*/
cciMbsToUcs(NULL,
mbPathExpressionString,
ucsPathExpressionString,
32,
BIP_DEF_COMP_CCSID);
p->pathExpression =
cniSqlCreateModifiablePathExpression(
NULL,
nodeObject,
NULL, /* no hacer referencia a base de datos*/
ucsPathExpressionString);
}
Ahora utilice la CciSqlPathExpression en la función _Transform_evaluate
{
CciElement* newElement =
cniSqlNavigatePath(
NULL,
((NODE_CONTEXT_ST *)context)->pathExpression,
message,
localEnvironment,
exceptionList,
outMsg,
NULL,/* no hacer referencia a OutputLocalEnvironment*/
NULL/* no hacer referencia a OutputLExceptionList*/);
}
Por lo tanto, pasando el mensaje de entrada PluginSample.change.xml:
<Request
type="change">
<CustomerAccount>01234567</CustomerAccount>
<CustomerPhone>555-0000</CustomerPhone>
</Request>
Se genera el mensaje de salida siguiente:
<Request
type="modify">
<CustomerAccount>01234567</CustomerAccount>
<CustomerPhone>555-0000</CustomerPhone>
<A>
<B>
<C>
<D/>
</C>
</B>
</A>
</Request>