Implementación de llamada a Stored Procedure con retorno de Cursor en IBM BPM

...

En esta entrada se describirá cómo implementar en IBM BPM una llamada a un Stored Procedure que tiene como valor de retorno un Cursor, de manera que se pueda asignar la respuesta del SP a una variable sin tener que hacer algún tipo de conversión manual.

Introducción

Es una práctica común acceder a una base de datos externa, la utilización de Stored Procedures (SP) es una buena práctica siempre que procure un mejor aprovechamiento de los recursos del RDBMS.

Para este caso en particular se trabajó con las siguientes herramientas:

  • IBM BPM Standard v8.0.1.2
  • Base de datos ORACLE

Definición del Business Object

El primer paso será definir un Business Object que represente los resultados que serán retornados por el SP. Se le puede asignar cualquier nombre al objeto, lo importante es que los atributos deben llamarse igual y ser del mismo tipo de dato que las columnas que se retornarán como respuesta del SP.

La siguiente imagen muestra las propiedades del objecto de negocio Status que utilizaremos para nuestro ejemplo:

Propiedades del objeto de negocio

Implementación del servicio integración

Una vez definido el objeto de negocio, se debe crear el servicio de integración que invocará al SP, para nuestro ejemplo utilizamos tres actividades:

  • Build SQL, encargado de construir la sentencia SQL de llamada al SP.
  • Build Params, encargado de establecer el valor de los parámetros utilizados en la llamada al SP.
  • Call SP, responsable de ejecutar la llamada al SP y asignar el resultado en la variable de salida.

Servicio de integracion

La imagen anterior muestra la secuencia de actividades que componen el servicio de integración, para su funcionamiento el servicio utiliza las siguientes variables:

  • Variable privada sql, de tipo String, almacenará la sentencia SQL definida en la actividad Build SQL.
  • Variable privada sqlParams, será una lista del tipo SQLParameter y almacenará la lista de parámetros definidos en la actividad Build Params.
  • Variable de salida results, será una lista del tipo Status y almacenará el resultado retornado por la actividad Call SP responsable de llamar al SP.

Variables utilizadas por el servicio de integración

Implementación de la actividad Build SQL

En la la actividad Build SQL se inicializa la variable privada sql con la sentencia SQL utilizada para realizar la llamada al SP.

tw.local.sql = "CALL pkg.get_all_status_sp(?,?,?,?)";

Implementación de la actividad Build Params

En la actividad de Build Params se inicializa la variable privada sqlParams y se asigna un tipo de dato, modo (“IN”, “OUT” o “IN/OUT”) y valor a cada parámetro del SP (En caso de ser OUT, no se le indica valor).

En nuestro de ejemplo necesitamos utilizar 4 parámetros, nos centraremos en el último, que es la variable correspondiente al Cursor.

tw.local.sqlParams[3] = new tw.object.SQLParameter();
tw.local.sqlParams[3].type = "ORACLE_CURSOR";
tw.local.sqlParams[3].mode = "OUT";

Implementación de la actividad Build Params

Implementación de la actividad Call SP

La actividad Call SP debe ser una invocación al servicio anidado SQL Call Stored Procedure del paquete System Data y se debe indicar el siguiente mapeo de variables:

  • In (Entrada)
    • sql, deberá asociarse a la variable tw.local.sql.
    • parameters , deberá asociarse a la variable tw.local.sqlParams.
    • returnType , deberá especificarse el nombre del objeto de negocio encerrado entre comillas, en nuestro caso "Status".
    • dataSourceName, deberá indicarse el nombre JNDI al data source de la base de datos.
  • Out (Salida)
    • results , deberá especificarse a la variable tw.local.results.

Mapeo de variables

Completados estos pasos, la llamada al SP retornará un listado de instancias del objeto de negocio creado por nosotros, sin tener que realizar ninguna conversión de la respuesta.

 


Modificado por última vez en Viernes, 14 Marzo 2014 22:46

Acerca del autor

Federico Luppi

DFederico cuenta con más de 4 años de experiencia en el desarrollo de aplicaciones Web bajo plataformas Java EE y 3 años de experiencia en el liderazgo de equipos de desarrollo. Actualmente se desempeña como Líder de Proyecto en el área de operaciones de MicroGestion Software.