Most Powerful Open Source ERP

How To Use Delivery Causality Workflow

How To showing how to use delivery_causality_workflow for another portal type.
  • Last Update:2016-09-07
  • Version:001
  • Language:en

After r23647 (2008-09-16), one 'delivery_causality_workflow' can be used for various portal types.

Table of Contents


We provide a script and External method that rename workflow name in workflow history on existing documents.

To use delivery_causality_workflow for another portal type, you need the following 'Type-based Script' (like SalePackingList_getBuilderList).


   returns the list of delivery builders that creates this portal type's document.


   returns the reference of the rule that should be applied to this portal type. If no applied rule is required, return None.

a script and a external method for migrating *_causality_workflow

Save the following as 'External Method' and register as 'mergeCausalityWorkflowHistory'.

Toggle line numbers
   1 from Products.ERP5Type.patches.WorkflowTool import WorkflowHistoryList
   3 def mergeCausalityWorkflowHistory(self):
   4   wf_list = []
   5   workflow_history = getattr(self, 'workflow_history', None)
   6   if workflow_history is None:
   7     return 'no history'
   8   for k, v in workflow_history.items():
   9     if k.endswith('_causality_workflow'):
  10       wf_list.extend(v)
  11       del(self.workflow_history[k])
  12   wf_list.sort(key=lambda x:x['time'])
  13   if len(wf_list):
  14     self.workflow_history['delivery_causality_workflow'] = \
  15       WorkflowHistoryList(wf_list)
  16   return 'done'
Toggle line numbers from Products.ERP5Type.patches.WorkflowTool import WorkflowHistoryList def mergeCausalityWorkflowHistory(self): wf_list = [] workflow_history = getattr(self, 'workflow_history', None) if workflow_history is None: return 'no history' for k, v in workflow_history.items(): if k.endswith('_causality_workflow'): wf_list.extend(v) del(self.workflow_history[k]) wf_list.sort(key=lambda x:x['time']) if len(wf_list): self.workflow_history['delivery_causality_workflow'] = \ WorkflowHistoryList(wf_list) return 'done'

Save the following as 'Script (Python)'. Please modify portal_type list according to your ERP5 instance. Then invoke it to migrate all documents that now use delivery_causality_workflow. You need to restart ERP5 after this migration.

Toggle line numbers
   1 for i in context.getPortalObject().portal_catalog(
   2   portal_type=('Internal Packing List',
   3                'Pay Sheet Transaction',
   4                'Production Packing List',
   5                'Production Report',
   6                'Purchase Invoice Transaction',
   7                'Purchase Packing List',
   8                'Sale Invoice Transaction',
   9                'Sale Packing List',
  10                'Task Report',
  11                ), limit=None):
  12   i.activate(priority=4).mergeCausalityWorkflowHistory()
  13   print i.getPath()
  14 return printed

Toggle line numbers for i in context.getPortalObject().portal_catalog( portal_type=('Internal Packing List', 'Pay Sheet Transaction', 'Production Packing List', 'Production Report', 'Purchase Invoice Transaction', 'Purchase Packing List', 'Sale Invoice Transaction', 'Sale Packing List', 'Task Report', ), limit=None): i.activate(priority=4).mergeCausalityWorkflowHistory() print i.getPath() return printed

Related Articles