Openerp 中点击按钮无法更改状态的问题以及解决方案

在 Openerp 中,用户遇到了一个问题:当点击按钮时,无法从当前状态更改为其他状态。用户已经检查了代码,但没有发现错误。

2. 解决方案

仔细检查代码后,发现问题出在 workflow.xml 文件中。在文件中,signal 字段的值不正确。signal 字段的值应该与 Python.py 文件中定义的函数名称一致。

以下是正确的 workflow.xml 文件代码:

<data>
    <!-- Activity -->
    <record id="act_taomoi" model="workflow.activity">
        <field name="wkf_id" ref="wkl_tangluong" />
        <field name="flow_start">True</field>
        <field name="name">taomoi</field>
        <field name="kind">function</field>
        <field name="action">action_taomoi()</field>
    </record>
    <record id="act_choxemxet" model="workflow.activity">
        <field name="wkf_id" ref="wkl_tangluong" />
        <field name="name">choxemxet</field>
        <field name="kind">function</field>
        <field name="action">action_choxemxet()</field>
    </record>
    <record id="act_huy" model="workflow.activity">
        <field name="wkf_id" ref="wkl_tangluong" />
        <field name="name">huy</field>
        <field name="flowstop">True</field>
        <field name="kind">stopall</field>
        <field name="action">action_huy()</field>
    </record>
    <record id="act_chopheduyet" model="workflow.activity">
        <field name="wkf_id" ref="wkl_tangluong" />
        <field name="name">chopheduyet</field>
        <field name="kind">function</field>
        <field name="action">action_chopheduyet()</field>
    </record>
    <!-- Transition -->
    <record model="workflow.transition" id="t1">
        <field name="act_from" ref="act_taomoi" />
        <field name="act_to" ref="act_choxemxet" />
        <field name="signal">salary_dexuatduoctao</field>
    </record>

    <record id="t2" model="workflow.transition">
        <field name="act_from" ref="act_choxemxet" />
        <field name="act_to" ref="act_huy" />
        <field name="signal">salary_huydexuat</field>
    </record>
    <record id="t3" model="workflow.transition">
        <field name="act_from" ref="act_choxemxet" />
        <field name="act_to" ref="act_chopheduyet" />
        <field name="signal">salary_dexuat</field>
    </record>
</data>

在 Python.py 文件中,action_taomoi()、action_choxemxet()、action_huy() 和 action_chopheduyet() 这四个函数都应该被定义。以下是 Python.py 文件的代码示例:

# -*- coding: utf-8 -*-
from openerp import models, fields, api

class Salary(models.Model):
    _name = 'salary'

    name = fields.Char('Name', size=64, required=True)
    state = fields.Selection([('taomoi', 'Tao Moi'),
                               ('choxemxet', 'Cho Xem Xet'),
                               ('huy', 'Huy'),
                               ('chopheduyet', 'Cho Phe Duyet'),
                               ], 'status', readonly=False)

    @api.multi
    def action_taomoi(self):
        self.state = 'choxemxet'

    @api.multi
    def action_choxemxet(self):
        self.state = 'chopheduyet'

    @api.multi
    def action_huy(self):
        self.state = 'huy'

    @api.multi
    def action_chopheduyet(self):
        self.state = 'chopheduyet'

修改了 workflow.xml 文件和 Python.py 文件后,重新启动 Openerp,问题即可解决。

此外,在 view.xml 文件中,按钮的 states 属性值应该与 workflow.xml 文件中定义的状态一致。例如,如果按钮的名称是 “cho xem xet”,那么 states 属性值应该为 “taomoi”。

<button name="salary_dexuatduoctao" string="cho xem xet"
    states="taomoi" />

经过以上修改,当用户点击按钮时,状态将会正确更改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值