Odoo - 如何根据现场条件切换工作流程?
Odoo - How can i switch workflow based on a field condition?
我有两个 'state' 字段应用于同一模型的两个不同工作流程,我想根据字段值在它们之间切换。
我能做到吗?
提前致谢。
[编辑]
文件.py
branch1 = fields.Selection([
('state1', 'State 1'),
('state2', 'State 2'),
]
)
branch2 = fields.Selection([
('b2_state1', 'State 1'),
('b2_state2', 'State 2'),
]
)
wkf.xml
我对两个分支使用相同的状态和转换方法,显然使用适当的字段名称,我在此处将其修改为 post。
定义
<record model="workflow" id="wkf_branch1">
<field name="name">Branch 1</field>
<field name="osv">model.name</field>
<field name="on_create">True</field>
</record>
<record model="workflow" id="wkf_branch2">
<field name="name">Branch 2</field>
<field name="osv">model.name</field>
<field name="on_create">True</field>
</record>
州
<record model="ir.actions.server" id="set_model_to_state2">
<field name="name">Set Model to State2</field>
<field name="model_id" ref="model_name"/>
<field name="code">
model.search([('id', 'in', context['active_ids'])]).function()
</field>
</record>
<record model="workflow.activity" id="state1">
<field name="name">State 1</field>
<field name="wkf_id" ref="wkf_branch1"/>
<field name="flow_start" eval="True"/>
<field name="kind">dummy</field>
<field name="action"></field>
<field name="action_id" ref="set_model_to_state2"/>
</record>
.....
分支 2 也是如此
转场
<record model="workflow.transition" id="model_state1_to_state2">
<field name="act_from" ref="state1"/>
<field name="act_to" ref="state2"/>
<field name="signal">state2</field>
</record>
.....
分支 2 也是如此
view.xml
<header>
<!-- FORWARD BUTTONS -->
<button name="state1" type="workflow"
string="Reset to state1"
states="state2"/>
<button name="state2" type="workflow"
string="State 2" states="state1"/>
<button name="b2_state1" type="workflow"
string="Reset to State1"
states="b2_state2"/>
<button name="b2_state2" type="workflow"
string="State 2"
states="state1"/>
<field name="branch1" widget="statusbar"
attrs="{'invisible': [('type', '=', 'certain_type')]}"/>
<field name="branch2" widget="statusbar"
attrs="{'invisible': [('type', 'in', ['other_type1', 'other_type2'])]}"/>
</header>
所以问题是:
- 我可以根据 'attrs' 属性中的条件将 'branch1' 的状态栏隐藏在 view.xml 中,但它不适用于按钮(不存在于这里的代码,但我尝试同时使用 'attrs' 和 'invisible' 属性)。
- 我无法显示 'branch2' 的状态栏,甚至连按钮也无法显示。
- 我不知道如何告诉 Odoo 使这两个工作流多样化,因为它们属于同一模型。
- 我认为子流解决方案不适合我的情况,因为如果模型是一种类型,我会使用流,否则我会使用流。
再次感谢。
已修复。
我将两个分支放在同一个工作流程中,并使用 'split_mode' 和条件转换将它们分开。
仍然是一个问题,但它是次要的。
我想在状态栏中只显示一个分支的状态。
不知道可不可以。
[编辑]
那个也解决了。
我只显示 'statusbar_visible=" "'
的当前状态
我有两个 'state' 字段应用于同一模型的两个不同工作流程,我想根据字段值在它们之间切换。
我能做到吗?
提前致谢。
[编辑]
文件.py
branch1 = fields.Selection([
('state1', 'State 1'),
('state2', 'State 2'),
]
)
branch2 = fields.Selection([
('b2_state1', 'State 1'),
('b2_state2', 'State 2'),
]
)
wkf.xml
我对两个分支使用相同的状态和转换方法,显然使用适当的字段名称,我在此处将其修改为 post。
定义
<record model="workflow" id="wkf_branch1">
<field name="name">Branch 1</field>
<field name="osv">model.name</field>
<field name="on_create">True</field>
</record>
<record model="workflow" id="wkf_branch2">
<field name="name">Branch 2</field>
<field name="osv">model.name</field>
<field name="on_create">True</field>
</record>
州
<record model="ir.actions.server" id="set_model_to_state2">
<field name="name">Set Model to State2</field>
<field name="model_id" ref="model_name"/>
<field name="code">
model.search([('id', 'in', context['active_ids'])]).function()
</field>
</record>
<record model="workflow.activity" id="state1">
<field name="name">State 1</field>
<field name="wkf_id" ref="wkf_branch1"/>
<field name="flow_start" eval="True"/>
<field name="kind">dummy</field>
<field name="action"></field>
<field name="action_id" ref="set_model_to_state2"/>
</record>
.....
分支 2 也是如此
转场
<record model="workflow.transition" id="model_state1_to_state2">
<field name="act_from" ref="state1"/>
<field name="act_to" ref="state2"/>
<field name="signal">state2</field>
</record>
.....
分支 2 也是如此
view.xml
<header>
<!-- FORWARD BUTTONS -->
<button name="state1" type="workflow"
string="Reset to state1"
states="state2"/>
<button name="state2" type="workflow"
string="State 2" states="state1"/>
<button name="b2_state1" type="workflow"
string="Reset to State1"
states="b2_state2"/>
<button name="b2_state2" type="workflow"
string="State 2"
states="state1"/>
<field name="branch1" widget="statusbar"
attrs="{'invisible': [('type', '=', 'certain_type')]}"/>
<field name="branch2" widget="statusbar"
attrs="{'invisible': [('type', 'in', ['other_type1', 'other_type2'])]}"/>
</header>
所以问题是:
- 我可以根据 'attrs' 属性中的条件将 'branch1' 的状态栏隐藏在 view.xml 中,但它不适用于按钮(不存在于这里的代码,但我尝试同时使用 'attrs' 和 'invisible' 属性)。
- 我无法显示 'branch2' 的状态栏,甚至连按钮也无法显示。
- 我不知道如何告诉 Odoo 使这两个工作流多样化,因为它们属于同一模型。
- 我认为子流解决方案不适合我的情况,因为如果模型是一种类型,我会使用流,否则我会使用流。
再次感谢。
已修复。
我将两个分支放在同一个工作流程中,并使用 'split_mode' 和条件转换将它们分开。
仍然是一个问题,但它是次要的。 我想在状态栏中只显示一个分支的状态。 不知道可不可以。
[编辑]
那个也解决了。 我只显示 'statusbar_visible=" "'
的当前状态