SlideShare ist ein Scribd-Unternehmen logo
1 von 43
Downloaden Sie, um offline zu lesen
Diego Moreno Naharro
                 Universidad Politécnica de Madrid
Departamento de Ingeniería de Sistemas Telemáticos

                             dmoreno@dit.upm.es
   ¿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
       Seguimiento
       Sincronización
       Paso de información

         1           2            3          5
                                  4
    Publicación de un Post. Blog




                                    Aprobado
    Crear Post   Revisión admin                Publicación

                                                Borrado
                                  Rechazado
   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
   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
   Publicación de un Post. Blog
   Edición de documentos. Caso Alfresco
   Gestión de incidencias. Call Center
   Orquestación de servicios. Yahoo Pipes
   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
   Máquina de estados
       Act as state machine plugin
            Tiene varios forks
       Workflow plugin


   Motor de flujos de trabajo (WorkFlow Engines)
       OpenWFEru
   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
   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
   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”
   Callbacks sobre estados
     Enter, after, exit




    state :en_revision,
          :enter => :check_title,
          :after => Proc.new {|post| post.format_body },
          :exit => :tag_post
   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
   Mismos conceptos, distinta sintaxis
       Estados, eventos, callbacks & guards
   Nuevos métodos de acceso:
       Ej. listar de eventos de cada estado
   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
   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
Usuario



Interfaz web   ruote-web       Ruby on Rails




      Motor       ruote        Ruby



               *.xml || *.rb   XML, Ruby
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.
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
Empleado          Encargado                    Empleado


    Petición de vacaciones               Jefe


   participant :boss, :if => quot;${f:boss_should_have_a_look}quot;

    participant :employee
  end
end
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; />
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>
   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
   Hace su trabajo
   Ofrece un API para niveles superiores
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
   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.
   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
   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
   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
   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, 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
¡Gracias!
?? || ##

Weitere ähnliche Inhalte

Ähnlich wie Workflows On Rails

Acceptance testing with Steak and Capybara
Acceptance testing with Steak and CapybaraAcceptance testing with Steak and Capybara
Acceptance testing with Steak and Capybara
Sergio Gil
 

Ähnlich wie Workflows On Rails (20)

Javascript
JavascriptJavascript
Javascript
 
Taller de Capistrano
Taller de CapistranoTaller de Capistrano
Taller de Capistrano
 
DevOps en DEISER: En producción 10 veces más rápido con Atlassian
DevOps en DEISER: En producción 10 veces más rápido con AtlassianDevOps en DEISER: En producción 10 veces más rápido con Atlassian
DevOps en DEISER: En producción 10 veces más rápido con Atlassian
 
Multithreads Programming
Multithreads ProgrammingMultithreads Programming
Multithreads Programming
 
Cucumber: expresando comportamiento en texto plano
Cucumber: expresando comportamiento en texto planoCucumber: expresando comportamiento en texto plano
Cucumber: expresando comportamiento en texto plano
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
 
Tema2a Jsp
Tema2a JspTema2a Jsp
Tema2a Jsp
 
Php Basico
Php BasicoPhp Basico
Php Basico
 
Report
ReportReport
Report
 
About debuggers.help
About debuggers.helpAbout debuggers.help
About debuggers.help
 
Deployer PHP. Presentación para #PHPSevilla
Deployer PHP. Presentación para #PHPSevillaDeployer PHP. Presentación para #PHPSevilla
Deployer PHP. Presentación para #PHPSevilla
 
SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...
SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...
SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
Introduccion Subversion
Introduccion SubversionIntroduccion Subversion
Introduccion Subversion
 
PostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidadPostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidad
 
Acceptance testing with Steak and Capybara
Acceptance testing with Steak and CapybaraAcceptance testing with Steak and Capybara
Acceptance testing with Steak and Capybara
 
Integrando React.js en aplicaciones Symfony (deSymfony 2016)
Integrando React.js en aplicaciones Symfony (deSymfony 2016)Integrando React.js en aplicaciones Symfony (deSymfony 2016)
Integrando React.js en aplicaciones Symfony (deSymfony 2016)
 
Introducción JavaScript
Introducción JavaScriptIntroducción JavaScript
Introducción JavaScript
 
Django
DjangoDjango
Django
 

Kürzlich hochgeladen

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Kürzlich hochgeladen (11)

Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 

Workflows On Rails

  • 1. Diego Moreno Naharro Universidad Politécnica de Madrid Departamento de Ingeniería de Sistemas Telemáticos dmoreno@dit.upm.es
  • 2. ¿Flujos de trabajo? ¿Qué son?  ¿Para qué sirven?  Alternativas en Rails  Ejemplo de aplicación
  • 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. Publicación de un Post. Blog Aprobado Crear Post Revisión admin Publicación Borrado Rechazado
  • 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. 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. 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. 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. Máquina de estados  Act as state machine plugin  Tiene varios forks  Workflow plugin  Motor de flujos de trabajo (WorkFlow Engines)  OpenWFEru
  • 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. 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. 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. Callbacks sobre estados  Enter, after, exit state :en_revision, :enter => :check_title, :after => Proc.new {|post| post.format_body }, :exit => :tag_post
  • 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. Mismos conceptos, distinta sintaxis  Estados, eventos, callbacks & guards  Nuevos métodos de acceso:  Ej. listar de eventos de cada estado
  • 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. 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. Usuario Interfaz web ruote-web Ruby on Rails Motor ruote Ruby *.xml || *.rb XML, Ruby
  • 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. 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. Empleado Encargado Empleado Petición de vacaciones Jefe participant :boss, :if => quot;${f:boss_should_have_a_look}quot; participant :employee end end
  • 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. 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. 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. Hace su trabajo  Ofrece un API para niveles superiores
  • 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. 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.
  • 29.
  • 30. 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
  • 31. 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
  • 32. 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
  • 33. Ruote  Ruote-web  Ruote-fluo  Fluo-can  Fluo-tred  Ruote-rest  Ruote-web2
  • 34. 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
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.