javascript - Odoo 12:如何在 sale.order 模型上单击“保存”按钮时弹出消息?
问题描述
我被困了3个小时。当我的条件满足(_some 字段等于某物
)时,
我想显示一个弹出窗口(非阻塞),同时用户在 sale.order 模型(仅限)记录的表单视图上单击“保存”按钮。在保存按钮执行其默认操作后应该触发弹出窗口,因为我需要检查数据库中是否满足条件。
我在这里找到了如何从 Odoo 中的 javascript 获取 model.Models。
我还发现我需要重写o_form_button_edit来进行更改,但我不知道该怎么做,也不知道它是否对其他模型有影响,因为其他人使用它。
this.$buttons.on('click', '.o_form_button_edit', this._onEdit.bind(this));
我想知道我的方法是否可以做到这一点?如果没有,你能推荐另一个吗?你能帮助我吗?非常感谢。
PS:我需要一个弹出窗口,因为用户可以在保存记录时接受他的更改或丢弃它。如果丢弃,我需要重新打开 o_form_button_edit 如果没有,我们什么都不做,因为我们已经调用了 write 方法。
解决方案
这是一个执行您想要的代码片段:
var FormController = require('web.FormController');
var ExtendFormController = FormController.include({
saveRecord: function () {
var res = this._super.apply(this, arguments);
if(this.modelName == 'project.task'){
var self = this;
res.then(function(changedFields){
console.log(changedFields);
console.log(self.modelName);
self.do_notify('title', 'message');
// you can call a method on the server like this
self._rpc({
model: self.modelName,
method: 'search_read',
fields: ['name'],
context: self.context,
}).then(function(result){
console.log('rpc result');
console.log(result);
})
});
}
return res;
}
});
您还需要以同样的方式继承 createRecord() 方法。
几点注意事项:
- 第一个控制台日志行说:[“name”] 是 changedFields 的值(我只在点击保存之前更改了任务的名称)
- 我正在处理 project.task 对象,但您可以将其更改为 sale.order :)
官方文档很有帮助
推荐阅读
- ionic-framework - 在 ionic v4 中添加自定义加载微调器
- java - 从 selenium 服务器获取所有会话
- android - 如何通过意图共享任何类型的文件(.pdf、.xls、.docs)?
- angular - 如何更改 Angular Material 步进器中的状态图标?
- mysql - 如何从另一个服务器存储过程调用存储过程?
- docker - 使用 Docker 运行时如何备份和恢复 Alfresco Community
- amazon-ec2 - 与 EC2 上托管的 websocket 服务器的 ws 连接上的 Lambda 超时错误
- selenium - 当服务器使用 w3c 时,在 Edge 中获取错误消息“不允许使用 JSON 有线协议命令端点”
- kendo-grid - 导出到 Excel 按钮在 Edge 浏览器中不起作用
- azure - Azure 数据工厂:从 postgresql 数据库复制数据(或数据流)