[Zope3-dev] Workflow
kapil thangavelu
kvthan@wm.edu
Thu, 7 Nov 2002 14:43:16 -0800
On Wednesday 06 November 2002 12:56 pm, Shane Hathaway wrote:
> Florent Guillaume wrote:
> > As a prelude to the work on workflow that will take place at the
> > Sprintathon, and before we hash out the needed interfaces and concepts,
> > I've written a document where I try to explain the different workflow
> > paradigms and look at them with an eye to finding a common ground.
> >
> > It's at:
> >
> > http://dev.zope.org/Wikis/DevSite/Projects/ComponentArchitecture/TryingTo
> >UnifiyWorkflowConcepts
> >
> > Please comment.
>
> Several comments have been posted now, but now something is wrong with
> the wrapping on the page, making it difficult to read.
>
> So I'd like to express my POV again, perhaps a little better this time.
> I think there are really two independent concepts being sorted out, and
> once you separate them, the solution is clearer. The term
> "activity-based workflow" refers to usage of UML activity diagrams. The
> term "entity-based workflow" refers to operating on a single object at a
> time. These two concepts are not in competition with each other at all.
> I think we should abandon them.
i agree, let abandon them. i'm not sure why there is this discussion about
unifying different implementation paradigms?. the real issue imo, is mapping
the wfmc semantic model onto the workflow interfaces, to allow for pluggable
implementations, an engine service that proxies to an implementation and
providing a default implementation for z3. am i missing something?
the wfmc model provides the experience of many real world implementations and
the possibility of interop with other systems.
an excellent intro doc to workflows (discusses mapping petri net
implementation onto wfmc model) is
http://wwwis.win.tue.nl/~wsinwa/jcsc/jcsc.html
that paper is the basis for the workflow engine in openacs, which maps the
petri net model onto oracle/pg. also, the author of that engine expressed
some concerns with his implementation which i think are also relevant
(keeping in mind this is for a completely different system than zope).
"""
# It's too restrictive. In most knowledge worker use cases, you want to be
able to let your employees override the process and do something else when
they need to. Or you can make a mistake and close out a task too early or
take the wrong turn somewhere. You have to be able to go back and change
those things. In some situations you even want to be able to redefine the
process on the fly. The current workflow doesn't allow for any such
flexibility.
# The UI sucks, and it's really hard to use workflow without using the
interface. There should be a clean API that you can use if that's all you
want, and then a clean interface built on top of that, which you can use or
not use as you please.
# Petri net is just too complicated in many cases. There are two possible
approaches: Make pluggable models, so you can use the model of your choice
directly. I think this is the preferred method. The alternative is to have
Petri Net as the solid foundation, and implement the others as two-way
translations between petri nets and the other model. The advantage here is
that your process analysis tools can stay the same, but since we don't really
have any of those, anyway, it's not much use.
"""
basically the things i take away from it are that their should really be some
default wf policies that map onto common needs so we don't overburden
users/developers with complexity and 'confusing jargon'.
full doc at
http://openacs.org/projects/openacs/proposals/workflow-spec
the docs on their implementation are here (some good general wf discussion as
well)
http://openacs.org/doc/acs-workflow/
> In my comment I suggested a new kind of object called diagrams. But
> maybe that's not quite general enough. What we really want is multiple
> types of process definitions. OpenFlow only allows one kind of process
> definition based on an activity diagram. But a state machine, a petri
> net, or a pile of Python code can also be a process definition. So we
> need to define the interface that process definitions support, and it
> must be simple enough to implement in a short Python module.
>
this is a really good point/idea...
> Then we should build a simple workflow engine that uses any kind of
> process definitions. The responsibilities of the workflow engine are to
> store process instances, subscribe to the events that active process
> definitions are interested in, and invoke processing when events occur.
but architecturally this is overly constraining, imo. for example, i'd really
like to store my process instances in an rdb.
what about a workflow engine/service subscribe to wf events and provide
interface implementation that proxies/delegates to registered workflow
implementations that have the freedom to implement interfaces as they wish.
-kapil