跳至内容

Odoo 18 客户端动作(Client Action)配置指南

Odoo 18 客户端动作(Client Action)配置指南

1. 定义客户端动作的XML菜单

在模块的 views 目录下创建 client_action_views.xml 文件,定义 ir.actions.client 记录及关联的菜单项:

<?xml version="1.0" encoding="UTF-8"?>
<odoo>
  <data>
    <!-- 客户端动作定义 -->
    <record id="dashboard_ir_actions_client" model="ir.actions.client">
      <field name="name">仪表盘</field>
      <field name="tag">test_model.dashboard</field> <!-- 唯一标识符,关联前端组件 -->
      <!-- 可选参数:target指定打开方式(current/main/fullscreen/new) -->
      <!-- <field name="target">main</field> -->
    </record>

    <!-- 菜单项定义 -->
    <menuitem 
      name="仪表盘" 
      id="advanced_dashboard_menu" 
      sequence="1" 
      action="dashboard_ir_actions_client"
    />
  </data>
</odoo>
        

关键参数说明

tag客户端动作的唯一标识符,用于前端组件注册时匹配(需与JavaScript代码中的注册标签一致)。target控制动作的显示方式:

  • current:在主内容区域打开(默认)。
  • fullscreen:全屏模式打开。
  • new:在对话框/弹出窗口中打开。
  • main:重置面包屑导航(清除历史路径)。

params(可选)传递给前端的参数(如Python字典格式的键值对)。

2. 实现前端组件(JavaScript)

在模块的 static/src/js 目录下创建 client_action.js,继承OWL的 Component 类并注册动作:

/** @odoo-module **/
import { registry } from '@web/core/registry';
import { Component } from '@odoo/owl';

// 定义仪表盘组件
export class AdvancedDashboard extends Component {
  setup() {
    // 初始化逻辑(如数据加载、服务调用)
  }
}

// 注册组件为客户端动作(tag需与XML中的tag一致)
AdvancedDashboard.template = "test_model.advanced_dashboard"; // 关联模板名称
registry.category("actions").add("test_model.dashboard", AdvancedDashboard);
        

3. 定义模板(XML)

在 static/src/xml 目录下创建 client_action.xml,定义组件的UI结构:

<?xml version="1.0" encoding="UTF-8"?>
<templates xml:space="preserve">
  <t t-name="test_model.advanced_dashboard">
    <div class="o_dashboard">
      <h1>通过客户端动作渲染的仪表盘</h1>
      <!-- 动态内容可通过props或服务注入 -->
    </div>
  </t>
</templates>
        

关键说明:t-name 需与JavaScript中 AdvancedDashboard.template 属性完全匹配。

4. 配置模块清单(manifest.py)

在 __manifest__.py 中确保XML和静态资源正确加载:

{
    'name': '高级仪表盘',
    'version': '1.0',
    'depends': ['web'],
    'data': [
        'views/client_action_views.xml',  # 加载XML菜单和动作
    ],
    'assets': {
        'web.assets_backend': [
            'test_model/static/src/js/client_action.js',  # 后端加载JS组件
            'test_model/static/src/xml/client_action.xml',  # 后端加载XML模板
        ],
    },
}
        

操作验证

  1. 升级模块:在Odoo后台启用开发者模式,升级当前模块。
  2. 查看效果:在菜单中找到新增的“仪表盘”菜单项,点击后应显示模板定义的页面内容。

扩展说明

  • 参数传递:通过 ir.actions.client 的 params 字段传递数据(如 {'key': 'value'}),在前端组件中通过 this.props 获取。
  • 复杂交互:结合Odoo的服务(如 rpc、dialog)实现数据请求、弹窗等功能。
  • 动作类型:除普通页面渲染外,客户端动作还可用于触发弹窗、导航跳转等前端逻辑。

通过以上步骤,可在Odoo 18中灵活配置客户端动作,实现自定义用户交互逻辑。

Odoo 18 客户端动作(Client Action)配置指南
中国 Odoo, 苏州远鼎 2025年6月10日
标签
存档