DTCloud 工作流

127 阅读2分钟

工作流

工作流是与业务流程相关联的模型,可用于跟踪工序的动态演变过程。
工作流、活动(节点或操作)、转换 通常在 XML 里以 record 定义。
在工作流中处理的单个流程称为工作项。

工作流的开发流程

  • 新建 workflow.xml 视图文件,并在 manifest 中注册。
  • 模型内定义工作流状态以及节点点击事件:用下拉列表保存节点状态,点击相应节点就转换为相应状态
wkf = fields.Selection([ ('节点值', "节点显示内容"), 
('节点值', "显示内容"), 
('节点值', "显示内容"), 
], default='默认节点值')
 
#函数:改变工作流节点为XX节点值
@api.multi
def action_节点值(self): 
self.wkf = '节点值'
......
  • 在工作流所在模型的 form 表单头定义工作流按钮以及工作流状态条,显示工作流:
    工作流在视图中的位置:
views.xml 
<form string="模型的form表单"> 
<header> 
<button name="改变工作流状态所调用的函数名" type="workflow" states="在什么状态下显示该按钮" string="(上图左侧显示按钮显示文字)" class="oe_highlight"/>
<field name="state(数据模型中的状态下拉列表字段)" widget="statusbar" statusbar_visible="draft,confirmed,accepted,rejected(状态列表中可以在状态条显示的部分)"/>
</header> 
...... 
</form>
  • 在 1 中新建的 workflow.xml 文件中,定义工作流,定义 3 中 form 表单头的工作流按钮点击事件,定义工作流转换。
    分为:定义工作流——定义按钮点击事件(根据前面 form 表单中 button 名作为信号,调用模型中的点击函数)——定义节点间的转换(起点/终点,分别引用前面定义的节点点击事件 id)
<dtcloud> 
<data> 
<dtcloud> 
<data> 
 
<!--定义工作流--> 
<record model="workflow" id="wkf_工作流id"> 
<field name="name"></field> 
<field name="osv">数据模型</field> 
<field name="on_create">True</field> 
</record>
 
<!--定义按钮的点击事件--> 
<!--工作流起点--> 
<record model="workflow.activity" id="act_"> 
<field name="name"></field> 
<field name="wkf_id" ref="工作流id"/> 
<field name="flow_start" eval="True"/> 
<field name="kind">function</field>
<field name="action">数据模型中起点状态的点击函数()</field> 
</record>
 
<!--定义中间点--> 
<record model="workflow.activity" id="act_"> 
<field name="name"> <field> 
<field name="wkf_id" ref="wkf_工作流id"/>
<field name="kind">function</field> 
<field name="action">节点函数()</field> 
</record>
 
<!--工作流终点--> 
<record model="workflow.activity" id="act_"> 
<field name="name"></field> 
<field name="wkf_id" ref="wkf_"/> 
<field name="kind">function</field> 
<field name="flow_stop" eval="True"/> 
<field name="action">节点点击函数()</field>
</record> 
 
<!--定义工作流转换动作--> 
<record model="workflow.transition" id="模块名_节点1_to_节点2">
 					<field name="act_from" ref="act_上面节点1id"/> 
<field name="act_to" ref="act_节点2 id"/> 
<field name="signal">btn_节点2(在另一个视图的form表单定义的工作流按钮id)</field>
 					<field name="condition">一个条件或一个boolean字段</field> 
</record> 
 
</data>
</dtcloud> 
</data> 
</dtcloud>
  • 也可以定义工作流根据某些值而自动转换:
<record model="workflow.transition" id="session_auto_"> 
<field name="act_from" ref=""/> 
<field name="act_to" ref=""/> 
<field name="condition">条件表达式</field> 
</record>
<!--1:定义一个服务器动作--> 
<record model="ir.actions.server" id="set_session_to_"> 
<field name="name"></field> 
<field name="model_id" ref=""/> 
<field name="code"> model.search([domain表达式,过滤出需要变化工作流的记录])]).action_节点值()//节点按钮点击事件 </field> 
</record>
 
<!--2:定义一个工作流节点,并指定其点击动作为上面的服务器动作-->
<record model="workflow.activity" id="节点值"> 
<field name="name"></field> 
<field name="wkf_id" ref="工作流"/> 
<field name="flow_start" eval="True"/> 
<field name="kind">dummy</field> 
<field name="action_id" ref="set_session_to_节点值(引用上面的定义好的响应)"/> 
</record>