Actions
操作定义系统响应用户操作的行为:登录,操作按钮,发票选择,......
动作可以存储在数据库中,或者作为字典直接返回到例如数据库中。 按钮方法。 所有操作共享两个必需属性:
type
当前action的类别,确定可以使用哪些字段以及如何解释action
name
用户可读且简短描述的action,可能会显示在客户端的界面中
客户可以获得4种形式的行动:
False
如果当前打开任何操作对话框,请将其关闭
A string
如果客户端action匹配,则将其解释为客户端action的标记,否则将其视为数字
A number
从数据库中读取相应的action记录,可以是数据库标识符或外部id
A dictionary
视为客户端操作描述符并执行
Window Actions (ir.actions.act_window
)
最常见的action类型,用于通过视图显示模型的可视化:窗口操作定义模型的一组视图类型(以及可能的特定视图)(以及可能的模型的特定记录)。
它的字段是:
res.model
呈现视图的模型
views
类似(view_id
,view_type
)这种一对的列表。 每对的第二个元素是视图的类别(树,表单,图形,...),第一个是可选的数据库ID(或False
)。 如果未提供id,则客户端应获取所请求模型的指定类型的默认视图(这由fields_view_get()
自动完成)。 列表的第一种类型是默认视图类型,默认情况下将在执行操作时打开。 每个视图类型在列表中最多只能出现一次
res_id
(optional)
如果默认视图是表单,则指定要加载的记录(否则应创建新记录)
search_view_id
(optional)
(id,name)这一对,id是要为操作加载的特定搜索视图的数据库标识符。 默认为获取模型的默认搜索视图
target
(optional)
是否应在主要内容区域(current
)、全屏模式(fullscreen
)或对话框/弹出窗口(new
)中打开视图。 使用main
而不是current
来清除面包屑。 默认为current
。
context
(optional)
要传递给视图的其他context数据
domain
(optional)
过滤域以隐式添加到所有视图搜索查询
limit
(optional)
默认情况下列表中显示的记录数。 Web客户端中默认为80
auto_search
(optional)
是否应在加载默认视图后立即执行搜索。 默认为True
例如,要使用列表和表单视图打开costomers(具有costomer
标志集的合作伙伴):
{
"type": "ir.actions.act_window",
"res_model": "res.partner",
"views": [[False, "tree"], [False, "form"]],
"domain": [["customer", "=", true]],
}
或者在新对话框中打开特定product的表单视图(单独获取):
{
"type": "ir.actions.act_window",
"res_model": "product.product",
"views": [[False, "form"]],
"res_id": a_product_id,
"target": "new",
}
数据库内窗口操作有几个不同的字段,客户端应该忽略这些字段,主要用于组成view列表:
view_mode
以逗号分隔的视图类型列表作为字符串。 所有这些类型都将出现在生成的view列表中(至少有一个False
view_id)
view_ids
M2M1查看对象,定义view的初始内容
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 Actions (ir.actions.act_url)
允许通过Odoo操作打开URL(网站/网页)。 可以通过两个字段进行定制:
url
激活操作时打开的地址
target
如果是new
,则在新窗口/页面中打开地址,如果是self
则用页面替换当前内容。 默认为new
{
"type": "ir.actions.act_url",
"url": "http://odoo.com",
"target": "self",
}
将替换Odoo主页的当前内容部分。
Server Actions (ir.actions.server)
允许从任何有效的操作位置触发复杂的服务器代码。 只有两个字段与客户端相关:
id
要运行的服务器操作的数据库内标识符
context
(optional)
运行服务器操作时要使用的context数据
数据库内记录非常丰富,可以根据其state
执行许多特定或通用操作。 某些字段(和相应的行为)在状态之间共享:
model_id
Odoo模型与行动相关联,在评估环境中提供
condition
(optional)
使用服务器操作的评估上下文评估为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定义的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
ir.model.fields
在use_creat
e隐含的模型中设置
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
boolean flag通过link_field_id
指定的many2one字段将新创建的记录链接到当前记录,默认为False
link_field_id
many2one到ir.model.fields
,指定当前记录的m2o字段,在该字段上应该设置新创建的记录(模型应该匹配)
object_write
与object_create
类似,但改变现有记录而不是创建记录
use_write
write政策,其中一个:
current
写入当前记录
other
通过crud_model_id
和ref_object
写入选择的其他记录
expression
写入另一条记录,其模型通过crud_model_id
选择,其id通过评估write_expression
来选择
write_expression
Python表达式返回记录或对象id,当use_write
设置为expression
时使用,以便决定应修改哪条记录
fields_lines
see object_create
crud_model_id
see object_create
ref_object
see object_create
multi
一个接一个地执行多个actions。 要执行的actions是通过child_ids
m2m(多对多)定义的。 如果sub-actions本身返回操作,则最后一个action将作为多个自己的下一个action返回给客户端
client_action
间接返回使用action_id
定义的其他action。 只需将该action返回给客户端即可执行。
Evaluation context
server actions的evaluation context中包含许多键:
model
通过model_id
模型对象链接到action
object
,obj
仅在提供active_model
和active_id
时(通过context)才可用,否则为None
。 通过active_id
选择的实际记录
pool
当前的数据库注册
datetime
, dateutil
, time
与python模块相关
cr
当前的游标
user
当前用户的记录
context
执行context
Warning
Warning
异常的构造函数
Report Actions (ir.actions.report
)
触发打印报告
name
(mandatory)
在某种列表中查找报表时,仅用作报表的助记符/描述
model
(mandatory)
report涉及的模型
report_type
(mandatory)
用于PDF报告的qweb-pdf
或用于HTML的qweb-html
report_name
报告的名称(将是PDF输出的名称)
groups_id
Many2many
字段允许组查看/使用当前报告
paperformat_id
Many2one
字段为您希望用于此报告的纸张格式(如果未指定,将使用公司格式)
attachment_use
如果设置为True
,则报告仅在第一次请求时生成,并在之后从存储的报告中重新打印,而不是每次都重新生成。
可用于必须仅生成一次的报告(例如,出于法律原因)
attachment
python表达式,用于定义报告的名称; 该记录可作为变量object
访问
Client Actions (ir.actions.client
)
触发完全在客户端中实现的action。
tag
操作的客户端标识符,客户端应该知道如何响应的任意字符串
params
(optional)
用于发送到客户端的其他数据的Python字典,以及客户端操作标记
target
(optional)
是否应在主内容区域(current
),全屏模式(fullscreen)或对话框/弹出窗口(new)中打开客户端action。 使用main
而不是current
来清除面包屑。 默认为current
。
{
"type": "ir.actions.client",
"tag": "pos.ui"
}
告诉客户启动销售点界面,服务器不知道POS界面如何工作。
技术上不是M2M:添加序列字段,可以只由视图类型组成,没有视图ID。