首先创建一个demo
文件结构如下:
其中models/models.py:
class workflow_demo(models.Model):
_name = 'workflow_demo.workflow_demo'
WORKFLOW_STATE_SELECTION = [
('init', '初始'),
('start', '开始'),
('confirm', '确认'),
('complete', '完成'),
]
name = fields.Char(string="姓名")
state = fields.Selection(WORKFLOW_STATE_SELECTION, default='init', string="状态", readonly=True)
# 注意使用新版本定义方法是,需要添加装饰器@api.one/@api.multi
# 将state 置于开始状态
@api.one
def do_start(self):
print "------------self.state = 'start'"
self.state = 'start'
return True
# 将state 置于确认状态
@api.one
def do_confirm(self):
print "------------self.state = 'confirm'"
self.state = 'confirm'
return True
# 将state 置于完成状态
@api.one
def do_complete(self):
print "------------self.state = 'complete'"
self.state = 'complete'
return True
views创建 (workflow_view.xml)
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<!-- form 视图-->
<record id="workflow_demo_form_view" model="ir.ui.view">
<field name="name">Workflow</field>
<field name="type">form</field>
<field name="model">workflow_demo.workflow_demo</field>
<field name="arch" type="xml">
<form string="Workflow单">
<!-- workflow 声明-->
<!-- 添加header标签用来显示workflow中的按钮-->
<header>
<!-- 首先指明button的type为workflow类型 -->
<!-- name 对应于workflow.transition中的signal-->
<!-- states 属性用来控制button显示隐藏,例如states="init",当state属性为init时,这个button显示,否则不显示 -->
<button name="workflow_start" states="init" string="开始