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:
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.
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.
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 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.
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.