在odoo中,如果必要栏位没有值,在保存时右上角会有如下图的提示,该提示会延时并自动关闭。
有网友问如何在自己的模块中增加这样的提示,以方便用户在操作时,能提示一些必要的信息。下面例出大致的步骤以供参考:
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来获取。