cniSqlCreateModifyablePathExpression

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.

Sintaxe

CciSqlPathExpression* cniSqlCreateModifiablePathExpression(
	int* returnCode,
	CciNode* nodeObject,
	CciChar* dataSourceName,
CciChar* path );

Parâmetros

returnCode (saída)
Uma entrada de ponteiro NULL significa que o nó definido pelo usuário não irá lidar com erros. Quaisquer exceções lançadas durante a execução desta chamada serão lançadas novamente para o próximo nó acima no fluxo. Se a entrada não for NULL, a saída significará o status de êxito da chamada. Se uma exceção ocorrer durante a execução, *returnCode será definido como CCI_EXCEPTION na saída. Uma chamada para cciGetLastExceptionData fornecerá detalhes da exceção. Se um parâmetro nodeObject inválido foi transmitido, o returnCode será configurado como CCI_INV_NODE_OBJECT. Se um parâmetro de caminho inválido, como por exemplo uma cadeia NULL ou vazia, foi transmitido, em seguida, o returnCode será configurado como CCI_INV_ESQL_PATH_EXPR.
nodeObject (entrada)
Especifica o nó de processamento do fluxo de mensagens pertencente à Expressão de Caminho do ESQL. Esse ponteiro é transmitido à função de implementação cniCreateNodeContext. Esse parâmetro não deve ser NULL.
dataSourceName (entrada)
O nome da origem de dados ODBC a ser utilizado, se a instrução referenciar um banco de dados externo. Este parâmetro pode ser NULL.
path (entrada)
Ponteiro para uma cadeia finalizada NULL de CciChars. Isso especifica a expressão de caminho ESQL a ser criada como definida pelo diagrama de sintaxe de referência de campo ESQL, exceto que ela não pode incluir variáveis ESQL locais, variáveis Referência de ESQL, funções definidas pelo usuário, constantes de Espaço de Nomes ESQL, porque não podem ser declaradas. Esse parâmetro não deve ser NULL.

Valores de Retorno

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.

Exemplo

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>
Utilizar essa abordagem em oposição ao uso do cniCreateElementAsLastChild e assim por diante, tem as seguintes vantagens:
  • O caminho é mais dinâmico - a cadeia de caminhos poderia ser determinada no período de implementação, por ex., com base em um atributo de nó (poderíamos criar a CciSQLPathExpression na função de implementação cniSetAttribute).
  • Durante a navegação e criação do elemento, foi feita uma chamada de função em vez de várias. Isso se torna mais evidente, quando o elemento de destino é intenso dentro da estrutura em árvore.
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
as08032_