Este documento describe los flujos de trabajo y la herramienta de código abierto Ruote para modelar y ejecutar flujos de trabajo. Un flujo de trabajo es una herramienta que gestiona tareas a través de un orden correlativo, asignación, seguimiento y paso de información. Ruote permite definir flujos de trabajo mediante XML o Ruby y ejecutarlos, y también incluye interfaces web para gestionarlos.
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
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
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
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