动作(Actions)定义了系统响应用户操作的具体行为:比如登陆,点击按钮,选择一个发票单 据,等等。
Actions 可以存储在数据库中或直接以字典(dictionaries)形式返回,比如按钮所运行的函 数。所有的actions有两个必须的属性:
type
-
当前action的类别。该属性决定了哪些字段会被用来解析这个action
name
-
一个可读的action的描述,可能会显示在客户端界面上
客户端会接收到4种形式的action
Window Action (ir.actions.act_window
)
这是最常见的action类型用来将模型数据通过视图(view)来呈现。一个window
action
可定义数据模型(或者某个数据记录)的多种视图类型(或者某个特定的视图类型)
使用到的字段包括:
res_model
-
视图所绑定的数据模型
views
-
其值由一个或多个
(view_id, view_type)
元组对组成的列表。元组中的第二项表示 视图的类型,比如:tree
,form
,graph
… 。第一个项是一个可选数据库id( 或者False
)。如果没有指定id,客户端将为对应的数据模型获取一个默认的视图。 (这是由fields_view_get()
函数自动完成的)。action被执行时,这个views
所对应的 列表中的第一个视图类型会作为视图的默认类型。每种视图类型在列表中最多只能出现 一次。 res_id
(可选)-
如果默认视图是
form
(表单视图), 如果指定了res_id则其对应的记录会被显示,否 则显示新的记录。 search_view_id
(可选)-
其值为
(id, name)
对。id是数据库指定的搜索视图的数据库id。非指定则加载默认 搜索视图。 target
(可选)-
如果视图在当前主内容区打开则选择
current
,如果以全屏模式打开则选fullscreen
,或者以对话弹出框形式则为new
。main
与current
的区别 是main
会清除当前的‘面包屑‘(breadcrumbs), 默认值为current
。 context(可选)
-
另外传送到视图的上下文(context)数据
domain(可选)
-
隐式的对视图中的记录添加过滤规则
limit(可选)
-
列表中每页默认显示的记录数。默认记录数为:80
auto_search(可选)
-
是否在加载视图后立即执行一个搜索的操作,默认是
True
比如:打开客户(就是合作伙伴(Partner)的customer
标签为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",
}
数据库中的window action记录还有下列字段,现在已经不直接使用了,会被客户
端忽略掉。它们的作用被views
字段所取代,它们的值会被组合成views
的值:
view_mode
-
由逗号分割的视图类型列表,会被添加到
views
列表中,`view_id`为False view_ids
-
关联的视图对象id,`views`的初始值
view_id
-
如果其视图类型在
view_mode
中有定义而id不在view_ids
中,则添加到views
中
这些字段在视图的数据文件中经常用到:
<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
中按sequence
顺序取出(id, type) -
如果
view_id
有定义并且其视图类型尚未在view_ids
中,则将其(id, type)附加 到views
列表中 -
对于
view_mode
中指定但view_ids
和view_id
中都没有指定的视图,在views
列表中附加(False, type)
URL Action (ir.actions.act_url
)
用于通过Odoo Action来打开一个URL(website/页面)。通过下面两个字段来控制:
url
-
action激活时打开的页面地址
target
-
如果其值为
new
则在新的窗口中打开页面,如果其值为self
则在当前页面打开 。默认值为new
{
"type": "ir.actions.act_url",
"url": "http://odoo.com",
"target": "self",
}
会用将当前的页面用Odoo的首页代替。
Server Action (ir.action.server
)
用于在任意有效的action位置触发服务器端的复杂代码。下面两个字段的值对客户端有效:
id
-
server action在数据库中的id
context
-
在server action运行时所使用的上下文信息
数据库记录中有丰富的配置可以基于state
来触发动作。某些字段的值及其关联行为用
于不同的状态:
动作类型(即state
字段的值)是可以扩展的,默认的类型有:
code
默认的最灵活的server action类型,通过上下文解析来执行任意的Python 代码。只用到一个跟该类型相关的字段:
code
-
当action被激活时调用的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>
注意:代码部分可以定义一个叫做
在满足某些条件(some_condition)的情况下,请客户端打开指定记录的表单视图 |
这基本上是除了multi以外唯一倾向于在数据文件上创建的action类型,其他的action 类型比Python代码要简单的多更应该在界面上创建。
object_create
创建一个新的记录(通过调用create()
)或者拷贝一个已有的记录(通过调用
copy()
)
use_create
-
记录创建规则,其可选值为下列之一:
-
new
: 新建一条model_id
指定的数据模型下的记录 -
new_other
: 新建一条crud_model_id
指定的数据模型下的记录 -
copy_current
: 复制当前action所对应的记录 -
copy_other
: 复制ref_object
所指定的记录
-
fields_lines
-
当创建或拷贝记录时的默认字段值。字段值以
One2many
的列表形式保存:-
col1
:use_create
所选定的模型对象上的字段(ir.model.fields
) -
value
: 字段对应的值,根据type
不同解析 -
type
: 如果type为value
那么上述字段中的值不做处理;如果type为equation
那么上述字段中的值将作为Python表达式解析。
-
crud_model_id
-
当
use_create
设为new_other
时用于创建记录所对应的模型 ref_object
-
当
use_create
中设为copy_other
时,这里的值为拷贝的对象 link_new_record
-
其值为
True
或False
。如果为True,则通过link_field_id
所指定的many2one
字段来将创建的记录与当前记录关联。 link_field_id
-
一个指向
ir.model.fields
对象的many2one
字段,使用目的见link_new_record
object_write
与object_create类似但不创建新纪录而是修改已有记录
use_write
-
记录修改规则,可选项为:
-
current
: 修改当前记录 -
other
: 修改crud_model_id
以及ref_object
所指定的记录 -
expression
: 修改crud_model_id
所指定的模型和write_expression
解析的结 果所指定的记录id
-
write_expression
-
当
use_write
选择expression
时,这里的值会作为Python表达式解析,解析结 果即为需要修改的记录值。 fields_lines
crud_model_id
ref_object
multi
按设定action一个接一个的执行。所有的action定义在一个多对多的字段:child_ids
上。如果其包含的action本身返回action, 最后一个action会返回给客户端作为
muti action的下一个action。
client_action
直接返回一个action_id
给客户端执行
上下文解析
在与server actions
相关的上下文解析中,有一系列的可用参数:
model
-
通过
model_id
关联到action的model对象 object
,obj
-
只有在context中存在
active_model
和active_id
时可用,其记录由active_id
决定。否则,其值为None
pool
-
当前数据库注册表
datetime
,dateutil
,time
-
对应的Python模块
cr
-
当前的数据库游标
user
-
当前的用户
context
-
运行环境上下文
Warning
-
Warning
构造器
报表Action (ir.actions.report
)
用于激发报表打印
name
(必须)-
报表动作名称说明用于辨识
model
(必须)-
报表所绑定的数据模型
report_type
(必须)-
qweb-pdf
即PDF报表,qweb-html
即HTML报表 report_name
-
报表的名称
group_id
-
多对多字段用以记录可以访问,使用该报表的用户组
paperformat_id
-
Many2one
字段用来记录该报表使用的纸张格式,如为定义则使用公司上定义的格式 。 attachement_use
-
如果设置为
True
则报表只生成一次,一般用以因法律原因只能生成一次的报表 attachement
-
报表生成的附件名称。
客户端Action (ir.actions.client)
tag
-
客户端action的标示名
params
(可选)-
是一个Python的字典包含了一些发送到客户端的数据
target
(可选)
{
"type": "ir.actions.client",
"tag": "pos.ui"
}
通知客户端启动POS界面,服务器端并不知道POS界面如何工作