odoo中如何重写创建/编辑按钮的逻辑功能,以实现打开自定义向导窗口

admin 2019-4-18 5622

本文来源: https://www.cour4g3.me/blog/1/post/how-to-custom-create-edit-functionality-in-tree-form-views-2

---------------------------------------

在二开时,有时候可能会要求点击创建/编辑按钮时执行不同于原生功能的创建或编辑动作,例如打开一个向导,实现一些基本的验证或额外选项什么的。但要实现这样的功能,无法直接在XML中配置来实现,只能通过自定义JavaScript来覆盖按钮动作。下面是一个例子:

static/src/js/override_create.js

odoo.define('delivery_note.FormController', function (require) {
"use strict";
var ActionManager = require('web.ActionManager');
var FormController = require('web.FormController');
var ListController = require('web.ListController');
var core = require('web.core');
var rpc = require('web.rpc');
var _t = core._t;
ListController.include({
    _onCreateRecord: function (event) {
        var self = this;
        if (this.modelName === 'delivery.note') {
            if (event) {
                event.stopPropagation();
            }
            var action_manager = new ActionManager(self);
            action_manager.do_action({
                name: _t('Create Delivery Note'),
                type: 'ir.actions.act_window',
                res_model: 'delivery.note.wizard',
                view_mode: 'form',
                view_type: 'form',
                views: [[false, 'form']],
                target: 'new',
                context:{}
            });
        } else {
            return this._super.apply(this, arguments);
        }
    },
});
FormController.include({
    createRecord: function (parentID) {
        var self = this;
        if (this.modelName === 'delivery.note') {
            var action_manager = new ActionManager(self);
            action_manager.do_action({
                type: 'ir.actions.act_window',
                res_model: 'delivery.note.wizard',
                view_mode: 'form',
                view_type: 'form',
                views: [[false, 'form']],
                target: 'new',
                context:{}
            });
        } else {
            return this._super.apply(this, arguments);
        }
},
});
});

以上代码将在 delivery.note 模型的列表或表单界面创建记录时,弹出 delivery.note.wizard 向导。

最新回复 (0)
返回