Odoo自定义字段到看板分组阶段列
Odoo custom field to kanban grouped stage column
我在模型中添加了一个新的自定义字段(many2many)hr.recruitment.stage,请参考下图,
并试图在hr.applicant的分组看板列视图中显示它,请参考下图
这里我通过编写自定义插件添加了字幕文本,路径为 static/src/xml/filename.xml
<?xml version="1.0"?>
<templates>
<t t-inherit="web.KanbanView.Group" t-inherit-mode="primary">
<xpath expr="//div[hasclass('o_kanban_header_title')]" position="after">
<span>Subtitle</span>
</xpath>
</t>
</templates>
在副标题的地方,我想显示 hr.recruitment.stage 模型中新添加的 many2many 字段值,这里我指的是 kanban_column.js 但我不知道如何将新添加的字段(many2many)的值传递给 javascript 并在 hr.applicant 的分组看板列视图中显示该值。我请求您指导我实现这一目标,这对我非常有用,在此先感谢。
首先,您需要将 x_recruiters
字段添加到看板字段中:
<record id="hr_kanban_view_applicant" model="ir.ui.view">
<field name="name">hr.kanban.view.applicant</field>
<field name="model">hr.applicant</field>
<field name="inherit_id" ref="hr_recruitment.hr_kanban_view_applicant"/>
<field name="arch" type="xml">
<progressbar position="before">
<field name="x_recruiters"/>
</progressbar>
</field>
</record>
它会自动读取并添加x_recruiters
字段到data
对象。
然后添加 recruiters
名称而不是 Subtitle
文本:
<t t-if="widget.data_records.length != 0">
<t t-foreach="widget.data_records[0].data.x_recruiters.data" t-as="stage">
<span t-esc="stage.data.display_name"/>
<br/>
</t>
</t>
编辑:
您可以更改看板列以从舞台模型中读取招聘人员并在渲染后显示它们。
odoo.define('kanban_group_extended.KanbanColumn', function (require) {
"use strict";
var KanbanColumn = require('web.KanbanColumn');
KanbanColumn.include({
renderElement: function () {
this._super();
this.set_recruiters();
},
set_recruiters: function() {
var self = this;
var kanban_header_title = self.$('.o_kanban_header_title');
this._rpc({
model: self.relation,
method: 'read',
args: [[self.id], ["x_recruiters"]],
}).then(function (records) {
return self._rpc({
model: self.data.fields["x_recruiters"].relation,
method: 'read',
args: [records[0]["x_recruiters"], ['display_name']],
}).then(function (values) {
_.each(values, function (value) {
kanban_header_title.after("<span>" + value['display_name'] + "</span><br/>");
});
});
});
},
});
});
将js文件添加到资产后端:
<template id="assets_backend" inherit_id="web.assets_backend" name="Kanban Backend Assets">
<xpath expr="//link[last()]" position="after">
<script type="text/javascript" src="/kanban_group_extended/static/src/js/KanbanColumn.js"></script>
</xpath>
</template>
我在模型中添加了一个新的自定义字段(many2many)hr.recruitment.stage,请参考下图,
并试图在hr.applicant的分组看板列视图中显示它,请参考下图
这里我通过编写自定义插件添加了字幕文本,路径为 static/src/xml/filename.xml
<?xml version="1.0"?>
<templates>
<t t-inherit="web.KanbanView.Group" t-inherit-mode="primary">
<xpath expr="//div[hasclass('o_kanban_header_title')]" position="after">
<span>Subtitle</span>
</xpath>
</t>
</templates>
在副标题的地方,我想显示 hr.recruitment.stage 模型中新添加的 many2many 字段值,这里我指的是 kanban_column.js 但我不知道如何将新添加的字段(many2many)的值传递给 javascript 并在 hr.applicant 的分组看板列视图中显示该值。我请求您指导我实现这一目标,这对我非常有用,在此先感谢。
首先,您需要将 x_recruiters
字段添加到看板字段中:
<record id="hr_kanban_view_applicant" model="ir.ui.view">
<field name="name">hr.kanban.view.applicant</field>
<field name="model">hr.applicant</field>
<field name="inherit_id" ref="hr_recruitment.hr_kanban_view_applicant"/>
<field name="arch" type="xml">
<progressbar position="before">
<field name="x_recruiters"/>
</progressbar>
</field>
</record>
它会自动读取并添加x_recruiters
字段到data
对象。
然后添加 recruiters
名称而不是 Subtitle
文本:
<t t-if="widget.data_records.length != 0">
<t t-foreach="widget.data_records[0].data.x_recruiters.data" t-as="stage">
<span t-esc="stage.data.display_name"/>
<br/>
</t>
</t>
编辑:
您可以更改看板列以从舞台模型中读取招聘人员并在渲染后显示它们。
odoo.define('kanban_group_extended.KanbanColumn', function (require) {
"use strict";
var KanbanColumn = require('web.KanbanColumn');
KanbanColumn.include({
renderElement: function () {
this._super();
this.set_recruiters();
},
set_recruiters: function() {
var self = this;
var kanban_header_title = self.$('.o_kanban_header_title');
this._rpc({
model: self.relation,
method: 'read',
args: [[self.id], ["x_recruiters"]],
}).then(function (records) {
return self._rpc({
model: self.data.fields["x_recruiters"].relation,
method: 'read',
args: [records[0]["x_recruiters"], ['display_name']],
}).then(function (values) {
_.each(values, function (value) {
kanban_header_title.after("<span>" + value['display_name'] + "</span><br/>");
});
});
});
},
});
});
将js文件添加到资产后端:
<template id="assets_backend" inherit_id="web.assets_backend" name="Kanban Backend Assets">
<xpath expr="//link[last()]" position="after">
<script type="text/javascript" src="/kanban_group_extended/static/src/js/KanbanColumn.js"></script>
</xpath>
</template>