Use esta função para criar um objeto SqlPathExpression que representa o caminho que é especificado pelo argumento de caminho. Quando eles forem navegados, os elementos de caminho serão criados 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 a ser utilizada para cada mensagem, chame essa função uma vez e utilize 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* cniSqlCreateModifiablePathExpression(
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 indicará a razão do erro. Quando a SQLPathExpression não é mais necessária (normalmente, quando o nó é excluído), chame cniSqlDeletePathExpression para excluí-la.
Se você incluir o código a seguir na amostra do nó Transform, será possível criar um elemento e todos os elementos ascendentes necessários com uma chamada de função.
Crie a CciSQLPathExpression na função _Transform_createNodeContext:
{
CciChar ucsPathExpressionString[32];
char* mbPathExpressionString =
"OutputRoot.XMLNS.Request.A.B.C.D.E";
/* Converter a cadeia de caminho para unicode*/
cciMbsToUcs(NULL,
mbPathExpressionString,
ucsPathExpressionString,
32,
BIP_DEF_COMP_CCSID);
p->pathExpression =
cniSqlCreateModifiablePathExpression(
NULL,
nodeObject,
NULL, /* não referenciar o Banco de Dados*/
ucsPathExpressionString);
}
Agora utilize a CciSqlPathExpression posteriormente na função _Transform_evaluate
{
CciElement* newElement =
cniSqlNavigatePath(
NULL,
((NODE_CONTEXT_ST *)context)->pathExpression,
message,
localEnvironment,
exceptionList,
outMsg,
NULL,/* não referenciar OutputLocalEnvironment*/
NULL/* não referenciar OutputLExceptionList*/);
}
Portanto, transmitindo a mensagem de entrada PluginSample.change.xml:
<Request
type="change">
<CustomerAccount>01234567</CustomerAccount>
<CustomerPhone>555-0000</CustomerPhone>
</Request>
A seguinte mensagem de saída é gerada:
<Request
type="modify">
<CustomerAccount>01234567</CustomerAccount>
<CustomerPhone>555-0000</CustomerPhone>
<A>
<B>
<C>
<D/>
</C>
</B>
</A>
</Request>