操作定义系统响应用户操作的行为:登录、操作按钮、发票的选择,…

操作可以存储在数据库中,也可以直接作为字典返回,例如按钮方法。所有操作共享两个强制属性:

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链接到操作的模型对象

objectobj

如果active_model和active_id提供了值(通过上下文)否则值为None时才是有用的 依靠active_id选择实际的记录

pool

当前数据库注册表

datetimedateutiltime

相应的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)相关推荐

  1. Odoo10参考系列--QWeb报表

    报表是写在HTML / QWeb中,像Odoo中的所有普通视图.你可以使用普通QWeb 流程控制工具.PDF的渲染是通过wkhtmltopdf执行的. 如果要在某个模型上创建报表,则需要定义该报表和它 ...

  2. odoo10参考系列--ORM API 二(新旧API兼容性、模型参考和方法修饰符)

    新API与旧API的兼容性 现在的Odoo是从就的(不规律的)API过渡来的,它可能需要从一个手动桥接到另一个手动桥接: RPC层(XML-RPC和RPC)是在旧的API的形式表达,表达的纯粹的方法在 ...

  3. odoo10参考系列--ORM API 一(记录集、环境、通用方法和创建模型)

    记录集 版本8.0中新东西: 这个在Odoo8.0中新加的API的页面文档应该是不断向前发展的主要开发API.同时它还提供了关于移植或桥接版本7和更早版本的"旧API"的信息,但没 ...

  4. Odoo10参考系列--Odoo指导方针

    本文介绍了新版Odoo编码指南.那些旨在提高代码的质量 (例如更好的可读性)和Odoo应用程序.实际上,适当的代码简化了维护.调试,降低了复杂性,提高了可靠性. 这些指导原则应适用于每一个新的模块和新 ...

  5. Odoo10参考系列--混合而有用的类

    Odoo实现了一些有用的类和混合,使您可以轻松地在对象上添加常用的行为.本指南将详细介绍其中的大部分内容,包括示例和用例. 消息特征 消息集成 基本消息系统 将消息功能集成到模型中非常容易.简单地继承 ...

  6. odoo10参考系列--QWeb

    QWeb是被Odoo[2]使用的主要的模版引擎.它是一个XML模板引擎[1],主要用于生成HTML片段和页面. 模板指令指定的XML属性的前缀 t-,例如t-if 为条件,与元素和其他属性被直接渲染. ...

  7. odoo10参考系列--视图一(列表视图)

    共同结构--一般视图都有的 视图对象公开了多个字段,除非另有说明,否则它们是可选的. name (强制性的) 在对某个列表进行查找时,仅作为对视图的一种记忆/描述是有用的 model 与视图关联的模型 ...

  8. odoo10参考系列--数据文件

    Odoo就是一个非常大的数据驱动, 因此,模块定义的一大部分就是对其管理的各种记录的定义: 用户界面(菜单.视图),安全(访问权限和访问规则),报表和普通数据都通过记录定义. 结构 在Odoo定义数据 ...

  9. Odoo10参考系列--Mobile JavaScript

    介绍 在Odoo 10.0中我们发布了一个移动app,允许您访问所有的Odoo apps (即使您自定义了模块). 应用程序是Odoo Web 和Native Mobile components的组合 ...

最新文章

  1. java门户网站项目代码_基于jsp的企业门户网站-JavaEE实现企业门户网站 - java项目源码...
  2. skipping non-radio button in group解决方法
  3. putty-psftp
  4. 一个架构的演化2--用ESB集成
  5. Java笔记-Semaphore简单应用实例
  6. 分布式锁的几种实现方式~
  7. 【20160924】GOCVHelper MFC增强算法(2)
  8. Cookie、Session、Token、JWT分别是什么(三)
  9. ListView加ArrayAdapter结合android.R.layout.activity_list_item快速实现图文显示
  10. Elasticsearch的Watcher插件
  11. 程序员的职业技能不止于敲代码!
  12. antv g6 禁止移动_十 AntV
  13. 计算机专业类的数学难吗,学计算机专业难吗数学很差能学吗
  14. 联发科处理器真有那么不堪吗?
  15. 小程序源码:独家修复登录接口社区论坛-多玩法安装简单
  16. 《代码本色:用编程模拟自然系统》作者Daniel Shiffman访谈问题有奖征集
  17. 自我实现tcmalloc的项目简化版本
  18. vbscript On Error语句
  19. LaTeX中插入两个并排的图片
  20. Linux添加用户练习

热门文章

  1. python如何执行代码漏洞_任意代码执行漏洞
  2. 力改变物体形状举例_对旋转问题的思考-在离心力确定的情况下,物体的旋转情况如何通过宇宙中的相对运动情况和质量分布确定?...
  3. 时尚美妆图片,让你饱眼福的唯美壁纸
  4. 设计灵感|教会你海报设计套路
  5. 品牌家居清洁之妙法产品平面海报设计模板
  6. 抓眼球包装设计样机模板,色彩秘籍都在这里了!
  7. Chrome 插件开发与本地程序交互流程
  8. Linux AIO的新归宿:io_uring(介绍,系统调用)
  9. centos网络隔一段时间就断_如果是中专学历,以后做网络工程师会有瓶颈吗?
  10. Django里面的sql查询语句