43
Diego Moreno Naharro Universidad Politécnica de Madrid Departamento de Ingeniería de Sistemas Telemáticos [email protected]

Workflows On Rails

Embed Size (px)

DESCRIPTION

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.

Citation preview

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!