在odoo中,如果必要栏位没有值,在保存时右上角会有如下图的提示,该提示会延时并自动关闭。

1

有网友问如何在自己的模块中增加这样的提示,以方便用户在操作时,能提示一些必要的信息。下面例出大致的步骤以供参考:

1.一般来说我们是在py中执行到一些业务逻辑的时候需要提示,所以先看在py脚本中怎么来写,格式如下:

def get_express_list(self, cr, uid, ids, context=None):  
            obj = self.browse(cr,uid,ids,context=context)  
            return {  
                'type': 'ir.actions.client',  
                'tag': 'get_sf_express_list',  
                'target': 'new',  
                'params':{'num_express':obj.num_express},  
            }

我这个是用户点一个按钮,执行前端的一个js动作。这里的tag很重要,跟后面的js代码定义要一致。

2.然后在模块的src/js/中建一个js文件,脚本大致内容如下:

openerp.rhwl = function(instance) {  
        var _t = instance.web._t,  
            _lt = instance.web._lt;  
        var QWeb = instance.web.qweb;  
      
        instance.rhwl.getexpresslist = instance.web.Widget.extend({  
            init: function(parent,action){  
                this._super(parent, action);  
                this.action = action;  
            },  
            start: function () {  
                var self = this;  
                self.do_warn(_t("Get"), _t("获取成功"));  
            }  
        });  
      
        instance.web.client_actions.add("get_sf_express_list", "instance.rhwl.getexpresslist");  
    }

前面openerp.rhwl中的rhwl是你的模块名称,这是odoo通用格式,红色的内容与py脚本中tag属性值要一致,然后在start方法调用do_warn或do_notify两个函数都可以。

这个js大致的功能是这样子,在你的模块中给instance对象定义一个新的继承自instance.web.Widget对象的新对象 instance.rhwl.getexpresslist,并且将该对象注册到前端活动中,前后端通过get_sf_express_list字串来进行沟通调用。

3.把js文件加载到模块__openerp__中,升级模块,你就可以看到效果了,我这里提示的信息是固定的,其实可以把标题和内容通过参数方式传过来。py调用时"params"可以设定传入的参数名和值(就是dict的key和value),在js中通过this.action.params来获取。