1、图示总概览-动作分类
- 窗口动作(Window Actions) ------(ir.actions.act_window)
- 网址URL动作(URL Actions) ------(ir.actions.act_url)
- 服务器动作(Server Actions)------ (ir.actions.server)
- 报告动作(Report Actions)------ (ir.actions.report.xml)
- 客户动作(Client Actions)------ (ir.actions.client)
2、官方文档
动作可以存储在数据库中,也可以直接作为字典返回,例如按钮方法。所有操作都有两个强制性属性:
type
- 当前动作的类别,确定可以使用哪些字段以及如何解释动作
name
- 操作的简短用户可读描述,可以显示在客户端的界面中
- 客户端可以通过 4 种形式获取操作:
False
- 如果当前打开了任何操作对话框,请将其关闭
一个字符串
- 如果客户端操作匹配,则解释为客户端操作的标记,否则视为数字
一个号码
- 从数据库中读取对应的动作记录,可以是数据库标识符,也可以是外部id
一本字典
- 视为客户端操作描述符并执行
窗口动作Window Actions (ir.actions.act_window)
最常见的动作类型,用于通过 视图呈现模型的可视化:窗口动作为模型(可能还有模型的特定记录)定义一组视图类型(可能还有特定视图)。
它的字段是:
res_model
- 模型来呈现视图
views
- (view_id, view_type) 对的列表。每对的第二个元素是视图的类别(树、表单、图形…),第一个元素是可选的数据库 ID(或 False)。如果没有提供 id,客户端应该为请求的模型获取指定类型的默认视图(这由 fields_view_get()自动完成)。列表的第一种类型是默认视图类型,在执行操作时默认打开。每种视图类型在列表中最多应出现一次
res_id(可选的)
- 如果默认视图是form,则指定要加载的记录(否则应创建新记录)
search_view_id(可选的)
- (id, name)pair,id是要为操作加载的特定搜索视图的数据库标识符。默认获取模型的默认搜索视图
target(可选的)
- 视图是否应在主要内容区域 ( current)、全屏模式 ( fullscreen) 或对话框/弹出窗口 ( new) 中打开。使用main而不是current清除breadcrumbs。默认为 current.
context(可选的)
- 要传递给视图的附加上下文数据
domain(可选的)
- 过滤域以隐式添加到所有视图搜索查询
limit(可选的)
- 默认情况下要在列表中显示的记录数。在 Web 客户端中默认为 80
auto_search(可选的)
- 是否应在加载默认视图后立即执行搜索。默认为True
例如,使用列表和表单视图打开客户(设置了客户标志的合作伙伴):
{
"type": "ir.actions.act_window",
"res_model": "res.partner",
"views": [[False, "tree"], [False, "form"]],
"domain": [["customer", "=", true]],
}
或在新对话框中打开特定产品(单独获得)的表单视图:
{
“type” : “ir.actions.act_window” ,
“res_model” : “product.product” ,
“views” : [[ False , “form” ]],
“res_id” : a_product_id ,
“target” : “new” ,
}
数据库内窗口操作有几个不同的字段,客户端应该忽略这些字段,主要用于组成views列表:
view_mode
- 以逗号分隔的视图类型列表作为字符串。所有这些类型都将出现在生成的views列表中(至少有一个
False
view_id)
view_ids
- M2 M1查看对象,定义
views
初始内容
view_id
- 添加到视图列表中的特定视图,以防其类型是 view_mode 列表的一部分并且尚未被 view_ids 中的视图之一填充
这些通常在从数据文件定义操作时使用:
<record model="ir.actions.act_window" id="test_action">
<field name="name">A Test Action</field>
<field name="res_model">some.model</field>
<field name="view_mode">graph</field>
<field name="view_id" ref="my_specific_view"/>
</record>
将使用“my_specific_view”视图,即使这不是模型的默认视图。
views序列的服务器端组成如下:
- 从 view_ids 中获取每个 (id, type) (按顺序sequence)
- 如果 view_id 已定义且其类型尚未填充,则附加其 (id, type)
- 对于 view_mode 中的每个未填充类型,追加 (False, type)
需求实例:
方法1:弹窗然后确认方法
<record id="wizard_batch_handle_record_so_form_view" model="ir.ui.view">
<field name="name">Batch Handle Record Wizard For S.O. Form View</field>
<field name="model">wizard.batch.handle.so</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Batch Handle Sale Order">
<div>
<h4>Test one</h4>
<h5 style="color:red">Please make sure your approve flow is all auto approve and check your sale order correct</h5>
</div>
<footer>
<button name="**此处为想要执行的方法**" string="Confirm" type="object" class="btn-primary"/>
<button string="Cancel" class="btn-default" special="cancel"/>
</footer>
</form>
</field>
</record>
<act_window id="act_wizard_batch_handle_so_record"
name="Batch Handle Sale Order"
res_model="wizard.batch.handle.so" ============>跳转的wizard瞬态模型
src_model="sale.order" =============>动作所在的模型
multi="True"
key2="client_action_multi"
target="new"
view_type="form"
view_mode="form"
groups="rh_sale.group_batch_handle_sale_order"/>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
<record id="view_badge_wizard_reward" model="ir.ui.view">
<field name="name">gamification.badge.user.wizard.form</field>
<field name="model">gamification.badge.user.wizard</field>
<field name="arch" type="xml">
<form string="Reward Employee with">
What are you thankful for?
<group>
<field name="employee_id" invisible="1" />
<field name="user_id" invisible="1" />
<field name="badge_id" nolabel="1" colspan="4" />
<field name="comment" nolabel="1" placeholder="Describe what they did and why it matters (will be public)" />
</group>
<footer>
<button string="Reward Employee" type="object" name="action_grant_badge" class="btn-primary" />
<button string="Cancel" special="cancel" class="btn-default"/>
</footer>
</form>
</field>
</record>
<act_window id="action_reward_wizard" domain="[]"
name="Reward Employee"
target="new"
res_model="gamification.badge.user.wizard" ============>跳转的wizard瞬态模型(需要在view里显示数据的model)
context="{'default_employee_id': active_id, 'employee_id': active_id}"
view_type="form" view_mode="form"
view_id="view_badge_wizard_reward"/> ======># 数据库视图记录id或False,如果没有指定id,客户端会自动用fields_view_get()获取相应类型的默认视图。(也有指定view_id的)
方法2:直接执行方法
<record id="***ID***" model="ir.actions.server">
<field name="name">Terminate Routine Inspection Tasks In Batches</field>
<field name="type">ir.actions.server</field>
<field name="model_id" ref="模块名称.model_模型名称"/>
<field name="state">code</field>
<field name="code">
if records:
action = records.方法名()
</field>
</record>
<record id="action_terminate_routine_inspection_tasks_in_batches" model="ir.values">
<field name="name">Terminate Routine Inspection Tasks In Batches</field>
<field name="model_id" ref="模块名称.model_模型名称"/>
<field name="model">页面动作所属模型</field>
<field name="key2">client_action_multi</field>
<field eval="'ir.actions.server,%d'%***ID***" name="value"/>
</record>
网址URL动作 URL Actions (ir.actions.act_url)
允许通过 Odoo 操作打开 URL(网站/网页)。可以通过两个字段进行自定义:
url
- 激活动作时打开的地址
target
- 在新窗口/页面中打开地址 if new,将当前内容替换为页面 if self。默认为new。如果是
new
的,则在新窗口/页面中打开地址,如果是self
,则用页面替换当前内容。默认为new
{
"type": "ir.actions.act_url",
"url": "http://odoo.com",
"target": "self",
}
将用 Odoo 主页替换当前内容部分。