即使一个人,也要活得像军队一样!

Odoo13-- 窗口动作与服务器动作混合使用

ir.actions.server的code字段可以赋值为一小段python代码,当执行该服务器动作时也会同时执行该段python代码,而如果这段python代码最后返回了一个窗口动作,则执行完服务器动作后也会执行该窗口动作。
注意: 动作窗口视图中如果缺少接收值action,则导致没有返回数据,页面不会跳转。
如下:

1
2
3
4
5
6
<record id="action_your_pipeline" model="ir.actions.server">
<field name="name">Crm: My Pipeline</field>
<field name="model_id" ref="crm.model_crm_team"/>
<field name="state">code</field>
<field name="code">action = model.action_your_pipeline()</field>
</record>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@api.model
def action_your_pipeline(self):
action = self.env.ref('crm.crm_lead_action_pipeline').read()[0]
user_team_id = self.env.user.sale_team_id.id
if not user_team_id:
user_team_id = self.search([], limit=1).id
action['help'] = _("""<p class='o_view_nocontent_smiling_face'>Add new opportunities</p><p>
Looks like you are not a member of a Sales Team. You should add yourself
as a member of one of the Sales Team.
</p>""")
if user_team_id:
action['help'] += "<p>As you don't belong to any Sales Team, Odoo opens the first one by default.</p>"

action_context = safe_eval(action['context'], {'uid': self.env.uid})
if user_team_id:
action_context['default_team_id'] = user_team_id

action['context'] = action_context
return action

或者

1
2
3
4
5
6
7
8
9
10
11
12
13
<record id="action_mark_as_lost" model="ir.actions.server">
<field name="name">Mark as lost</field>
<field name="model_id" ref="model_crm_lead"/>
<field name="binding_model_id" ref="crm.model_crm_lead"/>
<field name="binding_view_types">list</field>
<field name="state">code</field>
<field name="code">
if record:
action_values = env.ref('crm.crm_lead_lost_action').read()[0]
action_values.update({'context': env.context})
action = action_values
</field>
</record>
-------------本文结束感谢您的阅读-------------