odoo10参考系列--操作(Actions)
操作定义系统响应用户操作的行为:登录、操作按钮、发票的选择,…
操作可以存储在数据库中,也可以直接作为字典返回,例如按钮方法。所有操作共享两个强制属性:
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中的视图填充
这些字段大多当定义来自数据文件的操作是被使用:
<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中每一个没有填充的类型,追加n
view_mode
, append(False, type)
URL操作 (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代码
<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>
如果条件满足,将要求客户打开一个记录表单
这往往是从数据文件中创建的惟一动作类型,除了多个类型之外,其他类型比从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
odoo10参考系列--操作(Actions)相关推荐
- Odoo10参考系列--QWeb报表
报表是写在HTML / QWeb中,像Odoo中的所有普通视图.你可以使用普通QWeb 流程控制工具.PDF的渲染是通过wkhtmltopdf执行的. 如果要在某个模型上创建报表,则需要定义该报表和它 ...
- odoo10参考系列--ORM API 二(新旧API兼容性、模型参考和方法修饰符)
新API与旧API的兼容性 现在的Odoo是从就的(不规律的)API过渡来的,它可能需要从一个手动桥接到另一个手动桥接: RPC层(XML-RPC和RPC)是在旧的API的形式表达,表达的纯粹的方法在 ...
- odoo10参考系列--ORM API 一(记录集、环境、通用方法和创建模型)
记录集 版本8.0中新东西: 这个在Odoo8.0中新加的API的页面文档应该是不断向前发展的主要开发API.同时它还提供了关于移植或桥接版本7和更早版本的"旧API"的信息,但没 ...
- Odoo10参考系列--Odoo指导方针
本文介绍了新版Odoo编码指南.那些旨在提高代码的质量 (例如更好的可读性)和Odoo应用程序.实际上,适当的代码简化了维护.调试,降低了复杂性,提高了可靠性. 这些指导原则应适用于每一个新的模块和新 ...
- Odoo10参考系列--混合而有用的类
Odoo实现了一些有用的类和混合,使您可以轻松地在对象上添加常用的行为.本指南将详细介绍其中的大部分内容,包括示例和用例. 消息特征 消息集成 基本消息系统 将消息功能集成到模型中非常容易.简单地继承 ...
- odoo10参考系列--QWeb
QWeb是被Odoo[2]使用的主要的模版引擎.它是一个XML模板引擎[1],主要用于生成HTML片段和页面. 模板指令指定的XML属性的前缀 t-,例如t-if 为条件,与元素和其他属性被直接渲染. ...
- odoo10参考系列--视图一(列表视图)
共同结构--一般视图都有的 视图对象公开了多个字段,除非另有说明,否则它们是可选的. name (强制性的) 在对某个列表进行查找时,仅作为对视图的一种记忆/描述是有用的 model 与视图关联的模型 ...
- odoo10参考系列--数据文件
Odoo就是一个非常大的数据驱动, 因此,模块定义的一大部分就是对其管理的各种记录的定义: 用户界面(菜单.视图),安全(访问权限和访问规则),报表和普通数据都通过记录定义. 结构 在Odoo定义数据 ...
- Odoo10参考系列--Mobile JavaScript
介绍 在Odoo 10.0中我们发布了一个移动app,允许您访问所有的Odoo apps (即使您自定义了模块). 应用程序是Odoo Web 和Native Mobile components的组合 ...
最新文章
- java门户网站项目代码_基于jsp的企业门户网站-JavaEE实现企业门户网站 - java项目源码...
- skipping non-radio button in group解决方法
- putty-psftp
- 一个架构的演化2--用ESB集成
- Java笔记-Semaphore简单应用实例
- 分布式锁的几种实现方式~
- 【20160924】GOCVHelper MFC增强算法(2)
- Cookie、Session、Token、JWT分别是什么(三)
- ListView加ArrayAdapter结合android.R.layout.activity_list_item快速实现图文显示
- Elasticsearch的Watcher插件
- 程序员的职业技能不止于敲代码!
- antv g6 禁止移动_十 AntV
- 计算机专业类的数学难吗,学计算机专业难吗数学很差能学吗
- 联发科处理器真有那么不堪吗?
- 小程序源码:独家修复登录接口社区论坛-多玩法安装简单
- 《代码本色:用编程模拟自然系统》作者Daniel Shiffman访谈问题有奖征集
- 自我实现tcmalloc的项目简化版本
- vbscript On Error语句
- LaTeX中插入两个并排的图片
- Linux添加用户练习
热门文章
- python如何执行代码漏洞_任意代码执行漏洞
- 力改变物体形状举例_对旋转问题的思考-在离心力确定的情况下,物体的旋转情况如何通过宇宙中的相对运动情况和质量分布确定?...
- 时尚美妆图片,让你饱眼福的唯美壁纸
- 设计灵感|教会你海报设计套路
- 品牌家居清洁之妙法产品平面海报设计模板
- 抓眼球包装设计样机模板,色彩秘籍都在这里了!
- Chrome 插件开发与本地程序交互流程
- Linux AIO的新归宿:io_uring(介绍,系统调用)
- centos网络隔一段时间就断_如果是中专学历,以后做网络工程师会有瓶颈吗?
- Django里面的sql查询语句