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_idref_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_modelactive_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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值