odoo中的动作一共有6种:
Window Actions (ir.actions.act_window)
URL Actions (ir.actions.act_url)
Server Actions (ir.actions.server)
Report Actions (ir.actions.report)
Client Actions (ir.actions.client)
Automated Actions (ir.cron)
Actions定义系统响应用户操作的行为:登录、操作按钮、选择发票、等等。动作可以存储在数据库中,也可以直接作为字典返回,例如按钮方法。
所有操作都有两个强制属性:type, name。
type:当前操作的类别,决定可以使用哪些字段以及如何解释该操作。
name:简短的用户可读的动作描述,可以显示在客户端的界面上。
一个客户端可以获得四种形式的动作:
1.False 如果当前有任何动作对话框打开,请关闭它
2.A string 如果客户端动作匹配,解释为客户端动作的标签,否则作为一个数字处理
3.A number 从数据库中读取相应的动作记录,可能是数据库标识符或external id
4. A dictionary 将其视为客户端操作描述符并执行
除了两个强制属性外,所有操作还共享可选属性,用于在任意模型的上下文菜单中表示操作
binding_model_id:指定动作绑定到哪个模型
binding_type:指定绑定的类型,这主要是操作将出现在下面的上下文菜单。action (default):指定操作将出现在绑定模型的操作上下文菜单中。report:指定操作将出现在绑定模型的“打印上下文”菜单中。
binding_view_types:以逗号分隔的视图类型列表,动作会出现在上下文菜单中,主要是“list”和/或“form”。默认列表,表单(列表和表单)
一 Window Actions (ir.actions.act_window)
最常见的操作类型,用于通过视图表示模型的可视化:窗口操作为模型定义了一组视图类型(可能是特定的视图)(也可能是模型的特定记录)
字段有:
res_model :模型来源
views :一个(view_id, view_type)对的列表。每一对中的第二个元素是视图的类别(树、表单、图……),第一个元素是一个可选的数据库id(或False)。如果没有提供id,客户机应该为请求的模型获取指定类型的默认视图(这是由fields_view_get()自动完成的)。列表的第一种类型是默认视图类型,在执行操作时默认打开。每种视图类型最多只能在列表中出现一次
res_id (optional):如果默认视图是form,指定要加载的记录(否则应该创建一个新记录)
search_view_id (optional):id, name)对,id是加载操作的特定搜索视图的数据库标识符。默认获取模型的默认搜索视图
target (optional):视图是否应该在主内容区(当前)、全屏模式(全屏)或对话框/弹出窗口(新建)中打开。使用main而不是current来清除面包屑。默认为当前。
context (optional):传递给视图的附加上下文数据
domain (optional):过滤域以隐式添加到所有视图搜索查询
limit (optional):默认情况下在列表中显示的记录数量。web客户端默认值为80
ps:使用列表和表单视图打开客户(与客户标志集合作)
{
"type": "ir.actions.act_window",
"res_model": "res.partner",
"views": [[False, "tree"], [False, "form"]],
"domain": [["customer", "=", true]],
}
ps:或者在新对话框中打开特定产品的表单视图(分别获得)
{
"type": "ir.actions.act_window",
"res_model": "product.product",
"views": [[False, "form"]],
"res_id": a_product_id,
"target": "new", # 新窗口
}
数据库内窗口操作有几个不同的字段,这些字段应该被客户端忽略,主要用于组成视图列表
- view_mode (default= tree,form )
以逗号分隔的视图类型列表(/!)\没有空格/!)。所有这些类型都将出现在生成的视图列表中(至少有一个假view_id) - view_ids
用于查看对象,定义视图的初始内容
ps:
<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中的某个视图填充
<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>
二 URL Actions (ir.actions.act_url)
允许打开一个URL(网站/网页)通过Odoo的行动。可以通过两个字段自定义:url target
{
"type": "ir.actions.act_url",
"url": "https://odoo.com",
"target": "self",
}
上面代码表示将由url中的地址,取代当前页面
三 Server Actions (ir.actions.server)
服务器的行为模型。服务器动作在一个基础模型上工作,并提供各种类型的动作,这些动作可以自动执行,例如使用基础动作规则,或者通过在“More”上下文菜单中添加动作来手动执行。
自odo8.0以来,一个按钮“创建菜单动作”按钮在动作表单视图中是可用的。它在基本模型的More菜单中创建一个条目。这允许创建服务器动作,并通过接口以大规模模式轻松地运行它们。
可用的操作有:
' Execute Python Code ':将被执行的Python代码块
‘Create a new Record’:用新值创建一个新记录
‘Write on a Record’: 更新记录
‘Execute several actions’: 定义触发其他几个服务器操作的操作
允许从任何有效的操作位置触发复杂的服务器代码。只有两个字段与客户端相关
id 要运行的服务器操作的数据库内标识符
context (optional) 运行服务器操作时要使用的上下文数据
model_id 模型链接到Odoo的动作
state:
1.code: 执行通过code参数给出的python代码.
2.object_create: 按照fields_lines规范创建模型crud_model_id的新记录
3.object_write: 按照fields_lines规范更新当前记录
4.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 ir.model.field,指定应该在其上设置新创建的记录的当前记录的m2o字段(模型应该匹配)。
fields_lines (create/write):
child_ids (multi):
四 Report Actions (ir.actions.report)
出发打印报表
如果您通过< record>而不是< report>标签定义报表,并且希望该操作显示在模型视图的打印菜单中,您还需要从Bindings中指定binding_model_id。没有必要设置binding_type来报告,因为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表达式;记录可以作为变量对象访问
五 Client Actions (ir.actions.client)
触发一个完全在客户端中实现的操作。
- tag 操作的客户端标识符,一个客户端应该知道如何响应的任意字符串
- params (optional) 客户端操作是否应该在主内容区(当前)、全屏模式(全屏)或对话框/弹出窗口(新建)打开。使用main而不是current来清除面包屑。默认为当前。
{
"type": "ir.actions.client",
"tag": "pos.ui"
}
六 Automated Actions (ir.cron)
动作自动触发在预先设定的频率。
- name 自动操作的名称(主要用于日志显示)
- interval_number 两次执行该操作之间的interval_type uom数目
- interval_type 频率间隔的测量单位
- numbercall 操作必须运行的次数。如果该操作预计将无限期运行,则将其设置为-1
- doall 布尔警告在服务器重启的情况下是否必须执行错过的操作。
- model_id 此操作将在其上调用的模
- code 动作的代码内容。可以简单调用模型的方法
model.<method_name>()
- nextcall 此动作的下一次计划执行日期(日期/时间格式)