Note

The online documentation is produced by a web publishing technology created by us to read the documents origins in OpenOffice Writer (ODT) and Microsoft Word (docx) formats and produces native web and PDF versions. In this way we maintain Louder project documentation update and in sync on each of its formats.
Select a Language:
Componente BusinessProcess
Introducción
Este componente da la posibilidad de implementar meta-procesos usando BPEL, de esta forma se busca la optimización y mejoramiento de procesos de negocio en una aplicación desarrollada usando Kumbia Enterprise.

Actualmente el lenguaje PDL (basado en el jPDL) es soportado por este componente con el cual se puede expresar procesos de negocio en terminos de tareas, estados de espera, comunicación sincronica, etc.

El componente permite su integración con otros componentes permitiendo levantar configuración, establecer persistencia, identificación, etc.
¿Que es un proceso de negocio?
Un proceso de negocio es un conjunto de actividades estructuradas y relacionadas que tienen como objetivo prestart un servicio que satisfaga las necesidades de un cliente. Los procesos de negocio son críticos para las organizaciones y su correcta estructuración y definición determina el éxito de una organización.
¿Qué es BPEL?
BPEL es un lenguaje de orquestación de servicios web. Los lenguajes de orquestación implicitamente indican la intervención ó la facilidad de comunicación entre diferentes sistemas que puedan tener diferentes plataformas e infraestructura de sistemas.
Job Executor
El componente BusinessProcess ofrece un entorno de ejecución para PHP que permite ejecutar procesos PDL ya sea para orquestar servicios ó ejecutar procesos funcionales.
Crear un Proceso de Negocio
Un proceso de negocio se especifica utilizando una estructura XML que representa los estados del meta-proceso. Cada uno debe contener un estado inicial y uno final que indique donde empezar y donde se debe terminar.

En el siguiente ejemplo se ilustra un proceso BPM de un sistema de punto de venta (POS). El estado inicial del proceso se marca con el nodo "start-state". Es sencillo seguir el flujo del meta-proceso gracias a los nodos "transition" que transfieren el flujo de ejecución de un nodo a otro.
Ejemplo: Definición de un proceso BPM en PDL
<?xml version="1.0" encoding="UTF-8"?>
<process-definition name='Pedido'>
     <start-state>
          <transition to="irAlMenu"/>
     </start-state>
     <state name="irAlMenu">
          <transition to="ingresarClave"/>
     </state>
     <state name="ingresarClave">
          <decision handler="autenticar">
               <transition condition="{#autorizado}==false" to="fin"/>
               <transition condition="{#autorizado}==true" to="tomarPedido"/>
          </decision>
     </state>
     <state name='tomarPedido'>
          <task-node name='Mesa y Comanda'>
               <task name='Ir a Mesas' handler='irAMesas'/>
               <task name='Escoger Mesa' handler='escogerMesa'/>
               <decision name='Consultar Tipo de Comanda' handler='consultarTipoComanda'>
                    <transition condition="{#tipoComanda}=='A'" to="ingresarNumeroPersonas"/>
                    <transition condition="{#tipoComanda}=='M'" to="ingresarComandaManual"/>
               </decision>
          </task-node>
     </state>
     <state name='ingresarComandaManual'>
          <decision name='Comanda Existe' handler='comandaExiste'>
               <transition condition="{#comandaExiste}==true" to="fin"/>
               <transition condition="{#comandaExiste}==false" to="estableceNumeroComanda"/>
          </decision>
     </state>
     <state name='estableceNumeroComanda'>
          <task name='Establece la comanda' handler='establecerComanda'/>
          <transition to='ingresarNumeroPersonas'/>
     </state>
     <state name='ingresarNumeroPersonas'>
          <decision name='Requiere Numero Personas' handler='requiereNumeroPersonas'>
               <transition condition="{#requierePersonas}==true" to="ingresarPersonas"/>
               <transition condition="{#requierePersonas}==false" to="seleccionarMenu"/>
          </decision>
     </state>
     <state name='ingresarPersonas'>
          <task name='Establece las Personas en la Mesa' handler='ingresarPersonas'/>
          <transition to='seleccionarMenu'/>
     </state>
     <state name='seleccionarMenu'>
          <task-node name='Seleccionar Menu'>
               <task name='Seleccionar un Menu' handler='escogerMenu'/>
          </task-node>
     </state>
     <state name="fin">
     </state>
</process-definition>
Tipos de nodos de un meta-proceso PDL
Un meta-proceso soporta los siguientes tipos de nodos:
Tabla: Tipos de nodos de un meta-proceso PDL
Tipo Nodo
Descripción
stateRepresenta un estado del proceso. Los estados deben tener un nombre que permite identificarlos unívocamente en toda la definición del proceso y así generar una transición a ellos. Este tipo de nodos contienen nodos hijos que conrresponden a las actividades realizadas por el estado. El nombre del estado se define con el atributo "name".
transtionEste tipo de nodo permite realizar una transición a otro estado del proceso. Dependiendo del proceso la transición puede ser condicional, en estos casos se implementarán 2 nodos de transición seguidos con el atributo "condition" definido. La primera transición cuya evaluación resulte verdadera sera quien realice la transición. El nodo a recibir el flujo de ejecución se especifica con el atributo "to".
decisionLos nodos "decision" permiten efectuar saltos condicionales usando transiciones. El parámetro "handler" indica el nombre de un método en el proceso PHP asociado al meta-proceso que tiene como objetivo cargar las condiciones para la evaluación en las transiciones siguientes.
taskEste tipo de nodos tienen un handler que referencia un método en el proceso PHP asociado y normalmente es usado para realizar una operación de negocio parte del meta-proceso.
task-nodeCuando se requiere ejecutar varios nodos "task" se usa un "task-node" el cual permite asociar varias operaciones de negocio dentro de un estado del meta-proceso.
Crear los handlers del BusinessProcess
Un proceso de negocio debe ser definido el cual realizará la carga de la definición PDL para su posterior ejecución:

Ejemplo: Crear una clase de proceso de negocio BusinessProcess
<?php

class PedidoProcess extends BusinessProcess {

     /**
      * Inicializar el proceso de negocio
      *
      */
     public function initialize(){
          $processDefinition = ProcessDefinition::parseXMLFile("apps/pos/test/pedido.xml");
          $processInstance = new ProcessInstance($processDefinition, $this);
          $processInstance->signal();
     }

}