Workflows On Rails

50 %
50 %
Information about Workflows On Rails
Technology

Published on November 26, 2008

Author: d_moreno

Source: slideshare.net

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.

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! ?? || ##

Add a comment

Related presentations