Usted está aquí:Inicio/MG Developers/Blog/Implementación de llamada a Stored Procedure con retorno de Cursor en IBM BPM

Publicaciones recientes

Por Qué Elegirnos

  • Más de 400 proyectos puestos en producción durante los últimos 15 años demuestran el compromiso con nuestros clientes, certifican nuestra metodología y reflejan la capacidad de nuestro equipo de profesionales.

  • En MicroGestion existe un compromiso genuino con la calidad, la formación continua de nuestros profesionales y la mejora continua de nuestros procesos son la evidencia de dicho compromiso.

  • Creemos que los siguientes rasgos son esenciales para el ejercicio de nuestra actividad:

    » Entusiasmo, como requisito para llevar a cabo un proceso creativo.
    » Proactividad, como engranaje de la dinámica de grupos.
    » Responsabilidad, como condición fundamental para asumir compromisos en cada nivel de la empresa.
    » Trabajo en grupo, como mecánica de trabajo elegida para lograr sinergia.

    Asimismo nuestra capacidad de ejecución se fundamenta en el respeto de los siguiente valores:

    » Flexibilidad, necesaria para buscar el mejor camino en cada proyecto.
    » Compromiso, para formar equipos con conocimiento de dominio y orientación al logro.
    » Solvencia, que nos permite diseñar la mejora alternativa tecnológicas para cada solución.

  • En MicroGestion las personas son el factor más importante para el éxito de los proyectos; la conformación y gestión del capital humano se lleva a cabo teniendo en cuenta los siguientes lineamientos:

    » Determinando el conjunto correcto de personas para cada proyecto.
    » Desarrollando un ambiente donde existan oportunidades de aprendizaje.
    » Propiciando la confianza y el respeto dentro del equipo.
    » Permitiendo el desacuerdo y previendo una manera de resolverlo.
    » Preguntando, no inquiriendo.
    » Reconociendo los logros.

24 Feb

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
Valora este artículo
(2 votos)
Federico Luppi

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

Sitio Web: www.microgestion.com/index.php/mg-developers/blog/author/991-federicoluppi
2 comentarios
  • Federico Luppi

    Hola Edwin,
    Para el caso que solo tuvieras un parámetro de salida del SP, deberías agregar solo un parámetro al listado de SQLParameter:

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

    Recordá que en la sentencia SQL que llama a tu SP sería algo como:
    CALL pkg.sp(?) ya que tiene solo un parámetro.

    El resto de la implementación seria lo mismo que lo detallado en el artículo.

    Federico Luppi Lunes, 04 Mayo 2015 20:27 Enlace al Comentario
  • Edwin

    Como seria si tuviera que enviar solo parametro de salida, como por ejemplo un procedimiento que ejecute una sequencia.

    gracias.

    Edwin Domingo, 15 Marzo 2015 14:18 Enlace al Comentario
Deja un comentario

Asegúrate de llenar la información requerida marcada con (*). No está permitido el Código HTML. Tu dirección de correo NO será publicada.

Comuníquese con nosotros telefónicamente +54 011 4382-0878 o vía correo electrónico Esta dirección de correo electrónico está protegida contra spambots. Usted necesita tener Javascript activado para poder verla.