Jugando con jBPM #13 – Swimlanes a nivel conceptual

Es algo sobre lo que se pregunta bastante, ya que es un concepto que esta asociado con el modelado de procesos en general. Para no confundir, podemos definir a una swimlane como un rol del proceso, para ser mas especificos, podriamos decir que vamos a usar una swimlane cuando en un proceso que estemos modelando necesitemos especificar que un set de tareas deben ser realizadas por la misma persona, ya que esta es la que conoce el contexto de esas tareas para una instancia del proceso en particular.

Por lo tanto el comportamiento que vamos a obtener en jBPM es el siguiente:

  • Definimos (modelamos) varias tareas asignadas a una swimlane
  • Cuando la primer tarea de la swimlane se instancia, se llama al AssignmentHandler correspondiente y se asigna un actor a la swimlane
  • Cuando la segunda tarea de la swimlane se instancie, se recupera el actor ya asignado por el AssignmentHandler y se asigna este a la tarea.
  • Así para el resto de las tareas que estén asignadas a la swimlane.

Por lo tanto debemos tener cuidad de no aplicar un assignment handler a las tareas que se encuentran con una swimlane especificada.

Notas o aclaraciones nuevas:

Voy a tratar de en un par de puntos aclarar algunos conceptos que puede ayudar:

  • En la definicion del proceso definimos task-node y task.
  • Las task-nodes contienen 0 o mas task, las cuales se instancian dinámicamente (por defecto) cuando el flujo del proceso llega al task-node que las contiene
  • En el momento de instanciación de cada una de las tareas (tasks dentro del task-node) se llama al correspondiente AssignmentHandler que esta definido en cada tarea.
  • En un caso normal este AssignmentHandler resuelve a que actor del proceso le corresponde realizar la tarea y asigna al campo ActorId el nombre del actor obtenido. (También esta el caso de pooled actors pero no viene al tema)
  • En el caso de que haya varias tareas a lo largo de varios task-nodes asociadas a un swimlane, genera otro comportamiento, que describo a continuación:
    • Cuando el flujo de ejecución del proceso llega al primer task-node que contiene una tarea la cual esta asociada a una swimlane, esta tarea se instancia y se llama al assignment que tenga asociado la swimlane. Este AssignmentHandler tiene la particularidad que solo va a ser invocado por la primer tarea que se instancie y que este asociada con la swimlane. Lo que significa que cuando se instancie la segunda tarea asociada a la swimlane, el actor ya estará resuelto y deberá llamarse al AssignmentHandler correspondiente. Todo esto se logra manteniendo una ” instancia”  de la clase SwimlaneInstance con el actor ya resuelto y recordándola (o sea persistiendo la) para que las nuevas tareas no tengan que realizar la logica de asignación nuevamente.

Espero que haya quedado un poco mas claro, prometo subir un ejemplo para discutir mas adelante.

Saludos!

Advertisements

51 thoughts on “Jugando con jBPM #13 – Swimlanes a nivel conceptual”

  1. Yo no entiendo muy bien lo de las dos tareas asociadas a la swimlane. Mi problema es integrar el jbpm con mi modelo de usuarios ya que hay ciertas tareas que solo podrian realizar determinados usuarios, si explicaras un poco más lo de las swimlanes a mi me ayudarias un monton.
    Gracias

    Like

  2. Algo mas claro si, gracias.

    Aun asi no se como se le asigna Handlers a las swimlanes, creo que con un buen ejemplo me aclararia mucho mejor, asi q esperare para plantear mas dudas.

    Gracias a ti!

    Like

  3. Hola. Estoy comenzando a investigar un poco sobre jBPM y me parece realmente interesante este blog. Tengo un problema porque no consigo descargarme los fuentes del console para empezar a probar cosas. Con la suite viene el jbpm-console.war, pero no consigo encontrar los fuentes. Estoy peleándome con la CVS, pero no consigo localizarlo. Podría alguien echarme un cable, por favor?

    Like

  4. Gracias por tu comentario Jorge, te comento
    que el repositorio del código nuevo de jBPM esta en http://anonsvn.jboss.org/repos/jbpm/jbpm3/trunk/
    que pertenece a SVN, no a CVS, asi que deberías revisar estos fuentes nuevos.
    Una cosa que vas a notar es que actualmente, como en la mayoría de los proyectos de JBoss, se utiliza Maven y no Ant para compilar y administrar el código. Por lo cual vas a tener que instalarlo también aparte de SVN.
    En cuanto al código de la consola web, en este repositorio se encuentran en: http://anonsvn.jboss.org/repos/jbpm/jbpm3/trunk/modules/console/
    Cualquier duda sobre ese repositorio o sobre la consola, no tienes mas que comentar.
    Saludos

    Like

  5. Muchísimas gracias!!! Te quiero!! 😉

    De todas formas, ando perdido, un poco más cerca, pero sigo perdido. Me he instalado un pluggin de eclipse para svn y me he traído el código de http://anonsvn.jboss.org/repos/jbpm/jbpm3/trunk/modules/console/, tal y como me indicas y me crea un proyecto jbpm-console en mi workspace. Parece que va bien, pero cuando reviso el proyecto que me crea sólo hay una clase java (ProcessUploadServlet.java) y además me lo marca con error(no encuentra los imports). Realmente no tengo ni idea, no sé si es algo que se arreglará al utilizar el maven o qué (no lo he usado nunca).
    Por último me he instalado un pluggin de maven (de apache) y ya sí que no sé qué hacer. Nunca he utilizado ni ant ni maven. He leído un par de páginas sobre maven, pero no consigo avanzar.
    Lo que yo quiero es un proyecto en eclipse que tenga el jbpm-console, que pueda ir tocando y desplegando para ir viendo cómo queda e investigar un poco. En la oficina tienen los fuentes del 3.2, pero ya no se parece en nada al original (muy personalizado) y además, me gustaría echarle un ojo a la 3.2.3, que me parece bastante más completa.
    Podrías ayudarme otra vez? quizás unas instrucciones para tontos me vendrían bien. Perdona por molestarte, pero ando algo desesperado.

    Por otra parte, si alguien tiene los fuentes ya en un proyecto eclipse y me lo puede pasar se lo agradecería eternamente.

    Gracias a todos

    Like

  6. Hola. Estoy investigando un poco sobre jbpm y este blog me resulta de gran utilidad por lo cual queria agradecrte y felicitarte. Estamos tratando de desarrollar una aplicacion que pueda ejecutar genericamente varios diferentes process definitions y a tal fin queria saber si existe la forma de asignar un Process Definition a un swimlane particular o si estos sirven unicamente para definir a nivel de tarea. Gracias.

    Like

  7. Primero que nada gracias por tu comentario!
    Paso a responder tu pregunta, primero que nada debes saber que el concepto de swimlane vive dentro del process definition a la hora de la definición. Luego en la ejecucion, solo tiene influencia sobre los nodos asignables (que por lo general son tareas, y el nodo start-state el cual puede definir una tarea dentro del mismo). Por lo tanto la respuesta concreta a tu preguntas es No. Sin embargo, a mi punto de vista, ese tema tendrías que limitar la ejecución de varios process instances a nivel presentación o a nivel autorización de usuario. Espero haber sido claro, sino no dudes en volver a escribir.
    Saludos!

    Like

  8. Holaa!! he estado leyendo y creo que lo que yo necesito son grupos de usuarios por que dentro de ese grupo cualquiera puede realizar un task…
    ahora me confunde un poco esta definicion …

    < swinlane name=”nombre” >
    < assignment expression = “group (administradores)” class = “……..”>

    esta definicion es para un grupo de usuarios?

    por que por lo que he estado leyendo en tu blog dice que tienes un swinlane pero que a cada task tienes que asignarle un actor-id … en mi caso cualquier actor del grupo de actores que yo seleccione puede realizar una determinada tarea…
    como se manejan los grupos de usuarios? como los defino ?

    Like

  9. Bueno, dicho todo en prosa. No entiendo cual es la diferencia entre usar Swimlane o dentro de un task-node–>task hacer un assigment de un actor_id o un pooled_actors. ¿Es equivalente o cual es la diferencia?

    Muchas gracias.

    Like

  10. Buena pregunta.
    Perdon por lo del XML pero parece que wordpress considera que los usuarios no deben ingresar tags de ningun tipo.
    Respondiendo a tu pregunta, si hay diferencias, entre usar un swimline y hacer las asignaciones en cada tarea.
    En realidad justamente esa es la diferencia. La asignacion en un swimline se hace cuando se llega a la primer tarea que esta dentro de un swimlane especifico. Una vez hecha esta asginacion se propaga al resto de las tareas que tengan el mismo swimlane. Esto quiere decir que no se debera llamar a los assignment handlers por cada nueva tarea que se cree con ese swimline.
    Esto suele ser util en muchas situaciones, donde se requiere que una misma persona atienda por ejemplo a un mismo cliente en distintas tareas a lo largo de un proceso.
    Haciendo las asignaciones en cada caso, podria asignarses distintas personas para atender a un cliente.
    Espero que se haya entendido la respuesta.
    Cualquier cosa comenta de vuelta.
    Saludos y Gracias por tu comentario!

    Like

  11. Gracias por la respuesta. Según entiendo te ahorrarias llamadas a los AssignmentHandler pero la funcionalidad que aportan es la misma, ¿correcto?.

    Por otra parte, tengo otra duda de JBPM a ver si sabes como funciona.

    Tengo una “tareaA” que puede hacer el rol “ROL-A” y tengo el usuario1, y usuario2 que pertenecen al “ROL-A”. Si la tareaA no está asignada a ningún usuario tanto el usuario1 como el usuario2 la pueden ver, pero en cuanto es asignada a un usuario el otro aunque tiene el rol no puede ver que esa tarea está ya activada., sino que solo puede ver las que no han sido asignadas pero que con su rol podria ejecutar.

    ¿Sabes si con JBPM se podrian ver todas las tareas sin asgianr o asignadas a tu mismo rol en un momento dado?

    Bueno, muchas gracias de antemano.

    Like

  12. Gracias por tu nuevo comentario. Con respecto a la funcionalidad podria decirse que ambos realizan asignaciones, en distinto tiempo, pero la funcionalidad de asignacion es la misma. Solo que una se ejecuta varias veces y la otra sola una vez.
    Con respecto a tu segunda duda, la funcionalidad es como vos mencionas. Cuando una tarea es tomada por alguien, esta tarea tiene que desaparecer para las demas personas en el mismo rol. Esto es para que dos personas no trabajen sobre la misma tarea concurrentemente. La funcionalidad que queres obtener, podria lograrla implementando un NamedQuery que no filtre por el usuario que esta asginado. Pero deberias analizar bien que caso de uso quieres cumplir, para no cometer un error conceptual.
    Saludos

    Like

  13. Vale, gracias. Yo estoy intentado usar Seam-Jbpm. Te ofrece unas listas en contexto “taskInstaceList”, “pooledTaskListInstance” y poca cosa más y con esas la verdad que no me llega.

    No se muy bien que es eso de NameQuery pero mirando he visto que simplemente es una anotación para realizar consultas hacia la base de datos, ¿no?. Entonces supongo que deberia de implementar mis propias consultas SOBRE LAS TABLAS de JBPM para obtener una lista con las tareas que me interesan, ¿no?. Pues si que va a ser complicada el asunto…

    Like

  14. No se a esta altura como esta la integracion con seam.
    Revisa la documentacion de seam para ver como funciona.
    Pero digamos que es bastante sencillo escribir una NamedQuery. Que de paso te aclaro que no son consulta directas a la base sino que estan escritas en HQL, lenguaje de consulta de Hibernate.
    Saludos

    Like

  15. Hola salaboy, antes que nada te felicito por el blog, está muy bueno y es de gran utilidad. Soy nuevo en jbpm y luego de implementar unos test, me surge la siguiente duda:

    Yo tengo una tarea que tiene swimlane=”Revisar”. Ahora bien, por otro lado tengo definido el swimlane “Revisar” que tiene como assignment expression=”group(Revisor)”. Luego tengo las siguientes líneas dentro de un test que me falla:

    List task = jbpmContext.getTaskMgmtSession().
    findTaskInstances(“1”);
    Assert.assertTrue(task.size() > 0);

    Donde 1 es el id de un usuario que pertenece al grupo Revisor en la bd.

    Lo mismo ocurre si ejecuto:

    List task = jbpmContext.getTaskMgmtSession().
    findTaskInstances(“Revisor”);

    Estoy en el nodo correcto y ejecutando la tarea correcta (de eso estoy seguro).

    Obviamente la pregunta es como recuperar las tareas en función de lo definido en expression=”group(Revisor)”

    Saludos y mil gracias.

    Martín.-

    Like

  16. Primero que nada, Gracias por tu comentario.
    Vamos con la respuesta y vamos despacio. Ya que en tu comentario entran varios conceptos, que me van a ser dificiles de explicar en una respuesta corta.
    Primero que nada una swimline es un rol de proceso, como podria ser Contador, Administrador, Cajero, etc. Un rol de proceso como en UML representa un concepto y la capacidad de realizar alguna tarea en el dominio del proceso, y no a una persona. Por lo tanto una Swimline no deberia llamarse nunca “Revisar”, estaria bien que se llame “Revisor” como el nombre de tu grupo.
    Por otro lado, en jBPM los ids de los usuarios no son numericos, es directamente el nombre en forma de String. Por esto revisa que usuarios tienes creados, en que grupos estan dichos usuarios y directamente deberias llamar al metodo findTaskInstances(”pepe″); por ejemplo.
    Para darte una idea de como funciona las consultas que se realizan para buscar las tareas, puedes revisar las named queries que se encuentran en el archivo hibernate.queries.hbm.xml.
    Espero haber sido de ayuda. Cualquier duda espero tu nuevo comentario!
    Saludos

    Like

  17. Mil gracias por la respuesta, ahora me quedan mas claros los conceptos. En estos días seguiré haciendo pruebas y quizás vuelva a molestarte.

    Saludos.

    Martín.-

    Like

  18. Buenass,

    tengo otra preguntaaa. No entiendo que diferencia que hay entre poner:

    pooled_actor=’ROL1′ o pooled_actor=”group(ROL1)” que diferencia hay entre poner eso de “group” o no?

    A parte, cuando usas swimlane hay que implementar los AssigmentManager, ¿no? o solo se escribe la definición de flujo y no hay que implementar nada? He intentado cambiar los assigment por swimlane y me daba algún error que supongo que será por algo de eso..

    Muchas graciasss!

    Like

  19. Gracias por tu comentario.
    Te comento que la diferencia entre usar la funcion group() o no es bastante. Si usas la funcion group(“GroupName”) cualquier persona que se encuentre en el grupo con nombre “GroupName” va a poder tomar y realizar esta tarea. De la otra manera solamente el usuario con ID ROL1 podra realizarla.

    Con respecto a los Swimlanes, puedes o no escribir los AssignmentHandlers. Exactamente igual que para las asignaciones de pooled actors o actors id. En las swimlanes tambien puedes usar la funcion group() si quieres.

    Disculpa la demora de mi respuesta.
    Saludos!

    Like

  20. Hola, yo te escribí hace unos días sobre el tema de los Swimlanes. Tengo el siguiente problema:

    Si tengo esta definición que la tarea tiene como assignment la expression=”group(Revisor)”

    dentro de un test
    List task = jbpmContext.getTaskMgmtSession().findTaskInstances(“Martin”);

    me retorna una tarea, puesto que el usuario martín pertence al grupo “Revisor”.

    Ahora bien, si en lugar de la definición anterior tengo una swimlane cuyo assignment tiene expression=”group(Revisor)” y mi tarea tiene swimlane=”Revisor” en lugar del assignment, entonces la línea del test anterior no me retorna nada.

    Alguna idea?.

    Muchas gracias.

    Saludos, Martín.-

    Like

  21. Eso puede ser porque la asignacion se resuleve cuando se ejecuta la primer tarea de la swimlane.
    Tendrias que analizar bien tu flujo de ejecucion y si se esta resolviendo bien los grupos para las swimlanes.

    Like

  22. Hola y felicidades por el blog, genial!
    Una cuestión que me intriga. Quiero que una tarea pueda ser tratada por varios roles. Por ejemplo, que la tarea “Corregir error” pueda ser tomada por cualquier usuario que pertenezca tanto al “Rol1” como al “Rol2”. Serviría la opción: swimlane=”Rol1,Rol2″ ??

    Gracias.

    Like

  23. Necesito ayuda urgente!!
    no sé como asignar tareas a usuarios específicos…
    Si inicio una instancia del proceso con un usuario, con este mismo usuario puedo continuar todo el proceso hasta terminarlo pero no quiero que eso pase, quiero que si un usuario termina una tarea y la siguiente tarea le toca a otro usuario, no le permita al primer usuario ejecutar esa tarea y terminarla. Qué puedo hacer?? Por favor ayúdame que estoy desesperada….

    Like

    1. Hola como estas?
      gracias por tu comentario, antes que nada.
      La respuesta a tu pregunta es mucho mas fácil de lo que pensas.
      Yo supongo que si estas hablando de asignaciones, es porque estas usando tareas humanas, ya que el resto de las actividades (nodos) no permiten asignaciones de usuarios. Si es así, vas bien, el resto lo deberías manejar con el modulo de administración de tareas, el cual esta creado con ese mismo fin.
      La idea es que si un usuario tiene una tarea asignada, cual su interfaz de usuario liste sus tareas, solo le aparezcan las que el tiene asignado. Cuando el termine su tarea y el proceso avance a la siguiente, el siguiente usuario vera su tarea en su lista de tareas, y el usuario anterior no vera nada.
      De esta manera, cada usuario pude completar solo las tareas que le corresponden.
      Saludos, espero que sirva, sino espero otro comentario tuyo!

      Like

      1. Gracias por tu respuesta pero todavía no puedo solucionar mi problema. Exactamente como tu dices, la idea es que si un usario ya culminó su tarea y la siguiente tarea a realizarse pertenece a otro usuario, el primer usuario ya no pueda ver ninguna tarea pendiente, que no le pertence, de la instancia del proceso que se está ejecutando, y únicamente el segundo usuario tenga en su lista de tareas pendientes. Si es posible, por favor, me puedes indicar como hago esto en eclipse. Gracias por tu ayuda. Espero tu respuesta. Un saludo 🙂

        Like

  24. Como estas Katha?
    Veo que sigues con los mismos problemas de antes.
    Vamos respondiendo de a una duda por ves. Con respecto a si puedes hacer la restricción de tareas en eclipse, la respuesta es: solo puedes hacer las asignaciones estáticas ahi. En eclipse no puedes agregar ni ver ningún dato de la ejecución del proceso.
    Con respecto a tu pregunta sobre como restringes tareas por usuarios, la respuesta es:
    Esto lo haces utilizando la API TaskMGMTSession. Esta API tiene metodos como listar tareas por usuarios, para que jBPM te devuelva solamente las tareas que puede ver ese usuario. Por supuesto que si usas la API sin especificar usuario, estas actuando en algo parecido a un modo administrador y por esta razon te listara todas las tareas pendientes de todos los usuarios.
    En la mayoría de los casos, cuando tu tienes que armar una aplicación con jBPM donde cada usuario tiene su lista de tareas, por debajo llamaras a la API de jBPM pasando el usuario que se encuentra registrado en tu aplicación, lo que llevara a que la respuesta de las tareas activas, sean solo para dicho usuario.
    Espero ser claro, sino espero tu nueva pregunta! 😉

    Like

  25. Muchas gracias por tu respuesta
    Tengo otra pregunta 😉 En el eclipse, utilizando la herramienta de jbpm, cuando se añade un task node, el en cuadro de propiedades tu creas la tarea, y en la pestaña assignment tienes varias opciones a escoger. Para hacer lo que tú me indicas simplemente debo escoger una de esas opciones o necesariamente debo ingresarme al código para asignar las tareas?? Porque he probado con todas las opciones y ninguna me funciona, talvés pueda ser que esté aplicando mal, me podrías indicar por favor?? Gracias, eres muy amable 🙂

    Like

    1. Perfecto.. ahora nos estamos entendiendo.
      Cuando agregas un Task-Node en GPD(Eclipse) luego tienes que definir tus tareas ahí adentro. Es decir, por cada task-node que tu defines puede definir múltiples tareas adentro. Para eso en las opciones en el cuadro de propiedades tiene la solapa task, donde ahi puedes ir creando tus tareas. A cada una de estas tareas, es a la que le tienes que asignar un actor de tu proceso. Si vas a la solapa assignment dentro de la task que definiste dentro del task-node, vas a encontrar una lista desplegable de valores. Esta lista contiene, si mal no recuerdo, las siguientes opciones:
      actor-id, pooled-actors, expression, handler.
      Si tu eliges actor-id, y en el cuadro de texto ingresas el nombre de un usuario, luego con las APIs de TaskMGMT podrás pedir todas las tareas que tenga ese usuario asignadas.
      Recuerda que la API te devolverla la lista de tareas que se han creado, porque el proceso llego hasta esa tarea, nunca te va a traer tareas si el proceso no ha llegado hasta los task-node’s que las definen.
      Saludos, espero que sirva!

      Like

  26. Hola Salaboyl. que tal.
    Primero que nada, lujo el blog nuevamente!, me ha servido de mucho en lo q es jbpm. 😉

    Estoy teniendo unos problemas con los Forks/join cuando tengo swimlanes asignados. y no doy en el clavo aún. Quizá se te ocurra algo.
    Tengo un grafo sencillo, con 5 tareas. tarea 1, tarea 2 …Tarea 5. tambien tengo un fork y dos joins.
    La situacion es asi:
    Arranca y lo primero que hace es lanzar un Fork q ejecuta 3 tareas, Tarea 1 , 2 y 3. las cuales tienen diferentes swimlanes asociados.
    de esas 3 tareas, la Tarea1 y la Tarea2 convergen en el Join 1, q el join 1 continua el hilo hacia la tarea 4.
    La tarea 4 tiene una transaccion a un Join 2, que se encarga de cerrar la tarea 3 (inicialmente lanzada con la Tarea1 y la Tarea2, pero queaun no esta cerrada).
    una vez finaliada la tarea 3 y la 4 deberia continuar el flujo.
    Teoricamente, parece estar bien. Practicamente, funciona el Fork/Join si no le asigno swimlanes. Pero al momento de meterle diferentes swimlanes las 3 tareas iniciales T1 T2 y T3 da problemas, no me esta dejando cerrar el primer Fork. Porq T1 y T2 tienen diferentes swimlanes (me esta dando un error de calve foranea entre la tabla de las tareas activas y la de los swimlanes). Por lo que veo, quiere borrar de la tabla de tareas activas una tarea luego de terminarla, pero no la borra de la tabla de swimlanes como deberia y surge el error de la clave foranea.
    Este es el error.

    could not delete:
    [org.jbpm.pvm.internal.task.SwimlaneImpl#164]; nested exception is org.hibernate.exception.ConstraintViolationException

    Se me hizo un poco largo el comentario.
    Espero haberme explicado un poco…

    Bueno, desde ya muchas gracias.

    Like

  27. Hola! Muy bueno el blog, la verdad me sirvio mucho. Te queria hacer una consulta sobre swimlanes. Yo tengo un handler que asigna el swimlane a un pool, pero cuando un usuario realiza la tarea, la siguiente queda asignada a ese usuario. Hay alguna manera de que siga quedando asignada al pool?

    Gracias, espero que sigas leyendo ya que paso mucho tiempo.

    Like

  28. Hola como estas? buenísimo que te sirvan los posts.
    La idea de swimlanes es esa exactamente. Cuando asignas un usuario a una swimlane queda asociado a todas las tareas de esa swimlane para esa instancia del proceso. Si no querés usar ese comportamiento tendrías que usar otra técnica. La cual podría ser solo usar pools y grupos.
    Saludos!

    Like

  29. Gracias por la respuesta. Te cuento un poco mi situacion. En un fragmento del workflow se arma una especie de ciclo que puede ser iterado varias veces. En tema es que cada tarea de una iteracion la puede hacer cualquier actor que pertenezca a un pool determinado. Pero en las siguientes iteraciones son otros los pooles que las realizan, por eso no puedo asignar la iteracion a un pool determinado. Probe usando una variable del proceso para que asignara dinamicamente a los pooles, pero eso me presento un problema cuando necesite que las iteraciones se realicen en simultaneo utilizando un fork.

    No se si se entiende lo que intento hacer, por ahi tengo un error en la manera en arme los ciclos y por eso no encuentro la manera de asignarlos. Si queres que entre en mas detalles podria explicarte mejor la situacion.

    Saludos!

    Like

  30. Creo que usar una variable del proceso para indicar las asignaciones automáticas esta bien. No se que tipo de error podes haber tenido usando un fork, pero si es un error lógico lo único que tendrías que hacer es agregar un poco de lógica custom para tu situación.
    Por otro lado si tenes un ciclo con un cierto numero de tareas que en un momento se realizan por un grupo de personas y luego por otro grupo, a mi me suena que no deberían ser las mismas tareas, ya que lógicamente si los roles son distintos las tareas deberían ser distintas (estoy hablando genéricamente).
    Saludos

    Like

  31. Explico un poco mejor cual es la situacion para que quede mas claro. El workflow se inicia en una mesa de entrada que recibe muestras y se la pasa a un laboratorio. Este laboratorio evalua si la muestra es apta, de ser asi la divide enviando una parte a otro laboratorio y haciendo analisis sobre la otra, al finalizar carga los resultados. El siguiente laboratorio repite la tarea (evalua, divide, analisa, ingresa resultados), asi hasta que pasa por un numero variable de laboratorios. Yo intento que cada laboratorio sea un pool de usuarios, asi cualquier usuario del laboratorio puede hacer cualquier tarea del ciclo. En la etada “divide” es donde yo hago un fork que deriva por un lado en “realizar analisis” y por otro en el “evaluar muestra” del siguiente laboratorio.
    Lo hice de esta manera porque las tareas que se realizan en paralelo son las mismas, lo que varia es el laboratorio (segun mi idea, el pool de actores).
    Creo que voy a hacer como decis, no se me ocurre otra manera que darle mas logica a la asignacion y ver si con eso consigo hacer lo que necesito. Aunque por ahora tampoco se me ocurre como seria la logica jajajaa

    Gracias y saludos

    Like

  32. Por como yo entiendo tu problema, tenes un flujo que se ejecuta un numero variable de veces. Por como lo veo yo, deberías tener un flujo mas grande que te indique cuantas veces se van a ejecutar los sub flujos. Para cada flujo vas a tener definidos distintos pools, ya que cada flujo va a ser ejecutado por una unidad de negocio distinta.
    En el caso del fork, deberías tener una variable para cada grupo en cada tarea.
    Saludos

    Like

  33. Antes de que se inicie el primer ciclo, ya esta determinado cuantos ciclos son, que pooles los realizan y en que orden. Lo que falta es “crear” los ciclos, para que los distintos laboratorios puedan realizar los analisis y cargar los resultados en paralelo. Con eso creo que cumplo la primer parte que me decis.
    No entiendo la parte del fork, como que deberia tener una variable para cada grupo? no entiendo esa parte.

    Saludos

    Like

  34. Hola me gustaria saber si es posible personalisar la consola de JBPM, me interesa usar el motor de flujos pero modificar la apariencia de la consola para poder invocarla desde una aplicacion externa y mover un flujo, si pudieras desarrollar un ejercicio sobre esta idea te lo agradeceria mucho

    Like

  35. Hola Cristhian, como estas? Siempre es posible personalizar un proyecto open source. El problema es que debes aprender las tecnologías que el proyecto esta usando. En el caso de jBPM5 están usando GWT y REST services para hacer funcionar la consola. Si tienes ganas de agregar funcionalidad y crees que esa funcionalidad puede ser compartida, te invito a descargarte el código fuente desde github.com/droolsjbpm/jbpm y contribuir con tus extensiones.
    Saludos

    Like

  36. Hola salaboy, te queria preguntar como se podria hacer para resolver o si ya existe algo para estos casos en los procesos jbpm. Tengo una tarea 1 que puede ser ejecutada por grupo Transcriptores, luego el flujo sigue a la tarea 2 donde Revisores deben validar los datos de la tarea 1, en caso de que esta todo bien, el proceso sigue a otra tarea pero si es rechazado en la revision y debe volver a la tarea 1 la cual es realizada por grupo Transcriptores, hay alguna manera de que cuando vuelva atras se recupere quien fue el usuario perteneciente al grupo Transcriptores realizo eso mal y que sea el el que la vuelva a editar? otra cosa, se puede reasigar el actor a esa tarea 1 en caso de que el que se asigno la primera vez no sepa como resolverla? Gracias Hermano, espereando tu respuesta.

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s