Andrew,

If I'm understanding you properly, the only major difference between the 
business process workflow (the one I am writing) and the data integration 
workflow you mention is that one requires human interaction, while the 
other is handled by automated systems. Is that fairly accurate? If so, then 
I could see my workflow engine being used for both types of workflows. I 
have well-defined the human interaction of workflows, but never touched on 
the automated aspect, though it was a consideration during the design of 
the engine.

Let me give an example of what I understand an automated workflow to be. 
Say we are running an e-commerce site and we want to create an automated 
workflow for the ordering process. This is how the process should go:

   1. Customer orders something
   2. Payment is processed
   3. Order confirmation email sent to customer
   4. Order is shipped
   5. Shipping confirmation email sent to customer

You could certainly just hardcode the "workflow" of each step, but then 
there's not a lot of flexibility. For example, maybe you want to insert an 
extra step later (i.e. quality control before shipping). You could use the 
workflow engine I'm creating to handle this scenario. Let me explain how:

You would have several parts to your e-commerce site:

   - Main web interface
   - Payment processing thread
   - Email thread for order confirmations
   - Email thread for shipment confirmations

I use the term "thread", but this would be any process or web2py scheduler 
instance that runs in the background waiting for something to do. You would 
have a process waiting for payments to process and processes waiting for 
emails to send. This could potentially be the workflow you would use for 
the ordering and shipping process:

# auth_group 50 = Automated payment processor group
# auth_group 51 = Automated order confirmation email group
# auth_group 52 = Shipping group of people that package the order
# auth_group 53 = Automated shipment confirmation email group

workflow_engine.create_template('Process order',
    Step('Process the payment', dict(group=50)),
    Step('Send order confirmation email', dict(group=51)),
    Step('Package and ship order', dict(group=52)),
    Step('Send shipment confirmation email', dict(group=53))
)

The trick here being that you can assign workflows to groups. So if you 
create a group for each background process, then those processes can 
continually check to see if there are any workflows waiting on them. Once 
they finish their job, they call:

workflow_engine.step_complete(workflow_id, as_group=50) # payment processor 
is finished

Because it's designed to be as general as possible, you can have the best 
of both worlds which this example demonstrates: mixing both human and 
automated workflows into a single workflow.

Does this address you question?

Thanks

Reply via email to