I contacted the maintainer of the project and have contributed a large portion of functionality that makes it easy to define workflows that include people. Here is a sample workflow:
var open = Declare.Step(); var wf = new StatefulWorkflow<SiteVisit>("Site Visit Workflow") .Do(x => x.GatherInformation()) .Define(defineAs: open) .Yield(SiteVisit.States.Open) .Unless(x => x.Validate(), otherwise: open) .Do(x => x.PostVisit()); // And send an object through var visit = new SiteVisit(); wf.Start(visit); // It stops at the Yield, maybe persist it in a database and display a page to the user wf.Start(visit); // extension methods to check if it's still in the workflow if (visit.IsAliveInWorkflow("Site Visit Workflow")) wf.Start(visit);
This workflow is fairly simple and demonstrates how you can create a module for defining workflow and isolate all business logic in data objects (models and view-models work great here). I was initially concerned with the idea of creating conditional goto constructs, but after more thought I decided that this shouldn't be a significant problem as long as workflows stay simple and there is a clear separation from business logic and workflow logic.
There is a lot more to this project - and to the features I contributed. However, I haven't even put forth a good effort in developing the official documentation, so perhaps I'll write about this more after developing the core documentation a little more. I think this is an excellent solution for companies who want to quickly through together workflows without a significant barrier to understanding. I think I will continue developing on ObjectFlow as long as I have something I feel I can add.
Hi
ReplyDeleteI am also looking for a light weight workflow where we can create the workflow but the user is allowed to add users to a workflow step. So that the same page will open for every user that was added. Only when all users have approved the step it will continue to the next step.
You dont have a sample of using Objectflow and how to display a page to the user?