odoo后台接口如果出现错误可以简单抛出一个UserError异常给前端进行处理
但是有些时候可能只是一个通知或者警告给用户,不需要错误这么重的模态强交互,也不用影响主流程
从odoo8的addons/web/static/src/js/chrome.js源码中可以发现这个功能曾经拥有
| 1 2 3 4 5 6 7 8 9 | instance.web.action_notify = function(element, action) {     element.do_notify(action.params.title, action.params.text, action.params.sticky); }; instance.web.client_actions.add("action_notify", "instance.web.action_notify"); instance.web.action_warn = function(element, action) {     element.do_warn(action.params.title, action.params.text, action.params.sticky); }; instance.web.client_actions.add("action_warn", "instance.web.action_warn"); | 
本次以notify通知为例,其对应到odoo9之后的移植代码为:
| 1 2 3 4 5 6 7 8 9 10 11 | /**  * author: i@renjie.me  */ var core = require('web.core'); core.action_registry.add('action_notify', function(element, action){     var params = action.params;     if(params){         element.do_notify(params.title, params.text, params.sticky);     }     return {'type':'ir.actions.act_window_close'}; }); | 
相对应后台调用统一封装方法:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | '''   author: i@renjie.me ''' def action_notify(self, title=u'默认通知标题', text=u"默认通知内容", sticky=False):     return {         "type": "ir.actions.client",         "tag": "action_notify",         "params": {             "title": title,             "text": text,             "sticky": sticky         }     } |