Just wanted to give an update on this. I'm working on the workflow engine nearly every day. Workflow engines are complicated things with lots of pitfalls that need to be taken into account. Having said that, I am getting closer to completing it.
What works: - Templates - Creating workflows on-the-fly - Serial and parallel steps (wait on more than one user/group at a time) - Due date calculation taking schedules, holidays, etc into account - Simple flow of a workflow (i.e. every step is completed successfully, without issue) - Full delta auditing with support for writing audit logs to another DAL instance - Triggers (when someone does something to a workflow, some code can be executed) What needs to be finished: - Step rejections (someone noticed a problem created in a previous step and wants to send it back to be corrected) - Workflow monitors (users that aren't currently involved with the workflow, but want to monitor the workflow's progress) - Workflow comments (have rejections and other comments on the workflow been addressed) - Workflow check-list (high-level workflow objectives, created and managed by users, basically just meta-data) - Documentation (API and User Guide) Most of the functionality in the "needs to be finished" list has been written, but not tested. The engine is about 1500 lines of code right now, which includes about 350 lines of tests. One of my main goals has been to write a test suite that tests as many scenarios as possible. Writing a user guide with example usage will come after the engine has been accepted in web2py. I want to make sure the API doesn't need changing before I start writing actual documentation. I started writing this engine because I needed to replace a proprietary engine I created in C# several years ago that has seen years of production use. Unfortunately, the old engine lacks a lot of features (parallel steps, monitors, comments, check-lists, auditing, etc) and is tied to a single specific object. I wanted a workflow engine that could attach a workflow to just about anything. I also wanted it to have better features, cleaner code, and be easier to use. Hopefully, I will continue to make excellent progress on it and have something to submit for approval soon. I'll keep you posted!