【问题标题】:How can I add action menu in usermenu odoo15如何在用户菜单 odoo15 中添加操作菜单
【发布时间】:2022-01-06 10:25:47
【问题描述】:

在 odoo 15 中,如何在用户菜单中添加新的操作菜单?在其他 odoo 版本(13 和 14)中,可以通过继承 UserMenu.Actions

在 odoo 15 中,我尝试了以下代码,但它不起作用。

感谢您的建议

/** @odoo-module **/

import { registry } from "@web/core/registry";
import { preferencesItem } from "@web/webclient/user_menu/user_menu_items";

export function UserLog(env) {
    return Object.assign(
        {},
        preferencesItem(env),
        {
            type: "item",
            id: "log",
            description: env._t("UserRecent Log"),
            callback: async function () {
                const actionDescription = await env.services.orm.call("user.recent.log", "action_get");
                actionDescription.res_id = env.services.user.userId;
                env.services.action.doAction(actionDescription);
            },
            sequence: 70,
        }
    );
}

registry.category("user_menuitems").add('profile', UserLog, { force: true })

这是我的型号代码。

class UserRecentLog(models.Model):
    _name = 'user.recent.log'
    _order = "last_visited_on desc"

    
    @api.model
    def action_get(self):
        return self.env['ir.actions.act_window']._for_xml_id('user_recent_log.action_user_activity')

这是我的 xml 视图。

    <!-- actions opening views on models -->    
    <record model="ir.actions.act_window" id="action_user_activity">
        <field name="name">User Recent Log(s)</field>
        <field name="res_model">user.recent.log</field>
        <field name="view_mode">tree,form</field>
        <field name="view_id" ref="user_activity_view_tree"/>
    </record>

【问题讨论】:

  • 什么是“(an)other odoo 版本”?
  • @CZoellner odoo 13 和 14

标签: javascript menu odoo odoo-15


【解决方案1】:

您无需更改任何内容,您的代码应该可以工作。您可以在web 模块中查看用户偏好菜单项(类似于您的菜单项)。

export function preferencesItem(env) {
    return {
        type: "item",
        id: "settings",
        description: env._t("Preferences"),
        callback: async function () {
            const actionDescription = await env.services.orm.call("res.users", "action_get");
            actionDescription.res_id = env.services.user.userId;
            env.services.action.doAction(actionDescription);
        },
        sequence: 50,
    };
}

registry
    .category("user_menuitems")
    .add("profile", preferencesItem)

hr 模块中还有另一个实现:

import { registry } from "@web/core/registry";
import { preferencesItem } from "@web/webclient/user_menu/user_menu_items";

export function hrPreferencesItem(env)  {
    return Object.assign(
        {}, 
        preferencesItem(env),
        {
            description: env._t('My Profile'),
        }
    );
}

registry.category("user_menuitems").add('profile', hrPreferencesItem, { force: true })

所以你可以重写上面的代码如下:

import { registry } from "@web/core/registry";
import { preferencesItem } from "@web/webclient/user_menu/user_menu_items";

export function UserLog(env) {
    return Object.assign(
        {},
        preferencesItem(env),
        {
            type: "item",
            id: "log",
            description: env._t("Log"),
            callback: async function () {
                const actionDescription = await env.services.orm.call("res.users.log", "action_user_activity");
                env.services.action.doAction(actionDescription);
            },
            sequence: 70,
        }
    );
}

registry.category("user_menuitems").add('profile', UserLog, { force: true })

编辑:

tree 视图模式在执行窗口操作时被忽略。

_executeActWindowAction 将检查视图注册表中的 tree 视图类型以构造 views 对象,不幸的是,树视图模式未添加到该 registry

要显示树状视图,您可以将[false, 'list'] 添加到视图列表并在doAction 选项中指定视图类型(list):

actionDescription.views.push([actionDescription.view_id[0], 'list'])
env.services.action.doAction(actionDescription, {viewType: 'list'});

或者更新视图列表并将tree更改为list

actionDescription.views[0][1] = 'list';  

当然,你也可以在action_get方法中做同样的事情:

action = self.env['ir.actions.act_window']._for_xml_id('user_recent_log.action_user_activity')
action['views'][0] = action['view_id'][0], 'list'
return action

【讨论】:

  • 它不工作。当我使用它时,我的屏幕不显示。屏幕变为白屏。
  • 我已经测试过代码和菜单项添加到配置文件,但我没有测试回调函数
  • 控制台日志有错误吗?
  • 控制台中没有错误消息。我使用 res.users.log 是模型名称,而 action_user_activity 是 ir.actions.act_window 名称。我的 odoo 应用页面变为白屏
  • 检查我的编辑,我不认为错误是由菜单项引起的
猜你喜欢
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
相关资源
最近更新 更多