Diego Moreno Naharro
                 Universidad Politécnica de Madrid
Departamento de Ingeniería de Sistemas Telemáticos...
   ¿Flujos de trabajo? ¿Qué son?

   ¿Para qué sirven?

   Alternativas en Rails

   Ejemplo de aplicación
   Un flujo de trabajo es una herramienta que
    gestiona tareas:
       Orden correlativo
       Asignación
       S...
    Publicación de un Post. Blog




                                    Aprobado
    Crear Post   Revisión admin        ...
   Publicación de un Post. Blog
      Edición de documentos. Caso Alfresco




Usuario    Revisores              Usuario...
   Publicación de un Post. Blog
      Edición de documentos. Caso Alfresco
      Gestión de incidencias. Call Center


...
   Publicación de un Post. Blog
   Edición de documentos. Caso Alfresco
   Gestión de incidencias. Call Center
   Orqu...
   Publicación de un Post. Blog
   Edición de documentos. Caso Alfresco
   Gestión de incidencias. Call Center
   Orqu...
   Máquina de estados
       Act as state machine plugin
            Tiene varios forks
       Workflow plugin


   M...
   Estados
                                                 Intentar
                                                 pub...
   Estados
                                             Intentar

   Eventos          Crear post
                       ...
   Estados
                                                 Intentar

   Eventos              Crear post
               ...
   Callbacks sobre estados
     Enter, after, exit




    state :en_revision,
          :enter => :check_title,
       ...
   Callbacks sobre estados
     Enter, after, exit

   Guarding transitions sobre eventos


    event :aprobar do
     ...
   Mismos conceptos, distinta sintaxis
       Estados, eventos, callbacks & guards
   Nuevos métodos de acceso:
      ...
   Motor de flujos de trabajo open source
   Historia
     Empezó como OpenWFEja en 2001
     Paso a OpenWFEru en 2006...
   Programar lo menos posible
     Elección de ruby
     Definición de procesos fuera del programa

   Lenguaje de def...
Usuario



Interfaz web   ruote-web       Ruby on Rails




      Motor       ruote        Ruby



               *.xml ||...
participante                   participante        participante

                                   participante



   Wo...
Empleado         Encargado                      Empleado


  Petición de vacaciones                 Jefe


class VacationR...
Empleado          Encargado                    Empleado


    Petición de vacaciones               Jefe


   participant :...
Empleado          Encargado                     Empleado


    Petición de vacaciones                Jefe


<process-defin...
Empleado          Encargado                    Empleado


    Petición de vacaciones               Jefe


   <if test=quot...
   Expresiones
       4 expresiones básicas: process-definition, participant,
        secuence, concurrence.
       Buc...
   Hace su trabajo
   Ofrece un API para niveles superiores
class CustomParticipant <
                         OpenWFE::LocalParticipant

                          def initialize
Int...
   Es una librería JavaScript
   fluo-can: dibuja definiciones de procesos
   fluo-tred: edición online de definiciones...
   Usa la gema Sinatra
   Recursos: processes / errors / workitems
   Interfaz:
     Lanzar proceso: POST /processes
 ...
   Sencilla demostración de lo que se puede hacer
    con ruote
       Demo online: http://difference.openwfe.org:3000/
...
   Mejoras:
       RESTFul
         RESTFul Authtentication
         Interfaz REST para el motor (XML/JSON/Atom)

    ...
   Ruote
   Ruote-web
   Ruote-fluo
     Fluo-can
     Fluo-tred

   Ruote-rest
   Ruote-web2
   Plataforma de colaboración para desarrolladores
       RESTFul
       “cajitas propias”: Correo electrónico, notific...
¡Gracias!
?? || ##
Workflows On Rails
Workflows On Rails
Workflows On Rails
Workflows On Rails
Workflows On Rails
Workflows On Rails
Workflows On Rails
Workflows On Rails
Workflows On Rails
Workflows On Rails
Upcoming SlideShare
Loading in …5
×

Workflows On Rails

3,083 views

Published on

Visión sobre los flujos de trabajo (workflows) desde el framework de desarrollo Ruby On Rails. Presentación realizada en las terceras conferencias hispanas de ruby on rails.

Published in: Technology
  • Be the first to comment

Workflows On Rails

  1. 1. Diego Moreno Naharro Universidad Politécnica de Madrid Departamento de Ingeniería de Sistemas Telemáticos dmoreno@dit.upm.es
  2. 2.  ¿Flujos de trabajo? ¿Qué son?  ¿Para qué sirven?  Alternativas en Rails  Ejemplo de aplicación
  3. 3.  Un flujo de trabajo es una herramienta que gestiona tareas:  Orden correlativo  Asignación  Seguimiento  Sincronización  Paso de información 1 2 3 5 4
  4. 4.  Publicación de un Post. Blog Aprobado Crear Post Revisión admin Publicación Borrado Rechazado
  5. 5.  Publicación de un Post. Blog  Edición de documentos. Caso Alfresco Usuario Revisores Usuario Revisores Revisión Creación Edición Revisión Publicación previa Descarte
  6. 6.  Publicación de un Post. Blog  Edición de documentos. Caso Alfresco  Gestión de incidencias. Call Center ¿Incidencias Creación Clasificación Asignación Problema similares? Solución
  7. 7.  Publicación de un Post. Blog  Edición de documentos. Caso Alfresco  Gestión de incidencias. Call Center  Orquestación de servicios. Yahoo Pipes
  8. 8.  Publicación de un Post. Blog  Edición de documentos. Caso Alfresco  Gestión de incidencias. Call Center  Orquestación de servicios. Yahoo Pipes  Conclusión: Herramienta que aumenta la productividad a través de  Mejora de la coordinación entre personas  Automatización de tareas
  9. 9.  Máquina de estados  Act as state machine plugin  Tiene varios forks  Workflow plugin  Motor de flujos de trabajo (WorkFlow Engines)  OpenWFEru
  10. 10.  Estados Intentar publicar En revisión aprobar Crear post Borrador mejorar rechazar Publicado Rechazado class Post < ActiveRecord::Base acts_as_state_machine :initial => :borrador state :borrador state :en_revision state :rechazado state :publicado …… end
  11. 11.  Estados Intentar  Eventos Crear post publicar En revisión aprobar Borrador mejorar rechazar Publicado Rechazado event :intentar_publicar do transitions :to => :borrador, :from => :en_revision end event :mejorar do transitions :to => :en_revision, :from => :borrador end
  12. 12.  Estados Intentar  Eventos Crear post publicar En revisión aprobar  ¡Funciona! Borrador mejorar rechazar Publicado Rechazado >> pt = Post.create(:title => „prueba‟, :body => @body) >> pt.status => “borrador” >> pt.publicado? => false >> pt.intentar_publicar! => true >> pt.status => “en_revision”
  13. 13.  Callbacks sobre estados  Enter, after, exit state :en_revision, :enter => :check_title, :after => Proc.new {|post| post.format_body }, :exit => :tag_post
  14. 14.  Callbacks sobre estados  Enter, after, exit  Guarding transitions sobre eventos event :aprobar do transitions :to => :publicado, :from => :en_revision, :guard => Proc.new {|post| post.right_formated?} end
  15. 15.  Mismos conceptos, distinta sintaxis  Estados, eventos, callbacks & guards  Nuevos métodos de acceso:  Ej. listar de eventos de cada estado
  16. 16.  Motor de flujos de trabajo open source  Historia  Empezó como OpenWFEja en 2001  Paso a OpenWFEru en 2006 (John Mettraux)  Disponible como plugin y gema  Nombre de batalla: ruote  Subproyecto: ruote-web
  17. 17.  Programar lo menos posible  Elección de ruby  Definición de procesos fuera del programa  Lenguaje de definición  Basado en XML  Más sencillo que XPDL y BPEL
  18. 18. Usuario Interfaz web ruote-web Ruby on Rails Motor ruote Ruby *.xml || *.rb XML, Ruby
  19. 19. participante participante participante participante  Workitems  Participantes  Con Interacción humana  Usuarios y roles.  Sin interacción humana (automáticas)  Escribir a archivo, envíar un correo, llamada SOAP, mensaje twitter, envío AtomPub.
  20. 20. Empleado Encargado Empleado Petición de vacaciones Jefe class VacationRequest0 < OpenWFE::ProcessDefinition set :v => quot;employeequot;, :value => quot;${f:launcher}quot; set :f => quot;from_datequot;, :value => quot;quot; set :f => quot;to_datequot;, :value => quot;quot; set :f => quot;reasonquot;, :value => quot;quot; sequence do participant :employee set :f => quot;grantedquot;, :value => quot;falsequot; set :f => quot;boss_should_have_a_lookquot;, :value => quot;falsequot; participant :assistant
  21. 21. Empleado Encargado Empleado Petición de vacaciones Jefe participant :boss, :if => quot;${f:boss_should_have_a_look}quot; participant :employee end end
  22. 22. Empleado Encargado Empleado Petición de vacaciones Jefe <process-definition name=quot;vacation_requestquot;> <sequence> <set variable=quot;employeequot; value=quot;${f:launcher}quot; /> <set field=quot;from_datequot; value=quot;quot; /> <set field=quot;to_datequot; value=quot;quot; /> <set field=quot;reasonquot; value=quot;quot; /> <participant ref=quot;employeequot; /> <set field=quot;grantedquot; value=quot;falsequot; /> <set field=quot;boss_should_have_a_lookquot; value=quot;falsequot; /> <participant ref=quot;assistantquot; />
  23. 23. Empleado Encargado Empleado Petición de vacaciones Jefe <if test=quot;${f:boss_should_have_a_look}quot;> <participant ref=quot;bossquot; /> </if> <participant ref=quot;employeequot; /> </sequence> </process-definition>
  24. 24.  Expresiones  4 expresiones básicas: process-definition, participant, secuence, concurrence.  Bucles: while, loop.  Llamadas a subprocesos: subprocess.  Control de hilos: sleep, wait.  Lenguaje conciso  Sin ruido de “posición de caja y flecha”  Cumple los principales patrones de los flujos de trabajo  http://www.workflowpatterns.com
  25. 25.  Hace su trabajo  Ofrece un API para niveles superiores
  26. 26. class CustomParticipant < OpenWFE::LocalParticipant def initialize Interfaz web super() end # This is the method called by Twitter # the OpenWFEru engine to hand Workflow # a workitem to this SOAP engine Custom # participant. def consume(workitem) # Tu código end end Flujos
  27. 27.  Es una librería JavaScript  fluo-can: dibuja definiciones de procesos  fluo-tred: edición online de definiciones de procesos  Una opción más además de: XML y Ruby.
  28. 28.  Usa la gema Sinatra  Recursos: processes / errors / workitems  Interfaz:  Lanzar proceso: POST /processes  Cancelar proceso: DELETE /processes/id Motor de Aplicación Usuario workflow Web
  29. 29.  Sencilla demostración de lo que se puede hacer con ruote  Demo online: http://difference.openwfe.org:3000/  Permite:  Gestión de usuarios  Subir y lanzar procesos  Uso de formularios para pasar de tarea  Edición parcial de procesos al vuelo  Carencias:  Sin interfaz REST  Filosofía Rails 1.2
  30. 30.  Mejoras:  RESTFul  RESTFul Authtentication  Interfaz REST para el motor (XML/JSON/Atom)  Mejoras en la edición al vuelo  OpenID y OAuth  Primera beta: noviembre 2008
  31. 31.  Ruote  Ruote-web  Ruote-fluo  Fluo-can  Fluo-tred  Ruote-rest  Ruote-web2
  32. 32.  Plataforma de colaboración para desarrolladores  RESTFul  “cajitas propias”: Correo electrónico, notificaciones, eventos  Extensión del lenguaje para generación dinámica de formularios  Representación Atom de los recursos  Cliente Flex  Futuro: Internacionalización, editor gráfico de flujos  ¡Demo! http://demo:3000
  33. 33. ¡Gracias! ?? || ##

×