操作¶
操作定义了系统对用户操作的响应行为:登录、操作按钮、选择发票等。
操作可以存储在数据库中,也可以直接作为字典返回,例如在按钮方法中。所有操作都共享两个必需属性:
type
当前操作的类别,决定了可以使用哪些字段以及如何解释该操作。
name
操作的简短用户可读描述,可能会在客户端界面中显示
客户端可以以4种形式获取操作:
绑定¶
除了两个必填属性外,所有操作还共享用于在任意模型的上下文菜单中呈现操作的 可选 属性:
binding_model_id
指定操作绑定到哪个模型
注解
对于服务器操作,请使用
model_id
。binding_type
指定绑定类型,大多数情况下是指定操作将出现在哪个上下文菜单中
action
(default)指定该操作将出现在绑定模型的
上下文菜单中。report
指定该操作将出现在绑定模型的
上下文菜单中。
binding_view_types
一个逗号分隔的视图类型列表,用于指定操作在上下文菜单中显示的视图类型,主要是 “list” 和 / 或 “form”。默认为
list,form
(既有列表又有表单)
窗口操作 (ir.actions.act_window
)¶
最常见的操作类型,用于通过 视图 来展示模型的可视化:窗口操作定义了模型的一组视图类型(可能还包括特定视图)(以及可能是模型的特定记录)。
它的字段为:
res_model
用于展示视图的模型
views
一个
(view_id, view_type)
对的列表。每对的第二个元素是视图的类别(tree, form, graph, …),第一个元素是可选的数据库id(或False
)。如果没有提供id,客户端应该获取请求模型的指定类型的默认视图(这是由fields_view_get()
自动完成的)。列表中的第一个类型是默认视图类型,在执行操作时将默认打开。每个视图类型在列表中最多出现一次res_id
(optional)如果默认视图是
form
,则指定要加载的记录(否则应创建新记录)search_view_id
(optional)(id, name)
对,id
是特定搜索视图的数据库标识符,用于加载操作。默认获取模型的默认搜索视图target
(optional)是否应该在主内容区域中打开视图(
current
),全屏模式中打开视图(fullscreen
)或在对话框/弹出窗口中打开视图(new
)。使用``main``而不是``current``来清除面包屑。默认为``current``。context
(optional)传递给视图的附加上下文数据
domain
(optional)筛选域,隐式添加到所有视图搜索查询中
limit
(optional)默认情况下在列表中显示的记录数。在Web客户端中默认为80。
例如,要打开带有列表和表单视图的客户(设置了 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
(default=tree,form
)逗号分隔的视图类型列表,作为字符串(/!\ 不要有空格 /!\)。所有这些类型都将出现在生成的
views
列表中(至少有一个False
view_id)view_ids
M2M1 to view objects, defines the initial content of
views
注解
Act_window 视图也可以通过
ir.actions.act_window.view
来定义清晰。如果您计划为您的模型允许多个视图,请优先使用 ir.actions.act_window.view 而不是
view_ids
动作<record model="ir.actions.act_window.view" id="test_action_tree"> <field name="sequence" eval="1"/> <field name="view_mode">tree</field> <field name="view_id" ref="view_test_tree"/> <field name="act_window_id" ref="test_action"/> </record>
view_id
在
view_mode
列表中,如果特定视图的类型是列表中的一部分,并且尚未被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”视图。
The server-side composition of the views
sequence is the following:
从
view_ids
中获取每个(id, type)
(按sequence
排序)如果
view_id
已定义且其类型尚未填充,则附加其(id, type)
对于
view_mode
中的每个未填充的类型,追加(False, type)
- 1
技术上不是M2M:添加一个序列字段,可以由仅视图类型组成,而无需视图ID。
URL Actions (ir.actions.act_url
)¶
允许通过Odoo操作打开URL(网站/网页)。可以通过两个字段进行自定义:
url
激活操作时要打开的地址
target
在新窗口/页面中打开地址,如果是
new
,则用页面替换当前内容,如果是self
。默认为new
{
"type": "ir.actions.act_url",
"url": "https://odoo.com",
"target": "self",
}
将用Odoo主页替换当前内容部分。
服务器操作 (ir.actions.server
)¶
- class odoo.addons.base.models.ir_actions.IrActionsServer(env, ids, prefetch_ids)[源代码]¶
服务器动作模型。服务器动作基于基础模型,提供各种类型的动作,可以自动执行,例如使用基础动作规则,或手动添加到“更多”上下文菜单中。
自Odoo 8.0版本起,在操作表单视图中提供了一个“创建菜单动作”按钮。它会在基本模型的“更多”菜单中创建一个条目。这样可以轻松地通过界面创建服务器动作并以批量模式运行它们。
可用的操作有:
‘执行 Python 代码’:将执行一段 Python 代码块
‘创建新记录’:创建一个带有新值的新记录
‘写入记录’: 更新记录的值
‘执行多个操作’: 定义一个触发多个其他服务器操作的操作
允许从任何有效的操作位置触发复杂的服务器代码。对客户端而言,只有两个字段是相关的:
id
要运行的服务器操作的数据库内标识符
context
(optional)运行服务器操作时使用的上下文数据
在数据库中的记录更加丰富,可以根据其 state
执行许多特定或通用的操作。某些字段(以及相应的行为)在不同的状态之间是共享的:
model_id
与该操作相关联的Odoo模型。
state
code
:通过``code``参数执行给定的Python代码。object_create
:根据``fields_lines``的规范创建模型``crud_model_id``的新记录。object_write
:根据``fields_lines``的规范更新当前记录multi
:通过``child_ids``参数执行多个操作。
状态字段¶
根据其状态,行为是通过不同的字段定义的。每个字段后面都给出了相关状态。
code
(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="state">code</field> <field name="code"> raise Warning(record.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="state">code</field> <field name="code"> if record.some_condition(): action = { "type": "ir.actions.act_window", "view_mode": "form", "res_model": record._name, "res_id": record.id, } </field> </record>
如果记录满足某些条件,将要求客户端打开该记录的表单
crud_model_id
(create)(required)创建新记录的模型
link_field_id
(create)many2one to
ir.model.fields
,指定当前记录的m2o字段,新创建的记录应该设置在该字段上(模型应该匹配)fields_lines
(create/write)在创建或复制记录时要覆盖的字段。使用字段为
One2many
:col1
ir.model.fields
用于在相关模型中设置(crud_model_id
用于创建,model_id
用于更新)value
字段的值,通过
type
解释type
(value|reference|equation)如果是
value
,则value
字段将被解释为字面值(可能会被转换),如果是equation
,则value
字段将被解释为 Python 表达式并进行求值
child_ids
(multi)指定多个子操作(
ir.actions.server
)以在多状态下执行。如果子操作本身返回操作,则最后一个操作将作为多操作的下一个操作返回给客户端
评估上下文¶
在服务器操作的评估上下文或周围环境中,有许多键可用:
model
通过model_id
与动作关联的模型对象record
/records
record/recorset on which the action is triggered, can be void.env
Odoo Environmentdatetime
,dateutil
,time
,timezone
对应的 Python 模块log: log(message, level='info')
logging function to record debug information in ir.logging tableWarning
异常的构造函数
报告操作 ( ir.actions.report
)¶
触发报告打印。
如果您通过 <record>
而不是 <report>
标签来定义报表,并且希望该操作显示在模型视图的打印菜单中,您还需要从 绑定 指定 binding_model_id
。不需要将 binding_type
设置为 report
,因为 ir.actions.report
会隐式地默认为该值。
name
(mandatory)如果未指定
print_report_name
,则用作文件名。否则,仅在查找报告时作为助记符/描述在某种列表中有用。model
(mandatory)报告所涉及的模型
report_type
(default=qweb-pdf)要么选择
qweb-pdf
生成 PDF 报告,要么选择qweb-html
生成 HTML 报告report_name
(mandatory)报表渲染所使用的 qweb 模板的名称 (外部 ID)
print_report_name
Python表达式,定义报表的名称。
groups_id
Many2many
字段,用于允许查看/使用当前报告的用户组multi
如果设置为
True
,该操作将不会显示在表单视图上。paperformat_id
Many2one
字段用于指定您希望为此报表使用的纸张格式(如果未指定,则使用公司格式)attachment_use
如果设置为
True
,则报告仅在第一次请求时生成,并从存储的报告中重新打印,而不是每次重新生成。可用于只需生成一次的报告(例如出于法律原因)
attachment
定义报表名称的Python表达式;记录可以通过变量
object
访问
客户端操作 (ir.actions.client
)¶
在客户端中完全实现的操作触发器。
tag
操作的客户端标识符,一个任意字符串,客户端应该知道如何做出反应
params
(optional)一个Python字典,用于在客户端操作标签旁边向客户端发送附加数据
target
(optional)是否应该在主内容区域中打开客户端操作(
current
),全屏模式(fullscreen
)或对话框/弹出窗口(new
)。使用main
而不是current
来清除面包屑。默认为current
。
{
"type": "ir.actions.client",
"tag": "pos.ui"
}
告诉客户端启动销售点界面,服务器不知道销售点界面的工作方式。
自动化操作 (ir.cron
)¶
在预定义频率上自动触发的操作。
name
自动化操作的名称(主要用于日志显示)
interval_number
在两次执行操作之间的 interval_type uom数量
interval_type
频率间隔的度量单位(
分钟
,小时
,天
,周
,月
)numbercall
此操作需要运行的次数。如果预计此操作将无限运行,请设置为
-1
。doall
布尔值,指定在服务器重新启动时是否需要执行未执行的操作。
model_id
将调用此操作的模型
code
操作的代码内容。可以是对模型方法的简单调用:
model.<method_name>()
nextcall
此操作的下一次计划执行日期(日期/时间格式)