动作定义 系统响应用户动作的行为: 登录, 动作按钮, 选择发票, ......
动作可以存储在数据库中或直接作为字典返回 例如 按钮方法. 所有动作共享的两个必要属性:
type
- 当前动作的类别,确定可以使用哪些字段以及如何解释动作
name
- 简要用户可读描述的动作, 可能会显示在客户端的界面中客户端可以采用以下4种形式获取动作:
False
- 如果当前有打开任何的动作对话框,请将其关闭
- 字符串
- 如果 客户端动作 匹配,解释为客户端动作的标签,否则视为数字
- 数字
- 从数据库中读取相应的动作记录,可以是数据库标识符或者一个 external id
- 字典
- 视为客户端动作描述符并执行
窗口动作 (ir.actions.act_window
)
最常见的动作类型,用于通过视图呈现模型的可视化 视图: 窗口动作定义模型 (以及可能的模型的特定记录) 的一组视图类型 (以及可能的特定视图)。
字段有:
res_model
- 模型来呈现视图
views
- 成对的列表
(view_id, view_type)
。每对的第二个元素是视图的类别(tree, form, graph, ...) 第一个是可选数据库id (或False
)。如果没有提供id, 客户端应该获取所请求模型的指定类型的默认视图(这是通过fields_view_get()
自动完成的)。列表的第一种类型是默认视图类型,并且将在执行动作时默认打开。每个视图类型在列表中最多只能出现一次 res_id
(选填)- 如果默认视图是
form
, 则指定要加载的记录 (否则应创建一个新纪录) search_view_id
(选填)- 成对的
(id, name)
,id
是要为动作加载特定的搜索视图的数据库标识符。默认为获取模型的默认搜索视图 target
(选填)- 是否应该在主内容区域打开视图 (
current
), 全局模式 (fullscreen
) 或在一个对话框/弹出窗口 (new
)中打开视图。 使用main
而不是current
清除面包屑。默认值为current
。 context
(选填)- 附加上下文数据传递给视图
domain
(选填)- 域名过滤以隐式添加到所有的视图搜索查询中
limit
(选填)- 默认情况下,列表显示的记录数,在web客户端中默认为80
auto_search
(选填)- 是否应在加载默认视图后立即执行搜索视图。默认为
True
例如,打开客户使用的 (与 customer
标志设置的合作伙伴) 列表和表单视图:
{
"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
- M2M1查看对象, 定义
views
的初始内容 view_id
- 特定视图添加到
views
列表中,如果它的类型是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)
URL 动作 (ir.actions.act_url
)
允许通过Odoo动作打开URL(网站/网页)。可以通过两个字段进行定制:
url
- 激活动作时打开的地址
target
- 在新窗口/页面中打开地址,如果是
new
, 则用页面替换当前内容self
。 默认为new
{
"type": "ir.actions.act_url",
"url": "http://odoo.com",
"target": "self",
}
将用Odoo主页替换当前内容部分。
服务器动作 (ir.actions.server
)
允许从任何有效的动作位置触发复杂服务器代码。只有两个字段与客户端有关:
id
- 要运行的服务器动作数据库中的标识符
context
(选填)- 运行服务器动作时要使用的上下文数据
数据库中的记录明显更丰富,并且可以根据其状态执行大量特定的或通用的动作 state
. 一些字段(和相应的行为)在状态中共享:
model_id
- Odoo模型链接到动作,通过 contexts 赋值
condition
(选填)- 使用服务器动作的 context 赋值 为Python代码。 如果为
False
, 则阻止动作运行。默认为:True
有效的动作类型 (state
字段) 是可扩展的, 默认类型是:
code
默认和最具灵活性的服务器动作类型,使用动作的 context 赋值 检测任意的Python代码。 仅使用一个特定类型的特定字段:
code
- 一段Python代码在调用动作时执行
<record model="ir.actions.server" id="print_instance">
<field name="name">Res Partner Server Action</field>
<field name="model_id" ref="model_res_partner"/>
<field name="code">
raise Warning(object.name)
</field>
</record>
注解
代码段中可以定义一个名为“action”的变量,它将作为下一个要执行的动作返回给客户端:
<record model="ir.actions.server" id="print_instance">
<field name="name">Res Partner Server Action</field>
<field name="model_id" ref="model_res_partner"/>
<field name="code">
if object.some_condition():
action = {
"type": "ir.actions.act_window",
"view_mode": "form",
"res_model": object._name,
"res_id": object.id,
}
</field>
</record>
将要求客户打开一个表单记录,如果它满足一些条件
这往往是在 数据文件 创建的唯一操作类型, 除了 multi 外,其它类型比Python代码定义的更简单,从UI定义,而不是从 数据文件 中定义。
object_create
创建一个新纪录,从头开始 (通过 create()
)
或通过复制现有记录 (通过 copy()
)
use_create
创建的方法,其中之一:
new
- 在由
model_id
指定的模型中创建一个记录 new_other
- 在由
crud_model_id
指定的模型中创建一个记录 copy_current
- 复制调用操作的记录
copy_other
- 复制其他记录,通过
ref_object
获取
fields_lines
要在创建或者复制记录时覆盖的字段。
One2many
与字段:col1
ir.model.fields
在use_create
隐含的模型中设置value
- 字段的值,通过
type
解释 type
- 如果是
value
,value
字段被解释为一个字面值(可能被转换), 如果equation
的value
字段是解释为Python表达式并被进行求值
crud_model_id
- 模型中创建一个新纪录, 如果
use_create
被设置为new_other
ref_object
Reference
要复制的任意记录, 如果use_create
设置为copy_other
,则使用link_new_record
- booleac标志通过
link_field_id
指定的many2one字段将新创建的记录链接到当前记录, 默认为False
link_field_id
- many2one 到
ir.model.fields
,指定当前记录的m2o字段,应在其上设置新创建的记录(模型应该匹配)
object_write
与 object_create 类似,但会更改现有记录,而不是创建新纪录
use_write
写的方法,以下之一:
current
- 写入当前记录
other
- 写入通过
crud_model_id
和ref_object
选择的其他记录 expression
- 写入通过
crud_model_id
选择其模型的其他记录,并通过创建write_expression
选择其id
write_expression
- 返回记录或对象标识的Python表达式,在
use_write
设置为expression
使用, 以便决定应该修改哪个记录 fields_lines
- 查阅 object_create
crud_model_id
- 查阅 object_create
ref_object
- 查阅 object_create
multi
一个接一个执行多个动作。要执行的动作通过 child_ids
m2m定义. 如果子动作本身返回动作,最后一个将作为自己的下一个动作返回到客户端
trigger
向工作流发送信号
wkf_transition_id
- 触发
Many2one
到workflow.transition
use_relational_model
- if
base
(默认), 则代表当前记录触发信号。 如果是relational
,则代表通过wkf_model_id
和wkf_field_id
选择当前记录的字段触发信号
client_action
用于直接返回使用 action_id
定义的其他的间接动作。将该动作返回给客户端执行
求值上下文
在服务器动作求值上下文中或周围有多个密钥可用:
self
- 通过
model_id
链接到动作的模型对象 object
,obj
- 仅在提供
active_model
和active_id
(通过上下文)时可用,否则为None
。 由active_id
选择实际的记录 pool
- 当前数据库注册表
datetime
,dateutil
,time
- 对应的Python模块
cr
- 当前位置
user
- 当前用户记录
context
- 执行上下文
Warning
Warning
异常的构造函数
报表动作 (ir.actions.report.xml
)
触发报表的打印
name
(必填)- 用在列表视图中作为描述显示或者排序
model
(必填)- 您的报表所关注的模型
report_type
(必填)qweb-pdf
用于PDF报表或qweb-html
用于HTMLreport_name
- 您的报表的名称(这将是PDF输出的名称)
groups_id
Many2many
字段允许查看/使用当前报表的分组paperformat_id
Many2one
字段设置适合此报表的纸张格式(如果未指定,将使用默认格式)attachment_use
如果设置为
True
,报表只在第一次请求时生成,并且随后则为从存储的报表中直接打印,而不是每次都重新生成。可用于只能生成一次的报表 (例如出于法律的原因)
attachment
- 定义报表名称的Python表达式;该记录可作为变量访问
object
客户端动作 (ir.actions.client
)
触发完全在客户端中实现的动作。
tag
- 客户端动作的标识符,客户端应知道如何响应任意的字符串
params
(选填)- 发送给客户端附加数据的Python字典,以及客户端动作标签
target
(选填)- 客户端动作应在内容区域(
current
), 或在全局模式下 (fullscreen
) 对话框/弹出窗口 (new
)中打开。使用main
而不是current
清除面包屑。默认为current
.
{
"type": "ir.actions.client",
"tag": "pos.ui"
}
告诉客户端启动Point of Sale接口,服务器是不知道POS接口是如何工作的。