Openerp 如何将Odoo可点击状态栏与工作流链接?
我已经定义了状态操作、按钮和工作流。它们工作得很好,问题是当我试图添加一个可点击的状态栏时,每次我点击状态栏时,它除了改变记录的状态外,实际上什么都做不了 如何将状态栏链接到工作流/操作 model.pyOpenerp 如何将Odoo可点击状态栏与工作流链接?,openerp,odoo,odoo-8,Openerp,Odoo,Odoo 8,我已经定义了状态操作、按钮和工作流。它们工作得很好,问题是当我试图添加一个可点击的状态栏时,每次我点击状态栏时,它除了改变记录的状态外,实际上什么都做不了 如何将状态栏链接到工作流/操作 model.py def action_state_draft(self, cr, uid, ids): self.write(cr, uid, ids, { 'state' : 'draft' }) return True def action_state_confirmed(self, c
def action_state_draft(self, cr, uid, ids):
self.write(cr, uid, ids, { 'state' : 'draft' })
return True
def action_state_confirmed(self, cr, uid, ids):
self.write(cr, uid, ids, { 'state' : 'confirmed' })
return True
def action_state_posted(self, cr, uid, ids):
self.write(cr, uid, ids, { 'state' : 'posted' })
return True
def action_state_cancelled(self, cr, uid, ids):
self.write(cr, uid, ids, { 'state' : 'cancelled' })
return True
def hello_world(self):
print "Hello World!"
def hello_world_second(self):
print "Hello World Second!"
model_view.xml
<header>
<button name="action_state_confirmed" string="Confirm" states="draft" />
<button name="action_state_posted" string="Post" states="confirmed" />
<button name="action_state_cancelled" string="Cancel" states="draft,confirmed,posted" />
<field name="state" widget="statusbar" clickable="True" statusbar_visible="draft,confirmed,posted,cancelled"/>
</header>
model_workflow.xml
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<record id="ig_account_voucher_wkf" model="workflow">
<field name="name">ig.account.voucher.wkf</field>
<field name="osv">ig.account.voucher</field>
<field name="on_create">True</field>
</record>
<record id="act_draft" model="workflow.activity">
<field name="wkf_id" ref="ig_account_voucher_wkf"/>
<field name="name">draft</field>
<field name="flow_start">True</field>
</record>
<record id="act_confirmed" model="workflow.activity">
<field name="wkf_id" ref="ig_account_voucher_wkf"/>
<field name="name">confirmed</field>
<field name="action">
write({'state':'confirmed'})
hello_world()
hello_world_second()
</field>
<field name="kind">function</field>
</record>
<record id="act_posted" model="workflow.activity">
<field name="wkf_id" ref="ig_account_voucher_wkf"/>
<field name="name">posted</field>
<field name="action">write({'state':'posted'})</field>
<field name="kind">function</field>
</record>
<record id="act_posted" model="workflow.activity">
<field name="wkf_id" ref="ig_account_voucher_wkf"/>
<field name="name">cancelled</field>
<field name="action">write({'state':'cancelled'})</field>
<field name="kind">function</field>
<field name="flow_stop">True</field>
</record>
<record id="transition_draft_confirmed" model="workflow.transition">
<field name="act_from" ref="act_draft"/>
<field name="act_to" ref="act_confirmed"/>
<field name="condition">True</field>
<field name="signal">action_state_confirmed</field>
</record>
<record id="transition_confirmed_posted" model="workflow.transition">
<field name="act_from" ref="act_confirmed"/>
<field name="act_to" ref="act_posted"/>
<field name="condition">True</field>
<field name="signal">action_state_posted</field>
</record>
<record id="transition_confirmed_cancelled" model="workflow.transition">
<field name="act_from" ref="act_confirmed"/>
<field name="act_to" ref="act_posted"/>
<field name="condition">True</field>
<field name="signal">action_state_cancelled</field>
</record>
</data>
</openerp>
ig.account.voucher.wkf
会计凭证
真的
草案
真的
证实
写入({'state':'confirmed'})
你好(世界)
你好,世界第二
功能
张贴
写入({'state':'posted'})
功能
取消
写入({'state':'cancelled'})
功能
真的
真的
行动状态确认
真的
行动\状态\已发布
真的
行动\状态\取消
另一个相关的小问题:为什么我们需要工作流而不仅仅是使用按钮和操作?在您的代码中,当您在工作流操作中传递多个方法时,工作流操作中缺少逗号 请先确认是正确的
<record id="act_confirmed" model="workflow.activity">
<field name="wkf_id" ref="ig_account_voucher_wkf"/>
<field name="name">confirmed</field>
<field name="action">
write({'state':'confirmed'}),
hello_world(),
hello_world_second()
</field>
<field name="kind">function</field>
</record>
证实
写入({'state':'confirmed'}),
你好,世界(),
你好,世界第二
功能
你问题的另一个答案是:
为什么需要工作流而不是按钮??
主要目标是将工作流定义为业务流程流
另一个目标是:
我希望这会对您有所帮助。:)不,逗号不重要。请看一下原始的Odoo文件
/opt/Odoo/addons/account/account\u invoice\u workflow.xml
第25-28行。但我仍然无法使状态栏正常工作。但是按钮可以工作。您必须使用xpath将字段替换为状态栏,您可以使用xpath替换该字段并尝试检查againIt是否已经是状态
。看看我上面的代码片段
@ronLőrincz工作流背后的主要原因是在不同阶段管理我们的文档(如报价、销售订单、已付款帐户)因此,我们可以很容易地理解stage上每个文档的流程。更多的是,在Odoo 8.0或更高版本中,其可能会删除所有与工作流相关的逻辑,并将其作为表单视图上的statusbar小部件添加