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 系统。