Crea un objeto SqlPathExpression no modificable que representa la vía de acceso especificada por el argumento de la vía de acceso. No modificable significa que la vía de acceso recorrida no creará elementos de vía de acceso si éstos 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.
Al crear la expresión se genera una carga general, de forma que si la misma expresión de vía de acceso se va a utilizar para cada mensaje, entonces esta función debe llamarse una vez y el objeto CciSqlPathExpression* que se devuelve debe utilizarse en una llamada a niSqlNavigate para cada mensaje. Es posible utilizar CciSqlPathExpression* en una hebra distinta de 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) debe suprimirse llamando a cniSqlDeletePathExpression.
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 alcanzar el mismo resultado.
En la función _Switch_createNodeContext, creamos CciSqlPathExpression para utilizarlo posteriormente.
{ 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 se hace referencia a base de datos*/ ucsPathExpressionString); }
Entonces podemos utilizar CciSqlPathExpression en la función _Switch_evaluate.
CciElement* targetElement = cniSqlNavigatePath( NULL, ((NODE_CONTEXT_ST *)context)->pathExpression, message, destinationList, exceptionList, NULL, /*no se hace referencia a ningún árbol de salida*/ NULL, NULL);