Business Process Management =========================== ($Id$) We start with the definition of a simple process: startActivity --> n01 --> endActivity >>> from cybertools.process.definition import Process, Activity >>> process = Process() >>> n01 = Activity() >>> process.startActivity.add(n01) >>> n02 = Activity() >>> n01.add(n02) Now let's execute the process: >>> execution = process.execute() As there aren't any interactions with the outside world in our process we don't see anything. But we can check if the process instance has reached the process' end activity: >>> execution.currentActivity is n02 True So let's now associate an action handler with the process' activitys: >>> from zope.component import provideAdapter, adapts >>> from zope.interface import implements >>> from cybertools.process.interfaces import IActivity, IActionHandler >>> class DummyHandler(object): ... implements(IActionHandler) ... adapts(IActivity) ... def __init__(self, context): pass ... def handle(self, execution): ... print 'working.' >>> provideAdapter(DummyHandler) >>> execution = process.execute() working. >>> execution.currentActivity is process.startActivity True >>> execution.trigger() working. >>> execution.currentActivity is n01 True >>> execution.trigger() working. >>> execution.currentActivity is n02 True Next we'll use a predefined action handler that creates a work item. As this makes only sense if the action handler can give the outside world access to the work item somehow, we have to subclass this generic, abstract class: >>> workItems = [] >>> from cybertools.process.execution import WorkActionHandler >>> class MyActionHandler(WorkActionHandler): ... def handle(self, execution): ... super(MyActionHandler, self).handle(execution) ... workItems.append(self.workItem) >>> provideAdapter(MyActionHandler) >>> execution = process.execute() Now the process is waiting for somebody to pick up the work item and submit it: >>> execution.currentActivity is process.startActivity True >>> workItem = workItems[0] >>> workItem.done False >>> workItem.submit() >>> execution.currentActivity is n01 True >>> workItem.done False