Odoo v11移除工作流原因及Odoo10-11工作流适配咨询
Odoo 10 vs Odoo 11 工作流差异及迁移方案
嘿,刚接触Odoo 11就碰到工作流的坑,太能理解你的郁闷了——Odoo 11对工作流系统做了彻底的重构,旧的工作流引擎直接被移除了,这就是你模块跑不起来的核心原因。下面给你拆解清楚差异和修改方向:
核心差异:旧工作流引擎被完全废弃
Odoo 10及之前的工作流是基于<workflow>、<activity>、<transition>这些XML标签定义的一套独立引擎,但从Odoo 11开始,这套系统被彻底砍掉,官方转而主推状态字段+方法动作+自动化规则的组合来管理业务流程。
具体需要修改的点(肯定要改XML和Python代码)
废弃的XML标签:
你原来写在workflow.xml里的所有<workflow>、<activity>、<transition>、<signal>标签在Odoo 11里完全失效,这些文件直接可以删掉或者重写。状态管理从工作流转为模型字段:
原来工作流控制的记录状态(比如草稿、确认、完成),现在要直接在对应模型里定义一个selection类型的字段:state = fields.Selection( [('draft', 'Draft'), ('confirmed', 'Confirmed'), ('done', 'Done')], string='Status', default='draft', tracking=True )工作流流转替换为Python方法+视图按钮:
原来的工作流信号触发(比如点击按钮发送confirm信号触发流转),现在要换成:- 在模型里写对应的方法,负责切换状态+处理业务逻辑:
def action_confirm(self): for rec in self: rec.write({'state': 'confirmed'}) # 这里加入原来工作流活动里的逻辑,比如创建关联单据、发送邮件 rec.send_confirmation_email() - 在视图XML里添加绑定该方法的按钮:
<button name="action_confirm" string="Confirm" type="object" states="draft" class="oe_highlight" />
- 在模型里写对应的方法,负责切换状态+处理业务逻辑:
自动流转/定时触发的替代方案:
如果原来的工作流有自动触发的规则(比如满足某条件自动流转、定时执行),现在可以用Odoo 11的**自动化动作(Automated Actions)**来实现:- 路径:
Settings > Technical > Automation > Automated Actions - 可以配置基于字段值变化、定时触发,执行服务器动作(比如调用模型方法、更新字段)
- 路径:
简单迁移示例对比
Odoo 10 旧工作流(workflow.xml)
<workflow id="sale_order_workflow" model="sale.order"> <activity id="draft" name="Quotation" initial="True" /> <activity id="confirmed" name="Confirmed" /> <transition id="draft_to_confirmed" src="draft" dest="confirmed" signal="order_confirm" /> </workflow>
Odoo 11 迁移后实现
- 模型添加状态字段+方法:
class SaleOrder(models.Model): _inherit = 'sale.order' def action_confirm(self): res = super(SaleOrder, self).action_confirm() # 这里加入自定义逻辑,比如原来工作流里的额外操作 return res
- 视图添加按钮(如果原有视图没有的话):
<record id="view_sale_order_form_inherit" model="ir.ui.view"> <field name="name">sale.order.form.inherit</field> <field name="model">sale.order</field> <field name="inherit_id" ref="sale.view_order_form"/> <field name="arch" type="xml"> <!-- 若需要自定义按钮位置,可在这里调整 --> <button name="action_confirm" position="after"> <button name="action_custom" string="Custom Action" type="object" states="confirmed"/> </button> </field> </record>
总结一下:你需要把原来基于工作流引擎的逻辑,拆解成「状态字段」+「方法动作」+「视图按钮/自动化规则」的组合,workflow.xml肯定要废弃重写,同时补充对应的Python方法和视图调整。
内容的提问来源于stack exchange,提问作者Muhsin k
相关产品推荐
相关产品推荐

