Cria um objeto SqlPathExpression não modificável que representa o caminho especificado pelo argumento de caminho. Não modificável significa que o caminho navegado não criará elementos de caminho, se ainda não existirem. Essa função retorna um ponteiro para o objeto PathExpression o qual é utilizado como entrada para as funções que navegam o caminho, isto é, a família cniSqlNavigatePath.
Há um código extra envolvido na criação da expressão, portanto, se for necessário utilizar a mesma expressão de caminho para cada mensagem, essa função deve ser chamada uma vez e a CciSqlPathExpression* que é retornada deve ser utilizada em uma chamada para niSqlNavigatec para cada mensagem. É possível utilizar CciSqlPathExpression* em um encadeamento diferente do que ele foi criado.
CciSqlPathExpression* cniSqlCreateReadOnlyPathExpression( int* returnCode, CciNode* nodeObject, CciChar* dataSourceName, CciChar* path );
Se bem-sucedidos, o endereço do objeto SQLPathExpression será retornado. Se um erro ocorrer, CCI_NULL_ADDR será retornado e o parâmetro de código de retorno indica a razão do erro. Quando a SQLPathExpression não é mais necessária, (normalmente, quando o nó é excluído) ela deve ser excluída chamando cniSqlDeletePathExpression.
A amostra de nó de chave mostra como navegar para um elemento da sintaxe utilizando funções como cniFirstChild. O código a seguir pode ser utilizado para conseguir o mesmo resultado.
Na função _Switch_createNodeContext, criamos a CciSqlPathExpression para uso posterior.
{ CciChar ucsPathExpressionString[32]; char* mbPathExpressionString = "InputBody.Request.type"; /* Converter a cadeia de caminho para unicode*/ cciMbsToUcs( NULL, mbPathExpressionString, ucsPathExpressionString, 32, BIP_DEF_COMP_CCSID); p->pathExpression = cniSqlCreateReadOnlyPathExpression( NULL, nodeObject, NULL, /*não foi feita referência ao Banco de Dados*/ ucsPathExpressionString); }
Em seguida, é possível utilizar essa CciSqlPathExpression na função _Switch_evaluate.
CciElement* targetElement = cniSqlNavigatePath( NULL, ((NODE_CONTEXT_ST *)context)->pathExpression, message, destinationList, exceptionList, NULL, /*não foi feita referência a nenhuma árvore de saída*/ NULL, NULL);