Version 17 (modified by 11 years ago) ( diff ) | ,
---|
BluePrint: WORKFLOW SUPPORT
Table of Contents
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.
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.
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.
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
Data Model
Holds the workflow current status, data , user id etc. The data model can be found in modules/s3db/workflow.py.
Table name--> workflow_status.
Field Name | Purpose | Datatype/table |
User_id | The user id of the user who started the workflow | FK referenced from auth.user_id (integer) |
Status | The current status of the workflow | string |
Data | The workflow data(these can be json serialised objects) | json |
Name | The workflow name | string |
s3.meta_fields() | metadata | |
uuid (In s3.meta_fields()) | unique id to identify each workflow | string |
Flow Diagram
Developer Perspective
User Perspective
Wireframes
This is what user will see during a workflow.
All the action button here will will contain the workflow id (wf_id).
A bar above will track the progress of the user.
There will be a default Exit action button on each page which will quite the workflow.
If user navigates away, he will be shown a return action button and cancel action button.
Further in future we will use the workflow data to show different menus in the workflow nodes.
Here, this menu show the selected items from previous nodes.
Workflows
Configure Workflows
- Developers will have to configure the workflows
- All configuration will be placed in private/template/<module-name>/default
- The configuration pattern is going to be very easy to define a configuration pattern first one need to import S3WorkflowNode class
- Each node will be defined something like N("status name").handle(next_status = "next status name", controller = "org", function = "organization", args = "create")
- Here
.handle(next_status = "status name",args = "create", controller = "org", function = "organization")
will contain the action that will update the current node's status to the next sataus i.e only after clicking on this particular action user will be able to achieve the next node. - All option that handle can take for now are -
- status - current status of the node
- controller - controller
- function - function
- args - node action args
- http - http method for the action
- next_status - next status that the node should achieve
- And full workflow can be defined like
class S3WorkflowConfig(object): def orgmanagement(self): N = S3Workflow Exit = S3WorkflowExitNode s3db = current.s3db return N("new").handle(controller = "org", function = "organisation", args = "create", next_status = "add organisation get", http = "GET") & \ N("add organisation get").handle(controller = "org", function = "organisation", args = "create", next_status = "add organisation post", http = "POST") & \ N("add organisation post").handle(controller = "org", function = "office", args = [1,"update"], next_status = "add office")\ .handle(controller = "org", function = "facility", next_status = "add facility", postp = postp) & \ ( N("add office").handle(controller = "hrm", function = "staff", args = "create", next_status = "add staff") | \ N("add facility").handle(controller = "hrm", function = "staff", args = "create", next_status = "add staff") ) & \ 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().handle(status = "create 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 - Workflow Support(Gsoc 2013 )
Attachments (5)
- Wmockup1.png (21.7 KB ) - added by 11 years ago.
- Wmockup2.png (22.7 KB ) - added by 11 years ago.
- Wmockup3.png (30.3 KB ) - added by 11 years ago.
- Workflow flow dia .png (39.6 KB ) - added by 11 years ago.
- Workflow user flow dia.png (35.7 KB ) - added by 11 years ago.
Download all attachments as: .zip