jueves, 15 de mayo de 2014

Serie: Oracle BPM 11g - Organización - Parte 1: Unidades Organizacionales

Situación

Al momento de implementar soluciones con Oracle BPM es importante prestarle atención a la definición de la Organización: Roles, Unidades Organizaciones, propiedades adicionales de Usuarios.

Objetivos

En esta serie mostraré como utilizar los componentes menos comunes de Organización:
  1. Unidades Organizacionales
  2. Roles Paramétricos y Propiedades Extendidas de Usuario

Solución

Unidades Organizacionales

Las Unidades Organizacionales (UO) dentro de un proyecto BPM describen las áreas o departamentos de una Organización que están involucrados en la realización de un proceso de negocio. Estas áreas o departamentos no tienen que estar relacionados directamente con una unidad dentro del Organigrama de la empresa necesariamente, pueden ser unidades funcionales únicamente para el proceso.

Cuando se crea un proyecto BPM en BPM Studio se crea un archivo "organization.xml" que contiene la información de roles, UO y los calendarios.

Organization.xml

Caso de Estudio: Asignación por Unidad Organizacional

En los procesos de negocio normalmente existen tareas de aprobación, y esta aprobación debe de ser asignada al Director o Gerente de una área especifica. Por Ejemplo: La solicitudes de vacaciones de Marketing, deben de ser revisadas por el Gerente de Marketing, las solicitudes de Administración deben ser revisadas por el Gerente de Administración, etc.


Creación de proceso


1. Creemos un proyecto BPM con un proceso tan simple como el siguiente:
ApprovalProcess BPMN Model

2. Luego se debemos definir un Business Object (con XSD o no) igual de simple que el siguiente:
Request Business Object

3. Implementar la tarea human de la forma más sencilla con el asistente:
Asistente de Generación de Tareas

Implementación de Tareas con ADF

Podemos asignar momentáneamente "weblogic" como usuario para el rol de "approvers" y probar la aplicación desde Oracle Business Process Workspace.


Agregando Unidades Organizacionales y Usuarios


Luego de que probamos la implementación del proceso vamos a agregar algunos usuarios y unos UO al proyecto:

1. Para crear usuarios, podemos utilizar la consola de administración de WebLogic pero una forma más eficiente puede ser siguiendo el blog de Edwin Biemond para crear usuarios con WLST: http://biemond.blogspot.no/2010/01/creating-users-and-groups-in-weblogic.html

En mi caso he creado los siguientes usuarios:
Usuarios creados
Y todos estos usuarios pertenecen al grupo "approvers"

2. Para crear las UO hay que ingresar a Organization en el proyecto BPM y agregar las UO que necesitemos. En este caso he creado una raíz "ACME" con varias áreas dentro:
Unidades Organizacionales creadas

3. Asignar el grupo de usuarios de WebLogic al rol del proceso:
Grupo de usuarios dentro de Rol

Si desplegamos el proyecto BPM ahora, todos los usuarios tendrían acceso a todas las tareas.

Pero que podriamos hacer si el requerimiento es: "Que las solicitudes de aprobación se asignen a los usuarios por área para su aprobación"

Tenemos distintas opciones para aplicar este requerimiento: Utilizar Reglas de Negocio desde el proceso BPMN, utilizar Reglas de Negocio desde las Human Task, utilizar Roles Paramétricos (Parte 3) o utilizar Unidades de Negocio.

A mi parecer, si el requeriento indica "por área" la mejor opción sería utilizar Unidades Organizacionales.

Por lo tanto para configurar las Unidades Organizacionales en el proyecto BPM debemos de seguír los siguientes pasos: 


Implementación de Unidades Organizacionales

1. Seleccionar que Unidad Organizacional debe utilizar el proyecto BPM. En este caso se utiliza una UO del proyecto, pero si la UO ya estaría desplegada en el servidor BPM se debe utilizar la opción "From Repository"
Mapeo de Unidad Organizacional para Proyecto BPM

Validar que el rol, grupos o usuarios que queramos incluir en el proyecto también estan incluidos en las distintas Unidades Organizacionales: Si se asigna una tarea, dentro de un proceso de un proyecto BPM que este mapeado a una Unidad Organizacional, y este usuario no pertenece a ninguna UO, la tarea no será posible de acceder desde el BPM Workspace. 
2. Luego debemos decirle al proceso que debe trabajar bajo el contexto de una unidad organizacional:
Atributo de Unidad Organizacional del proceso
Pero ¿Qué pasa si mi atributo de ID del Departamento proveniente de Base de Datos y es del tipo INT? Esto sucede normalmente cuando queremos integrar distintos sistemas en una aplicación compuesta. 
Para evitar crear código repetitivo y una implementación específica para cada integración, podemos utilizar DVM: Domain Value Map. Estos  artefactos te permiten definir columnas que representan distintas fuentes (Por ejemplo: SAP, ORACLE, APP01) y agregar los que serían los valores de un ID entre estos sistemas.

3. Crear un DVM, y agregar las columnas "DB" y "BPM"
DMV

Dominios en DVM

Una vez creado podemos agregar la relación entre los IDs de Departamentos y la Unidades Organizacionales:
BPM Source

Database Source


DVM Mapping
4. Ahora podemos utilizar funciones XPath para utilizar el mapeo en DVM. En el mapeo de datos del evento inicial del proceso hay que agregar la siguiente función:
Función XPath para Mapeo de Unidad Organizacional
La función para obtener valores del DVM es la siguiente: 
dvm:lookupValue(<ruta de archivo DVM>, <columna fuente>, <valor de columna fuente>, <columna destino>, <valor por defecto>)

Por ejemplo: 
dvm:lookupValue("dvm/Department.dvm", "DB", string(bpmn:getDataOutput('request')/ns:departmentId), "BPM", "ACME")

Función DVM: Lookup Value
Ahora podemos desplegar el proceso y probar que la asignación de tareas sigue siendo por rol, pero únicamente será accedida por el rol dentro de la unidad organizacional respectiva.


En el siguiente post mostraré como utilizar los roles paramétricos con Oracle BPM.