• Arnaud Fontaine's avatar
    ERP5Workflow: DC Workflows are now ERP5 objects (!1378). · df85ef46
    Arnaud Fontaine authored
    This also moves all Configurator Workflows in workflow_module to portal_workflow
    (workflow_module was an implementation of Workflows based on ERP5 objects and
    not using DCWorkflow code).
    * Workflows are now defined on on portal_workflow._chains_by_type anymore but,
      as everything else, on the Portal Type itself.
    * portal_workflow can contain and work at the same time with legacy and new
      Workflows (ERP5Type/patches/DCWorkflow.py monkey-patching DCWorkflow classes
      to provide the same API).
    * Existing Workflow Scripts should work as they are and the code can be updated
      later on to take advantage of the new API:
      + With legacy implementation Workflow {Scripts,Transitions,Worklists,States}
        were in a Folder ({scripts,transitions,worklists,states} attribute) but
        all of these are now in the Workflow itself and their IDs are prefixed
        (PropertySheet-style), for example `script_`. Legacy attributes are
        provided in new implementation to call the new API.
      + When calling a Workflow Script, `container` was bound to its parent, namely
        WF.scripts (Folder) and a Workflow Script could call another. Now `container`
        is bound to the WF itself and Workflow Scripts are in a Workflow directly.
        New implementation `scripts` attribute handle such use case.
      + Override portal_workflow.__getattr__ so that a Workflow Script can call
        another one without prefix.
    * Worklist are Predicate: Worklist filter objects based on given criterions and
      thus it makes more sense for a Worklist to be a Predicate (albeit a Predicate
      with only Identity Criterion and nothing else).
      + Criterion Properties:
        * state_variable.
        * local_roles (SECURITY_PARAMETER_ID).
        * Any Workflow Variables with for_catalog == 1.
    erp5_performance_test:testWorkflowPerformance were ran to compare DCWorkflow
    and ERP5Workflow implementations and it seems to be about 4% slower with the
    new implementation (legacy: 7.547, 7.593, 7.618, 7.59, 7.514 and new: 7.842,
    7.723, 7.902, 7.837, 7.875).
    Work done by Wenjie Zheng, Isabelle Vallet, Sebastien Robin and myself.