基础知识

用数据文件定义工作流是最简单的方式:工作流定义包括一些流程活动和流程控制。例如:下面是一个包括两个流程活动的顺序工作流的XML定义文件:

<record id="test_workflow" model="workflow">
    <field name="name">test.workflow</field>
    <field name="osv">test.workflow.model</field>
    <field name="on_create">True</field>
</record>

<record id="activity_a" model="workflow.activity">
    <field name="wkf_id" ref="test_workflow"/>
    <field name="flow_start">True</field>
    <field name="name">a</field>
    <field name="kind">function</field>
    <field name="action">print_a()</field>
</record>

<record id="activity_b" model="workflow.activity">
    <field name="wkf_id" ref="test_workflow"/>
    <field name="flow_stop">True</field>
    <field name="name">b</field>
    <field name="kind">function</field>
    <field name="action">print_b()</field>
</record>

<record id="trans_a_b" model="workflow.transition">
    <field name="act_from" ref="activity_a"/>
    <field name="act_to" ref="activity_b"/>
    <field name="signal">signal_goto_b</signal>
</record>

工作流需要定义一个关联实体,通过工作流osv属性设置。所有定义的活动和流转控制都基于该实体来调用。

在上述的示例代码中,"test_workflow"工作流有两个活动,"a" 和 "b",一个流转控制,控制从 "a" 到 "b"。

第一个活动的属性flow_start设置为True,所以当流程初始化以后自动流转到该节点。由于流程的on_create属性设置为True,该流程在指定实体的数据记录创建时初始化流程实例。(其他情况下,流程通过其他方式,例如Python代码来实例化。)

当流程实例化以后,开始进入活动 "a"。该活动是function类型的活动,表示action属性值print_a()test.workflow实体的方法调用(method call)。常规参数cr, uid, ids, context自动传递给该方法。

在活动 "a" 和 "b" 之间的流程流转设定了一个标志(signal),没有任何条件,表示该流程实例在收到signal_goto_b标志后,将立即从活动 "a" 流转到活动 "b",然后处理活动 "b" 的 action 属性值print_b()

results matching ""

    No results matching ""