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. La vía de acceso recorrida no crea elementos de vía de acceso si éstos aún no existen. Esta función devuelve un puntero al objeto PathExpression, que se utiliza como entrada para 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* cniSqlCreateReadOnlyPathExpression(
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.
El ejemplo de nodo Switch muestra cómo navegar hasta un elemento de sintaxis utilizando funciones como cniFirstChild. Podría utilizarse el siguiente código para lograr el mismo resultado.
En la función _Switch_createNodeContext, cree la CciSqlPathExpression para su uso posterior.
{
CciChar ucsPathExpressionString[32];
char* mbPathExpressionString = "InputBody.Request.type";
/* convertir la serie de vía de acceso a unicode*/
cciMbsToUcs(
NULL,
mbPathExpressionString,
ucsPathExpressionString,
32,
BIP_DEF_COMP_CCSID);
p->pathExpression =
cniSqlCreateReadOnlyPathExpression(
NULL,
nodeObject,
NULL, /* no hacer referencia a base de datos*/
ucsPathExpressionString);
}
Este código presupone la adición del campo CciSqlPathExpression* pathExpression a la estructura NODE_CONTEXT_ST.
Ahora utilice la CciSqlPathExpression en la función _Switch_evaluate.
CciElement* targetElement = cniSqlNavigatePath(
NULL,
((NODE_CONTEXT_ST *)context)->pathExpression,
message,
localEnvironment,
exceptionList,
NULL, /* no hacer referencia a ningún árbol de salida*/
NULL,
NULL);