Odoo 10中打印报表后如何关闭弹出的向导表单?
解决Odoo向导打印报表后窗口不关闭的问题
这个问题在Odoo开发里挺常见的——你的打印方法只触发了报表生成,但没给Odoo明确的指令去关闭向导窗口。下面给你两种实用的解决办法:
方法一:给报表动作添加自动关闭标记
在获取报表动作后,加上close_on_report_download参数,这个参数会让Odoo在报表加载或下载完成后自动关闭向导窗口:
@api.multi def action_print(self): # 获取报表动作 report_action = self.env['report'].get_action(self.payment_id, 'xxx.xxx_report') # 添加自动关闭标记 report_action['close_on_report_download'] = True return report_action
方法二:返回复合动作(先关闭向导再打开报表)
如果第一种方法在你的Odoo版本里不生效,可以返回一个包含关闭动作和报表动作的复合指令,强制关闭向导后再打开报表:
@api.multi def action_print(self): self.ensure_one() # 获取报表动作 report_action = self.env['report'].get_action(self.payment_id, 'xxx.xxx_report') # 返回复合动作:先关闭向导窗口,再触发报表 return { 'type': 'ir.actions.act_multi', 'actions': [ {'type': 'ir.actions.act_window_close'}, report_action, ] }
额外注意事项
- 确保你的向导模型是临时模型(transient model),也就是继承自
'transient.model',只有临时模型的窗口才会响应关闭动作。 - 测试时留意浏览器的弹窗权限,如果报表被拦截,向导可能也无法正常关闭。
内容的提问来源于stack exchange,提问作者Stone
相关产品推荐
相关产品推荐

