workflows on rails
Post on 13-Jan-2015
2.763 Views
Preview:
DESCRIPTION
TRANSCRIPT
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 5
4
3
Publicación de un Post. Blog
Revisión adminCrear Post Publicación
Borrado
Aprobado
Rechazado
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
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?
Publicación de un Post. Blog
Edición de documentos. Caso Alfresco
Orquestación de servicios. Yahoo Pipes
Gestión de incidencias. Call Center
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
Máquina de estados
Act as state machine plugin
Tiene varios forks
Workflow plugin
Motor de flujos de trabajo (WorkFlow Engines)
OpenWFEru
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
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
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”
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
*.xml || *.rb
ruote
ruote-web Ruby on Rails
Ruby
XML, Ruby
Motor
Interfaz web
Usuario
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
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
Empleado Encargado Empleado
Jefe
participant :boss, :if => "${f:boss_should_have_a_look}"
participant :employee
end
end
Petición de vacaciones
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
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
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
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
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
UsuarioAplicación
Web
Motor de
workflow
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!
top related