Odoo

迁移定义

迁移的完整 XML 定义格式如下。

<record model="workflow.transition" id="transition_id">
<field name="act_from" ref="activity_id_1"/>
<field name="act_to" ref="activity_id_2"/>
<field name="group_id" ref="groupid"/>
<field name="signal">(...)</field>
<field name="condition">(...)</field>
<field name="trigger_model">(...)</field>
<field name="trigger_expr_id">(...)</field>
</record>
  • act_from:本迁移的起始节点,引用之前定义的 Activity。
  • act_to:本迁移的结束节点,引用之前定义的 Activity。
  • group_id:权限组,表示只有该权限组可以触发本迁移。
  • signal: 触发本迁移的信号,表示,如果系统收到 signal 定义的信号,则触发本迁移。触发信号有三 种方式,

    • 1)最常见的是用户点击视图中的“name = 本处定义的 signal”的 button,此时相当于向系统 发送迁移信号量。系统会根据视图中的对象 id,找到对象关联的 workflow,再找到与 button name 相 同的 signal,触发之。
    • 2)调用 workflow_service 的方法:trg_validate(self, uid, res_type, res_id, signal, cr),此方法表示,触发对象类型 res_type 关联的 workflow 的 signal 信号,工作流实例关联的 对象实例是 res_id。
    • 3)子流程的 signal_send 发出的信号,此种情况前文已说过。
  • condition:迁移的条件,是一段 Python 代码,通常是一个函数调用。当系统收到 signal 中定义的信 号时候,检查此处的条件,条件为真则实际触发迁移。

  • trigger_model 和 trigger_expr_id: 此二字段表示启动一个新工作流实例。trigger_model 定义对象类 型,trigger_expr_id 定义一段 Python 代码,返回 trigger_model 类型的对象 id。此二字段表示,如果 act_from 中的 action 执行完毕,且 condition 条件 OK,则系统中插入一个 trigger_model 类型, trigger_expr_id 返回的对象 id 关联的工作流实例。然后,可以调用 workflow_service 的方法 trg_trigger(self, uid, res_type, res_id, cr)实际执行该工作流。实际使用例子请参考 Sale 模块的工作流 定义 wkf_sale:
    <field name="trigger_model">procurement.order</field>
    <field name="trigger_expr_id">procurement_lines_get()</field>