在 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" />
经过以上修改,当用户点击按钮时,状态将会正确更改。