cniSqlCreateModifyablePathExpression

Crea un objeto SqlPathExpression que representa la vía de acceso especificada por el argumento de la vía de acceso. Cuando se recorre, se crean elementos de vía de acceso si todavía no existen. Esta función devuelve un puntero al objeto PathExpression que se utiliza como entrada a las funciones que recorren la vía de acceso, es decir, la familia cniSqlNavigatePath.

Puesto que al crear la expresión se genera una carga general, si la misma expresión de vía de acceso se va a utilizar para cada mensaje, llame a esta función una vez y utilice el CciSqlPathExpression* que se devuelve en una llamada a cniSqlNavigate para cada mensaje. Puede utilizar CciSqlPathExpression en hebras que no sean en la que se ha creado.

Sintaxis

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

Parámetros

returnCode (salida)
Una entrada de puntero NULL significa que el nodo definido por el usuario no maneja errores. Las excepciones emitidas durante la ejecución de esta llamada se vuelven a emitir en el nodo ascendente siguiente del flujo. Si la entrada no es NULL, la salida significa el estado de éxito de la llamada. Si se produce una excepción durante la ejecución, *returnCode se establece en CCI_EXCEPTION en la salida. Una llamada a cciGetLastExceptionData proporciona los detalles de la excepción. Si se ha pasado un parámetro nodeObject no válido, returnCode se establece en CCI_INV_NODE_OBJECT. Si se ha pasado un parámetro de vía de acceso no válido, como NULL o una serie de caracteres vacía, returnCode se establece en CCI_INV_ESQL_PATH_EXPR.
nodeObject (entrada)
Especifica el nodo de proceso de flujo de mensajes que es el propietario de la expresión de vía de acceso ESQL. Este puntero se pasa a la función de implementación cniCreateNodeContext. Este parámetro no puede ser NULL.
dataSourceName (entrada)
Nombre de origen de datos ODBC a utilizar si la sentencia hace referencia a una base de datos externa. Este parámetro puede ser NULL.
path (entrada)
Puntero a una serie terminada en NULL de CciChars. Este parámetro especifica la expresión de vía de acceso ESQL a crear tal como lo define el diagrama de sintaxis de referencia de campo ESQL, excepto que no puede incluir variables ESQL locales, variables de referencia ESQL, funciones definidas por el usuario ni constantes de espacio de nombres ESQL, porque no se pueden declarar. Este parámetro no puede ser NULL.

Valores de retorno

Si la ejecución se realiza satisfactoriamente, se devuelve la dirección del objeto SQLPathExpression. Si se produce un error, se devuelve CCI_NULL_ADDR y el parámetro del código de retorno indica el motivo del error. Una vez ya no se necesita SQLPathExpression (normalmente cuando se suprime el nodo), llame a cniSqlDeletePathExpression para suprimirlo.

Ejemplo

Si añade el código siguiente al ejemplo de nodo Transform, puede crear un elemento, y todos los elementos ascendientes necesarios, con una llamada a una función.

Cree la CciSQLPathExpression en la función _Transform_createNodeContext:

 {
        CciChar ucsPathExpressionString[32];
        char*   mbPathExpressionString =
                           "OutputRoot.XMLNS.Request.A.B.C.D.E";
        /* convertir la serie de vía de acceso a unicode*/
        cciMbsToUcs(NULL,
            mbPathExpressionString,
            ucsPathExpressionString,
            32,
            BIP_DEF_COMP_CCSID);
        
        p->pathExpression =
                     cniSqlCreateModifiablePathExpression(
                                 NULL,
                                 nodeObject,
                                 NULL, /* no hacer referencia a base de datos*/
                                 ucsPathExpressionString);
    }

Ahora utilice la CciSqlPathExpression en la función _Transform_evaluate

{
      CciElement* newElement = 
               cniSqlNavigatePath(
                     NULL,
                    ((NODE_CONTEXT_ST *)context)->pathExpression,
                     message,
                     localEnvironment,
                     exceptionList,
                     outMsg,
                     NULL,/* no hacer referencia a OutputLocalEnvironment*/
                     NULL/* no hacer referencia a OutputLExceptionList*/);
}

Por tanto, pasando el mensaje de entrada PluginSample.change.xml:

<Request
type="change">
  <CustomerAccount>01234567</CustomerAccount>
  <CustomerPhone>555-0000</CustomerPhone>
</Request>

Se genera el mensaje de salida siguiente:

<Request
type="modify">
  <CustomerAccount>01234567</CustomerAccount>
  <CustomerPhone>555-0000</CustomerPhone>
  <A>
    <B>
      <C>
        <D/>
      </C>
    </B>
  </A>
</Request>
Este método, en lugar de utilizar funciones como cniCreateElementAsLastChild, tiene las siguientes ventajas:
  • La vía de acceso es más dinámica: la serie de vía de acceso podría determinarse en el momento del despliegue, por ejemplo, basándose en una propiedad de nodo (podría crear CciSqlPathExpression en la función de implementación cniSetAttribute).
  • Al navegar al elemento y al crearlo, se realiza una sola llamada a función. Esta técnica es más evidente cuando el elemento de destino se encuentra en un nivel profundo dentro de la estructura de árbol.
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
Última actualización : 2009-02-16 13:56:13

as08032_