Download pdf - Workflows On Rails

Transcript
Page 1: Workflows On Rails

Diego Moreno Naharro

Universidad Politécnica de Madrid

Departamento de Ingeniería de Sistemas Telemáticos

[email protected]

Page 2: Workflows On Rails

¿Flujos de trabajo? ¿Qué son?

¿Para qué sirven?

Alternativas en Rails

Ejemplo de aplicación

Page 3: Workflows On Rails

Un flujo de trabajo es una herramienta que gestiona tareas: Orden correlativo

Asignación

Seguimiento

Sincronización

Paso de información

1 2 5

4

3

Page 4: Workflows On Rails

Publicación de un Post. Blog

Revisión adminCrear Post Publicación

Borrado

Aprobado

Rechazado

Page 5: Workflows On Rails

Publicación de un Post. Blog

Edición de documentos. Caso Alfresco

Usuario UsuarioRevisores Revisores

Revisión previa

Creación PublicaciónRevisiónEdición

Descarte

Page 6: Workflows On Rails

Publicación de un Post. Blog

Edición de documentos. Caso Alfresco

Gestión de incidencias. Call Center

ClasificaciónCreación Problema

Solución

Asignación¿Incidencias

similares?

Page 7: Workflows On Rails

Publicación de un Post. Blog

Edición de documentos. Caso Alfresco

Orquestación de servicios. Yahoo Pipes

Gestión de incidencias. Call Center

Page 8: Workflows On Rails

Publicación de un Post. Blog

Edición de documentos. Caso Alfresco

Orquestación de servicios. Yahoo Pipes

Gestión de incidencias. Call Center

Conclusión: Herramienta que aumenta la productividad a través de Mejora de la coordinación entre personas Automatización de tareas

Page 9: Workflows On Rails

Máquina de estados

Act as state machine plugin

Tiene varios forks

Workflow plugin

Motor de flujos de trabajo (WorkFlow Engines)

OpenWFEru

Page 10: Workflows On Rails

Borrador

En revisión

Rechazado

Publicado

Intentar publicar

mejorar

aprobar

rechazar

Crear post

Estados

class Post < ActiveRecord::Base

acts_as_state_machine :initial => :borrador

state :borrador

state :en_revision

state :rechazado

state :publicado

……

end

Page 11: Workflows On Rails

Borrador

En revisión

Rechazado

Publicado

Intentar publicar

mejorar

aprobar

rechazar

Crear post

Estados

Eventos

event :intentar_publicar do

transitions :to => :borrador, :from => :en_revision

end

event :mejorar do

transitions :to => :en_revision, :from => :borrador

end

Page 12: Workflows On Rails

Borrador

En revisión

Rechazado

Publicado

Intentar publicar

mejorar

aprobar

rechazar

Crear post

Estados

Eventos

¡Funciona!

>> pt = Post.create(:title => „prueba‟, :body => @body)

>> pt.status

=> “borrador”

>> pt.publicado?

=> false

>> pt.intentar_publicar!

=> true>> pt.status

=> “en_revision”

Page 13: Workflows On Rails

Callbacks sobre estados

Enter, after, exit

state :en_revision,

:enter => :check_title,

:after => Proc.new {|post| post.format_body },

:exit => :tag_post

Page 14: Workflows On Rails

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

Page 15: Workflows On Rails

Mismos conceptos, distinta sintaxis

Estados, eventos, callbacks & guards

Nuevos métodos de acceso:

Ej. listar de eventos de cada estado

Page 16: Workflows On Rails

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

Page 17: Workflows On Rails

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

Page 18: Workflows On Rails

*.xml || *.rb

ruote

ruote-web Ruby on Rails

Ruby

XML, Ruby

Motor

Interfaz web

Usuario

Page 19: Workflows On Rails

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.

participante participante

participante

participante

Page 20: Workflows On Rails

Empleado Encargado Empleado

Jefe

class VacationRequest0 < OpenWFE::ProcessDefinition

set :v => "employee", :value => "${f:launcher}"

set :f => "from_date", :value => ""

set :f => "to_date", :value => ""

set :f => "reason", :value => ""

sequence do

participant :employee

set :f => "granted", :value => "false"

set :f => "boss_should_have_a_look", :value => "false"

participant :assistant

Petición de vacaciones

Page 21: Workflows On Rails

Empleado Encargado Empleado

Jefe

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

participant :employee

end

end

Petición de vacaciones

Page 22: Workflows On Rails

Empleado Encargado Empleado

Jefe

<process-definition name="vacation_request">

<sequence>

<set variable="employee" value="${f:launcher}" />

<set field="from_date" value="" />

<set field="to_date" value="" />

<set field="reason" value="" />

<participant ref="employee" />

<set field="granted" value="false" />

<set field="boss_should_have_a_look" value="false" />

<participant ref="assistant" />

Petición de vacaciones

Page 23: Workflows On Rails

Empleado Encargado Empleado

Jefe

<if test="${f:boss_should_have_a_look}">

<participant ref="boss" />

</if>

<participant ref="employee" />

</sequence>

</process-definition>

Petición de vacaciones

Page 24: Workflows On Rails

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

Page 25: Workflows On Rails

Hace su trabajo

Ofrece un API para niveles superiores

Page 26: Workflows On Rails

Flujos

Workflowengine

Interfaz web

class CustomParticipant <

OpenWFE::LocalParticipant

def initialize

super()

end

# This is the method called by

# the OpenWFEru engine to hand

# a workitem to this

# participant.

def consume(workitem)

# Tu código

end

end

TwitterSOAP

Custom

Page 27: Workflows On Rails

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.

Page 28: Workflows On Rails
Page 29: Workflows On Rails
Page 30: Workflows On Rails

Usa la gema Sinatra

Recursos: processes / errors / workitems

Interfaz:

Lanzar proceso: POST /processes

Cancelar proceso: DELETE /processes/id

UsuarioAplicación

Web

Motor de

workflow

Page 31: Workflows On Rails

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

Page 32: Workflows On Rails

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

Page 33: Workflows On Rails

Ruote

Ruote-web

Ruote-fluo

Fluo-can

Fluo-tred

Ruote-rest

Ruote-web2

Page 34: Workflows On Rails

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

Page 35: Workflows On Rails
Page 36: Workflows On Rails
Page 37: Workflows On Rails
Page 38: Workflows On Rails
Page 39: Workflows On Rails
Page 40: Workflows On Rails
Page 41: Workflows On Rails
Page 42: Workflows On Rails
Page 43: Workflows On Rails

?? || ##

¡Gracias!