操作定义系统响应用户操作的行为:登录、操作按钮、发票的选择,…
操作可以存储在数据库中,也可以直接作为字典返回,例如按钮方法。所有操作共享两个强制属性:
type
当前操作的类别,决定可以使用哪些字段以及如何理解操作
name
短的用户可读的操作描述,可以显示在客户端的界面中
客户端可以以4种形式获得操作:
False
如果当前打开任何操作对话框,关闭它
字符串
如果客户端操作匹配,则将其解释为客户端操作的标记,否则将其视为数字
数字
从数据库中读取相应的操作记录,可以是数据库标识符或外部ID
字典
作为客户端操作描述符进行处理并执行
窗口操作 (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)
对,id是用于加载该操作的特定搜索视图的数据库标识符。默认获取模型的默认搜索视图
target
(可选择的)
视图在主内容区(current)是否应该是开放的,在全屏模式下(fullscreen
) 或者对话框/弹出框模式下(new
)。使用main
而不是 current
来清除碎片。默认情况下是current
context
(可选择的)
要传递给视图的附加上下文数据
domain
(可选择的)
过滤域以隐式地添加到所有视图搜索查询
limit
(可选择的)
默认情况下在列表中显示的记录数。Web客户端默认为80
auto_search
(可选择的)
加载默认视图后是否应该立即进行搜索。默认为 True
例如,用列表和表单视图打开客户(使用customer
标志集的partner对象):
{
"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
M2M[1] 视图对象,定义一个初始化的views内容
view_id
特定的视图添加到views的列表的情况下,其类型是view_mode列表的一部分不是已经被一个view_ids中的视图填充
这些字段大多当定义来自数据文件的操作是被使用:
A Test Action
some.model
graph
将使用"my_specific_view"视图即使它不是模版的默认视图。
views
序列的服务器端组合如下:
- 从
view_ids
得到每个(id, type)对(以sequence排序) - 如果
view_id
定义了并且它的类型尚未填充,追加它的(id, type)
- 在view_mode中每一个没有填充的类型,追加n
view_mode
, append(False, type)
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模型在评估上下文中是有效的
condition
(可选择的)
使用服务器操作的评估上下文作为Python代码进行评估。如果是False
,阻止操作执行。默认值: True
有效的操作类型(state
字段)是可扩展的, 默认的类型是:
code
默认的和最灵活的服务器操作类型,在操作的评估上下文中执行任意的Python代码。只使用一个特定类型的特定字段:
code
当调用操作时执行的Python代码
Res Partner Server Action
raise Warning(object.name)
注
代码段可以定义一个名为action的变量,该变量将作为下一个操作来返回给客户端执行:
Res Partner Server Action
if object.some_condition():
action = {
"type": "ir.actions.act_window",
"view_mode": "form",
"res_model": object._name,
"res_id": object.id,
}
如果条件满足,将要求客户打开一个记录表单
这往往是从数据文件中创建的惟一动作类型,除了多个类型之外,其他类型比从Python定义的Python代码更简单,而不是从数据文件中定义。
object_create
创建一个新的记录,从头开始(通过create()
)或复制现有的记录(通过copy()
)
use_create
创建策略,可选择以下一种策略:
new
通过指定model_id的模型创建记录
new_other
通过指定crud_model_id的模型创建记录
copy_current
复制调用操作的记录
copy_other
复制其他记录,通过ref_object获取
fields_lines
创建或复制记录时要覆盖的字段。和字段One2many
:
col1
用use_create隐含的模型设置 ir.model.fields
value
字段的值,通过type解释
type
如果value有值,value字段被解释为一个文字值(可能转换),如果value有值,value
字段被解释为一个Python表达式并进行评估
crud_model_id
创建新记录的模型,如果use_create设置为 new_other
ref_object
引用(Reference
)任意记录的复制,如果use_create设置为copy_other时使用
link_new_record
通过many2one字段连接新创建的记录到当前记录的布尔标志通过link_field_id指定, 默认为 False
link_field_id
ir.model.fields
的many2one指定当前记录的many2one类型字段应设置为新创建的记录(模型应该匹配)
object_write
类似object_create但改变现有的记录,而不是创建一个
use_write
保存(更新)策略,可选择以下一种策略:
current
保存(更新)当前记录
other
通过crud_model_id和ref_object保存(更新)一条选择的其他记录
expression
保存(更新)一条其他记录,它的模型是通过crud_model_id选择的,且它的id是评估write_expression选择的
write_expression
Python表达式返回一个记录或对象id,当use_write设置为为了决定那个记录应该被修改的expression时使用
fields_lines
详见 object_create
crud_model_id
详见 object_create
ref_object
详见 object_create
multi
一个接一个执行多个操作。执行的操作通过many2many类型的child_ids
字段定义。如果子操作本身返回操作,最后一个被返回到客户端的操作作为多操作自己的下一步操作
trigger
发送一个信号到工作流。
wkf_transition_id
Many2one
字段到 workflow.transition
的触发
use_relational_model
如果是base
(默认的),代表当前记录的触发信号。如果是relational
, 代表通过wkf_model_id
和wkf_field_id选中的当前记录一个字段的触发信号
client_action
直接返回一个其他操作使用action_id间接的定义。简单的返回到客户端的执行操作
评估上下文在服务器环境或周围服务器操作的评估上下文中有许多键可用:
model
通过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
(强制性的)
only作为对报告的一个记忆/描述, 只有在查找某个列表中的某个列表时才有用
model
(强制性的)
你报告的模版将是有作用的
report_type
(强制性的)
要么是为了PDF报告的qweb-pdf
要么是为了HTML的qweb-html
report_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"
}
告诉客户端开始销售点接口,否则 服务器端不知道POS接口如何工作的
注[1] 技术上没有M2M: 添加一个序列字段,可能只是一个视图类型,没有一个视图id。
ps:有翻译不当之处,欢迎留言指正。
原文地址:https://www.odoo.com/documentation/10.0/reference/actions.html