= !BluePrint: WORKFLOW SUPPORT = [[TOC]] == Introduction == The Blueprint outlines the improvement of Workflow Support for Sahana Eden i.e to develop a engine that can generate workflows for user of Sahana Eden.A workflow consists of a sequence of connected steps which are typically to be accomplished in a certain order. To accomplish this we will need a Workflow Engine,which manages workflow configuration, tracks and restores status of user tasks,provides the "next" options according to pre-defined conditions, and invokes the respective methods. === Target Problem === Currently in Eden we realize if a user has successfully completed a CRUD action, he's forwarded to the next page.[[BR]] The main problem with that is that the "next page" is hardcoded and doesn't adapt to the actual user-task - it connects always the same steps in always the same way - unconditionally.[[BR]] So to overcome such problem we need a workflow Engine that can connects the steps, defined in the configuration and then perform different task accordingly.[[BR]] == Stakeholders == * '''End Users''' - Users of Sahana Eden will be benefited the most with Workflow Support as it help them to complete task quickly. * '''Developers''' - With the help of workflow engine, developers of sahana eden can easily create a workflow for different modules. == User Stories == * As an end user, I want a workflow to guide me and help me through different resources available in Sahana Eden. * To take a Workflow User will click on the Workflow Button * Then he will first step and as he will complete his task. * He will be then redirected to next step. * The workflow will end when he complete all the steps. * The User can end the workflow at any time * And may be will have a option to save the progress also * As a developer, I want a Workflow engine that can easily create Workflow for me by accepting some simple data. * Developer will be able to easily define the configuration of the Workflow Engine. * Which will be converted into Workflows by the Workflow Engine. == Requirements == === Functional === * Workflow should easy to configure. * Workflow thus generated should have the ability to adapt changes as the configuration defined to Engine changes.. * Workflows should provide full access control to the user, they can go back, skip steps and quit at any point. * Workflow should support decision(branches) Ex. they will ask user to choose from option A or option B to proceed further. * Workflow should track the audit trails i.e keeping the record of the running processes as they unfold, so that users can come back to the same point where they left off. * Allow the user to choose the route, e.g. from a menu of user tasks * These workflow should be easily available and accessible to the user after successful login. == Design == === Flow Diagram === [[Image(Workflow flow dia.png)]] === Wireframes === This is what user will see during a workflow. [[BR]] All the action button here will will contain the workflow id (wf_id). [[BR]] A bar above will track the progress of the user. [[BR]] There will be a default Exit action button on each page which will quite the workflow. [[BR]] [[BR]] [[Image(Wmockup1.png)]] [[BR]] If user navigates away, he will be shown a return action button and cancel action button. [[BR]] [[BR]] [[Image(Wmockup2.png)]] [[BR]] Further in future we will use the workflow data to show different menus in the workflow nodes. [[BR]] Here, this menu show the selected items from previous nodes. [[BR]] [[BR]] [[Image(Wmockup3.png)]] [[BR]] === Workflows === ==== As Developer ==== * Developers will have to configure the workflows * All configuration will be placed in private/template//default * The configuration pattern is going to be very easy to define a configuration pattern first one need to import S3WorkflowNode class * Now Each node will be defined something like S3WorkflowNode(“req”,”req”,”create”) * And full workflow can be defined like {{{ class S3WorkflowConfig(object): def eventmanagemant(self): N = S3Workflow().node Exit = S3ExitNode return N("create incident").handle("event", "incident") & \ ( N("create events ").handle("event", "event", "create") | \ N("create project").handle("project", "project","create") )& \ N("create volunteer").handle("vol", "volunteer","create") & Exit()) }}} * Here ‘&’ depict that the next node is a necessary or required node and ‘|’ depict that next node is a optional or a choice node. * Exit(..) tells the workflow engine to end workflow here * Developer will be free to configure prep and postp for each node. * this will be added something like this - {{{ N("create incident").handle("event","incident",prep,postp) }}} === Technologies === == Implementation == Currently the project is under development and we have set following Goals Goals - * Configuration of event handlers (nodes) in a workflow * Storing and retrieving of workflow instances * Mapping of instance status + current event to a certain node * Interface between workflow engine (=event manager) and workflow nodes (=event handler) * Interface between nodes and "actions" (=S3Methods?) * Workflow widgets (=widgets for users to perform workflow actions), and how to put them into a page For more detail please follow this page - [[http://eden.sahanafoundation.org/wiki/Event/2013/GSoC/WorkflowSupport | Workflow Support(Gsoc 2013 )]]