Openerp 如何将Odoo可点击状态栏与工作流链接?

Openerp 如何将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

我已经定义了状态操作、按钮和工作流。它们工作得很好,问题是当我试图添加一个可点击的状态栏时,每次我点击状态栏时,它除了改变记录的状态外,实际上什么都做不了

如何将状态栏链接到工作流/操作

model.py

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小部件添加