cniSqlCreateModifyablePathExpression

Crea un objeto SqlPathExpression modificable que representa la vía de acceso especificada por el argumento de la vía de acceso. Modificable significa que 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. Al crear la expresión se genera una carga general, de forma que si la misma expresión de vía de acceso se va a utilizar para cada mensaje, entonces esta función debe llamarse una vez y el objeto CciSqlPathExpression* que se devuelve debe utilizarse en una llamada a cniSqlNavigate para cada mensaje. Es posible utilizar CciSqlPathExpression en una hebra distinta de 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 desea tratar los 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 significará el estado de éxito de la llamada. Si se produce una excepción durante la ejecución, *returnCode se establecerá en CCI_EXCEPTION en la salida. Una llamada a cciGetLastExceptionData proporcionará los detalles de la excepción. Si se ha pasado un parámetro nodeObject no válido, returnCode se establecerá 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 establecerá en CCI_INV_ESQL_PATH_EXPR.
nodeObject (entrada)
Especifica el nodo de proceso de flujo de mensajes que será 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. 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) debe suprimirse llamando a cniSqlDeletePathExpression.

Ejemplo

Añadiendo el código siguiente al ejemplo de nodo Transform, podríamos crear fácilmente un elemento y todos los elementos ascendientes necesarios, con una llamada a una función.

Creamos CciSQLPathExpression en la función _Transform_createNodeContext:

 {
        CciChar ucsPathExpressionString[32];
        char*   mbPathExpressionString =
                           "OutputRoot.XML.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 se hace referencia a base de datos*/
                                 ucsPathExpressionString);
    }

y luego podemos utilizar este objeto CciSqlPathExpression en la función _Transform_evaluate

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

Así, al pasar el mensaje de entrada PluginSample.change.xml:

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

veríamos el siguiente mensaje de salida.

<Request
type="modify">
  <CustomerAccount>01234567</CustomerAccount>
  <CustomerPhone>555-0000</CustomerPhone>
  <A>
    <B>
      <C>
        <D/>
      </C>
    </B>
  </A>
</Request>
La utilización de este método en lugar de utilizar cniCreateElementAsLastChild etc., 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 ej., basándose en un atributo de nodo (podríamos crear CciSQLPathExpression en nuestra función de implementación cniSetAttribute).
  • Al desplazarnos y crear al elemento, realizamos una llamada a función en lugar de varias. Esta mejora es más visible 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, 2006 Última actualización: 22/08/2006
as08032_