Blog!

Busqueda de información

BPM y los subprocesos con múltiple instancia en Oracle Fusion Middleware 11g

Ratio: 4 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio desactivado
 

En esta ocasión mostraremos el uso de los subprocesos con múltiple instancia en BMP 11g, para los que van iniciando con el manejo de BPM en sus proyectos.

Conceptos

Subprocesos BPM: es el conjunto de actividades que tienen una secuencia lógica para cumplir un propósito. Un subproceso es un proceso por sí mismo, cuya finalidad es formar parte de un proceso más grande, este proceso más grande es conocido como proceso padre y el subproceso como proceso hijo.

Clasificación de los subprocesos.

  • Subprocesos embebidos: Estos contienen un conjunto de actividades que no son independientes del proceso padre; ellos comparten la misma información y datos, estos subprocesos no están diseñados para ser reutilizables. Dentro de sus propiedades básicas este tipo de subproceso encontramos el nombre visual, nombre, descripción, duración, costo, prioridad, es asíncrona, reintentos, intervalo de reintentos, tiempo de espera, etc. En la siguiente imagen se observa el símbolo del subprocesos embebidos.

                                                                                            

 

  • Subprocesos reusables: Estos pueden ser integrados o pueden trabajar por sí mismos, este tipo de subproceso depende si selecciona la opción de integrado, el proceso podrá continuar cuando el subproceso termina, si selecciona la opción independiente del proceso padre continua con la siguiente actividad en el momento que inicie el subproceso. Estos subprocesos no pueden ser reutilizables y no pueden ser configurados como subprocesos múltiples. En la siguiente imagen se observa el símbolo del subprocesos reusables.

     

  • Subproceso tradicional: se debe asociar a eventos de error, de cancelación y de compensación al subproceso tradicional. En la siguiente imagen se observa el símbolo del subproceso tradicional.

    • Subprocesos múltiple instancia: Los subprocesos múltiples permiten la creación de varias instancias de un mismo subproceso, para realizar esto existen dos tipos de subprocesos de múltiple instancia los cuales son:
      • Paralelos: Las instancias paralelas se crearan simultáneamente, es decir se crean varias solicitudes al mismo tiempo. En la siguiente imagen se observa el símbolo del subproceso paralelo.

                                                                                 

    • Secuenciales: Las instancias secuenciales son creadas una después de otra, es decir que no puede iniciar una solicitud hasta que haya terminado la anterior. En la siguiente imagen se observa el símbolo del subproceso secuencial.

                                                                                           

Para mostrar el uso de los subprocesos de múltiple instancia nos basaremos en un ejemplo muy simple.

En un colegio, muchos estudiantes necesitan inscribirse para poder asistir a clase. Las solicitudes de inscripción de los estudiantes deben ser recibidas y luego procesar la matrícula de cada uno de los alumnos de secundaria dependiendo al grado al que se van a inscribir.

 

Creamos nuestra aplicación BPM, y en la configuración del proceso BPM elegimos la opción servicio asíncrono.

 

 

 

Diseño del .xsd de la solicitud

 

Ya que tenemos creada la aplicación y configurado en proceso BPM, lo primero que debemos crear es el esquema XML para poder trabajar con las solicitudes de inscripción de los alumnos. En la siguiente imagen se muestra el código del XML que utilizaremos para el desarrollo de la aplicación BPM.

 

Ahora vamos a configurar nuestros objetos de datos de proceso, para esto nos vamos a la pestaña de BPM Navegador de proyectos y en el catálogo de negocio, creamos el nuevo módulo, después de haber creado la carpeta del módulo dentro de esto vamos a crear 4 objetos de negocios estos son uno la lista de alumnos, datos  alumno, lista de matrículas y matricula, los creamos como se observa en la siguiente imagen.

 

Donde en la base sobre el esquema externo seleccionamos el elemento del .xsd AplicacionEstudiantesSolicitud, así de esta manera creamos los demás objetos de negocios.

 

Ya que los tengamos creados los vamos a observar como se muestra en la siguiente imagen.

 

Ahora vamos a crear dos  objetos de datos en nuestro propio proceso para almacenar los datos reales dentro de la instancia del proceso y poder responder con la matrícula de cada alumno, para esto nos vamos al proceso BPM, damos clic sobre él, nos mostrara una pestaña  de estructura, en la cual vamos a hacer clic derecho sobre objetos de datos de proceso y los creamos de la siguiente manera.

 

 

Utilizando los mismos pasos creamos el objeto de datos de la ListaMatriculas.

 

El siguiente paso que debemos hacer es el modelo del proceso BPM donde se diseñara el flujo que debe seguir al recibir la solicitud de inscripción hasta terminar el proceso obteniendo la matrícula de cada uno de los alumnos que realizaron la solicitud. Como se muestra en la siguiente imagen donde se observa el proceso a seguir para generar la solicitud de inscripción de cada alumno. Es este modelo agregamos una actividad y un subproceso. El cual configuraremos más adelante.

 

 

Ahora vamos a diseñar el subproceso para generar la matricula según el grado al cual el alumno se va a inscribir. Y el diseño del subproceso nos quedara de la siguiente manera, agregamos una compuerta y 3 scrips, considerando que para este ejemplo donde solo explicamos el uso de los subprocesos con múltiple instancia vamos a asignar la matricula con un script.

 

Ahora vamos a configurar la entrada del proceso, para poder asignar la lista de alumnos que va a ser procesada por el subproceso y quedaría de la siguiente manera.

 

 

Después asociamos un argumento para el proceso que se realizara dentro del subproceso que a continuación vamos a configurar, y la asociación quedaría de la siguiente manera. El argumento de entrada se asocia al objeto de datos que nombramos como ListaAlumnos.

 

La configuración del subproceso la realizaremos de la siguiente manera para poder recorrer la lista de alumnos que desean inscribirse. Donde seleccionamos múltiple instancia, el modo paralelo, el tipo de creación como colección y las variables de entrada será el elemento de datosAlumno que es el que se recorrerá en el subproceso y la salida del subproceso será la matriculaEstudiante con la matrícula de cada alumno.

 

 

Después de que tenemos la configuración del subproceso lo que vamos a hacer con los scripts es asignar los datos del alumno que se ha procesado a la lista de matrículas la cual es la salida de nuestro proceso, como este proceso solo nos da la explicación de cómo usar los subprocesos solo asignaremos una leyenda de la matrícula, la configuración quedara de la siguiente manera.

 

 

Lo que hacemos con cada script para representar la generación de la matrícula para cada grado de cada alumno que se va a inscribir a clases. Lo que nos queda por hacer es realizar la configuración de asignación de la salida del subproceso a la salida del proceso y lo realizamos de la siguiente manera.

 

 

Los datos de asociación de la salida, la configuración quedaría de la siguiente manera. La lista de matrícula que anterior mente le asignamos los valores de la matrícula y datos del alumno los asociamos al argumento de salida del proceso.

 

Lo que nos faltaría por hacer seria realizar el despliegue de nuestro proceso y realizar las pruebas para observar el funcionamiento de nuestro proceso completo.

 

Para dicha prueba ocupamos el siguiente XML de entrada, donde especificamos los datos de cada alumno y el grado al que se va a inscribir para generar la matricula.

 

 

 

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:start xmlns:ns1="http://xmlns.oracle.com/bpmn/bpmnProcess/InscripcionEstudiantes">
<argument1>
<ns2:FechaApertura xmlns:ns2="http://www.mycompany.com/ns/salesquote">2014-02-12</ns2:FechaApertura>
<ns3:DatosAlumno xmlns:ns3="http://www.mycompany.com/ns/salesquote">
<ns3:Grado>1</ns3:Grado>
<ns3:nombre>Arturo</ns3:nombre>
<ns3:edad>13</ns3:edad>
<ns3:apellidos>Lopez</ns3:apellidos>
<ns3:genero>Masculino</ns3:genero>
<ns3:documentacion>Si</ns3:documentacion>
</ns3:DatosAlumno>
<ns4:DatosAlumno xmlns:ns4="http://www.mycompany.com/ns/salesquote">
<ns4:Grado>2</ns4:Grado>
<ns4:nombre>Luis</ns4:nombre>
<ns4:edad>12</ns4:edad>
<ns4:apellidos>Perez</ns4:apellidos>
<ns4:genero>Masculino</ns4:genero>
<ns4:documentacion>Si</ns4:documentacion>
</ns4:DatosAlumno>
<ns5:DatosAlumno xmlns:ns5="http://www.mycompany.com/ns/salesquote">
<ns5:Grado>3</ns5:Grado>
<ns5:nombre>Carmen</ns5:nombre>
<ns5:edad>13</ns5:edad>
<ns5:apellidos>Jimenez</ns5:apellidos>
<ns5:genero>Femenino</ns5:genero>
<ns5:documentacion>Si</ns5:documentacion>
</ns5:DatosAlumno>
<ns6:DatosAlumno xmlns:ns6="http://www.mycompany.com/ns/salesquote">
<ns6:Grado>2</ns6:Grado>
<ns6:nombre>Guadalupe</ns6:nombre>
<ns6:edad>13</ns6:edad>
<ns6:apellidos>Ibarra</ns6:apellidos>
<ns6:genero>Femenino</ns6:genero>
<ns6:documentacion>Si</ns6:documentacion>
</ns6:DatosAlumno>
<ns7:DatosAlumno xmlns:ns7="http://www.mycompany.com/ns/salesquote">
<ns7:Grado>1</ns7:Grado>
<ns7:nombre>Juan</ns7:nombre>
<ns7:edad>13</ns7:edad>
<ns7:apellidos>Jimenez</ns7:apellidos>
<ns7:genero>Masculino</ns7:genero>
<ns7:documentacion>Si</ns7:documentacion>
</ns7:DatosAlumno>
</argument1>
</ns1:start>
</soap:Body>
</soap:Envelope>

Como resultado de nuestra prueba seria como lo vemos en la siguiente imagen, donde observamos que de una sola instancia de entrada se ejecutan N número de subprocesos como de alumnos se encuentren en la lista de inscripción para generar la matrícula.

 

 

 

      Cualquier duda o comentario puedes contactarnos a  info[at]baware.com.mx o atapia[at]baware.com.mx

 

Log in