Use esta função para criar um objeto SqlPathExpression que representa o caminho que é especificado pelo argumento de caminho. O caminho navegado não criará elementos de caminho se eles ainda não existirem. Essa função retorna um ponteiro para o objeto PathExpression, que é utilizado como entrada para as funções que navegam o caminho, isto é, a família cniSqlNavigatePath.
Como um código extra envolvido na criação da expressão, se for necessário utilizar a mesma expressão de caminho para cada mensagem, chame essa função uma vez e utilize a CciSqlPathExpression* que é retornada em uma chamada a cniSqlNavigate para cada mensagem. Você pode utilizar CciSqlPathExpression* em encadeamentos diferentes daqueles em 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), chame cniSqlDeletePathExpression para excluí-lo.
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, crie a CciSqlPathExpression para utilização 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 referenciar o Banco de Dados*/
ucsPathExpressionString);
}
Esse código assume a inclusão do campo CciSqlPathExpression* pathExpression na estrutura NODE_CONTEXT_ST.
Agora utilize a CciSqlPathExpression na função _Switch_evaluate.
CciElement* targetElement = cniSqlNavigatePath(
NULL,
((NODE_CONTEXT_ST *)context)->pathExpression,
message,
localEnvironment,
exceptionList,
NULL, /* não referenciar nenhuma árvore de saída*/
NULL,
NULL);