Skip to Content

Odoo 点击功能菜单打开对象视图的流程

1. 菜单定义

菜单对象为 `ir.ui.menu`,以 `stock.picking`(库存交易单据)为例:

SELECT id, sequence, name 
FROM ir_ui_menu 
WHERE parent_id = 220 
ORDER BY sequence;
    

结果:

  • **242; 1; "Incoming Shipments"**(入库单)
  • **243; 2; "Internal Moves"**(调拨单)
  • **241; 3; "Delivery Orders"**(出库单)

2. 菜单在 `ir_values` 中定义的 Action

`res_id` 字段对应 `model` 字段定义的对象的 ID:

SELECT id, name, key, key2, model, value, res_id, object 
FROM ir_values 
WHERE res_id IN (241, 242, 243);
    

结果:

  • **216; "Menuitem"; "action"; "tree_but_open"; "ir.ui.menu"; "ir.actions.act_window,292"; 241; t**
  • **217; "Menuitem"; "action"; "tree_but_open"; "ir.ui.menu"; "ir.actions.act_window,293"; 242; t**
  • **218; "Menuitem"; "action"; "tree_but_open"; "ir.ui.menu"; "ir.actions.act_window,294"; 243; t**

3. 查找 Action

根据 `value` 字段,查找对应的 `ir_act_window`:

SELECT id, name, domain, search_view_id, context 
FROM ir_act_window 
WHERE id IN (292, 293, 294);
    

结果:

  • **292; "Delivery Orders"; "[('type','=','out')]"; 469;**
  • **293; "Incoming Shipments"; "[('type','=','in')]"; 472;**
  • **294; "Internal Moves"; "[('type','=','internal')]"; 473;**

`context` 字段示例:

{'contact_display': 'partner_address', 'search_default_available': 1}
    

`ir_act_window` 中还定义了 `stock.picking` 对象的其他 Action,可以根据需要进行分析。

4. 指定具体视图

当一个对象有多个 Action 和同类型的视图时,需要指定具体的视图:

SELECT act_window_id, sequence, view_mode, view_id 
FROM ir_act_window_view 
WHERE act_window_id IN (292, 293, 294);
    

结果:

  • **292; 1; "tree"; 467**
  • **292; 2; "form"; 468**
  • **292; 3; "calendar";**
  • **293; 1; "tree"; 470**
  • **293; 2; "form"; 471**
  • **293; 3; "calendar";**
  • **294; 1; "tree"; 464**
  • **294; 2; "form"; 465**

5. 补充说明

OpenERP 对象的 `form` 视图右侧,常有一些链接、报表或按钮。如果这些元素定义了 Action,则这些 Action 也会在 `ir_values` 表中定义。

通过以上步骤,可以清晰地理解 Odoo(OpenERP)中点击菜单并打开对象视图的流程。希望这些信息能帮助您更好地理解和使用 Odoo 系统。

Odoo 点击功能菜单打开对象视图的流程
6776, Administrator July 28, 2015
Tags
Archive