1. 程式人生 > 其它 >odoo中註冊並新增客戶端動作

odoo中註冊並新增客戶端動作

技術標籤:odoo文件odooodoo教程javascriptpostgresql其他pythonhtml

點選跳轉進入免費課程(課程持續更新中…)
課件文件地址:點選跳轉
課程環境地址:點選跳轉 賬密:testuser
gitee程式碼地址:點選跳轉(分支learning_odoo12)
微信公眾號二維碼:
在這裡插入圖片描述


描述

簡單來說客戶端動作通過註冊一組widget,來繫結特定的action.

從伺服器的角度來看客戶端動作僅僅是 ir_action模型中儲存的一條記錄;從Web客戶端角度來看,他是一個繼承自AbstractAction類的小部件(widget)。

使用客戶端動作前需要在登錄檔中進行註冊(core.action_registry.add(’’, ‘’))


新增客戶端動作(Adding a client action)

客戶端動作是一個小部件(Widget),新增客戶端動作需要實現兩個步驟:建立一個新的小部件以及在登錄檔中進行註冊

新增新的小部件(Widget)

var AbstractAction = require('web.AbstractAction');
var core = require('web.core');
var TongjiPage = AbstractAction.extend({
    template: 'MainTongjiPage',
    init: function(){
        return
this._super.apply(this, arguments); }, }),

客戶端動作的註冊

首先我們需要web客戶端和TongjiPage 的對映

core.action_registry.add('tongji.page.main', TongjiPage);

然後,我們需要多在ir.actions.client中定義一條tag屬性為tongji.page.main的記錄

<record id="action_tongji_page" model="ir.actions.client">
    <field
name="name">
統計</field> <field name="tag">tongji.page.main</field> </record>

## 控制面板(ControlPanelMixin) 那麼問題來了什麼是控制面板?

如下圖 的紅色框框區域↓↓↓
在這裡插入圖片描述

那麼在我們自定義的介面如何新增odoo 預設的控制面板呢?首先要知道的是預設AbstractAction類是不支援控制面板的。

在新增的Widget中新增控制面板的格式如下:

var ControlPanelMixin = require('web.ControlPanelMixin');
var TongjiPage = AbstractAction.extend(ControlPanelMixin, {
    template: 'MainTongjiPage',
    init: function(){
      return this._super.apply(this, arguments);
    },
}),  

每次更新控制面板時需要呼叫_updateControlPanel方法(官方示例):

var SomeClientAction = Widget.extend(ControlPanelMixin, {
    ...
    start: function () {
        this._renderButtons();
        this._updateControlPanel();
        ...
    },
    do_show: function () {
        ...
        this._updateControlPanel();
    },
    _renderButtons: function () {
        this.$buttons = $(QWeb.render('SomeTemplate.Buttons'));
        this.$buttons.on('click', ...);
    },
    _updateControlPanel: function () {
        this.update_control_panel({
            cp_content: {
              $buttons: this.$buttons,
            },
    });