Cria um objeto SqlPathExpression modificável que representa o caminho especificado pelo argumento de caminho. Modificável significa que quando navegados, os elementos de caminho serão criados 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 cniSqlNavigate para cada mensagem. É possível utilizar a CciSqlPathExpression em um encadeamento diferente do 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 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.
Incluindo o código a seguir na amostra do nó Transform, é possível criar facilmente um elemento e todos os elementos ascendentes necessários com uma chamada de função.
Foi criada a CciSQLPathExpression na função _Transform_createNodeContext:
{ CciChar ucsPathExpressionString[32]; char* mbPathExpressionString = "OutputRoot.XML.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 foi feita referência ao Banco de Dados*/ ucsPathExpressionString); }
e, em seguida, é possível utilizar essa CciSqlPathExpression mais tarde na função _Transform_evaluate
{ CciElement* newElement = cniSqlNavigatePath( NULL, ((NODE_CONTEXT_ST *)context)->pathExpression, message, destinationList, exceptionList, outMsg, NULL,/*não foi feita referência ao OutputLocalEnvironment*/ NULL/*não foi feita referência ao OutputLExceptionList*/); }
Assim, a transmissão na mensagem de entrada PluginSample.change.xml:
<Request type="change"> <CustomerAccount>01234567</CustomerAccount> <CustomerPhone>555-0000</CustomerPhone> </Request>
seria vista a mensagem de saída a seguir.
<Request type="modify"> <CustomerAccount>01234567</CustomerAccount> <CustomerPhone>555-0000</CustomerPhone> <A> <B> <C> <D/> </C> </B> </A> </Request>