Toggle navigation

操作

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

动作可以存储在数据库中,或者作为字典直接返回到例如数据库中。按钮方法。 所有操作共享两个必需属性:

type
当前操作的类别,确定可以使用哪些字段以及如何解释操作
name
用户可读的简短操作描述,可能会显示在客户端的界面中

客户可以获得4种形式的行动:

False
如果当前打开任何操作对话框,请将其关闭
A string
如果客户端操作匹配,则将其解释为客户端操作的标记,否则将其视为数字
A number
从数据库中读取相应的操作记录,可以是数据库标识符或外部标识
A dictionary
作为客户端操作描述符处理并执行

窗口操作(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) pair,id是要为操作加载的特定搜索视图的数据库标识符。 默认为获取模型的默认搜索视图
target (optional)
是否应在主要内容区域(当前),全屏模式(全屏)或对话框/弹出窗口中打开视图(new )。 使用main代替current清除面包屑导航。 默认为当前
context (optional)
要传递给视图的其他上下文数据
domain (optional)
过滤域以隐式添加到所有视图搜索查询
limit (optional)
默认情况下列表中显示的记录数。 Web客户端中默认为80
auto_search (optional)
是否应在加载默认视图后立即执行搜索。 Defaults to True

例如,要使用列表和表单视图打开客户(具有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",
}

数据库内窗口操作有几个不同的字段,客户端应忽略这些字段,主要用于组成视图列表:

view_mode
以逗号分隔的视图类型列表作为字符串。 所有这些类型都将出现在生成的视图列表中(至少有一个False view_id)
view_ids
M2M 1查看对象,定义视图的初始内容
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>

将使用“my_specific_view”视图,即使这不是模型的默认视图。

视图序列的服务器端组合如下:

  • view_ids获取每个(id,type)(按sequence排序)
  • 如果定义view_id并且其类型尚未填充,则追加其(id,type)
  • 对于view_mode中的每个未填充类型,追加(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 (optional)
运行服务器操作时要使用的上下文数据

数据库内记录非常丰富,可以根据状态执行许多特定或通用操作。 某些字段(和相应的行为)在状态之间共享:

model_id
与行动相关联的Odoo模型,在评估上下文中提供
condition (optional)
使用服务器操作的评估上下文评估为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>

这往往是从数据文件创建的唯一操作类型,除了multi之外的其他类型比从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
ir.model.fieldsuse_create隐含的模型中设置
value
字段的值,通过type解释
type
如果字段被解释为文字值(可能被转换),如果方程式 字段被解释为Python表达式并进行评估
crud_model_id
如果use_create设置为new_other,则创建新记录的模型
ref_object
引用到要复制的任意记录,如果use_create设置为copy_other时使用
link_new_record
boolean flag通过link_field_id指定的many2one字段将新创建的记录链接到当前记录,默认为False
link_field_id
many2one to ir.model.fields,指定当前记录的m2o字段,应在其上设置新创建的记录(模型应匹配)

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
see object_create
crud_model_id
see object_create
ref_object
see object_create

multi

一个接一个地执行多个动作。 要执行的操作是通过child_ids m2m定义的。 如果子操作本身返回操作,则最后一个操作将作为多个自己的下一个操作返回给客户端

trigger

向工作流程发送信号。

wkf_transition_id
Many2oneworkflow.transition来触发
use_relational_model
如果base(默认值),则代表当前记录触发信号。 如果relational,则代表通过wkf_model_idwkf_field_id选择的当前记录的字段触发信号。

client_action

间接返回使用action_id定义的其他操作。 只需将该操作返回给客户端即可执行。

Evaluation context

服务器操作的评估上下文中包含许多键:

model
通过model_id链接到操作的模型对象
object, obj
仅在提供active_modelactive_id(通过上下文)时才可用,否则 active_id选择的实际记录
pool
当前的数据库注册表
datetime, dateutil, time
相应的Python模块
cr
当前的光标
user
当前的用户记录
context
执行上下文
Warning
警告异常的构造函数

Report Actions (ir.actions.report.xml)

触发打印报告

name (mandatory)
仅在某种列表中查找报表时,它仅用作报表的助记符/描述
model (mandatory)
您的报告将涉及的模型
report_type (mandatory)
用于PDF报告的qweb-pdf或用于HTML的qweb-html
report_name
报告的名称(将是PDF输出的名称)
groups_id
Many2many字段允许查看/使用当前报告的组
paperformat_id
Many2one字段为您希望用于此报告的纸张格式(如果未指定,将使用公司格式)
attachment_use

如果设置为True,则报告仅在第一次请求时生成,并在之后从存储的报告中重新打印,而不是每次都重新生成。

可用于必须仅生成一次的报告(例如,出于法律原因)

attachment
python表达式,用于定义报告的名称;该记录可作为变量object访问

Client Actions (ir.actions.client)

触发完全在客户端中实现的操作。

tag
操作的客户端标识符,客户端应该知道如何响应的任意字符串
params (optional)
用于发送到客户端的其他数据的Python字典,以及客户端操作标记
target (optional)
是否应在主要内容区域(当前),全屏模式(全屏)或对话框/弹出窗口中打开客户端操作(new )。 使用main代替current清除面包屑。 默认为当前
{
    "type": "ir.actions.client",
    "tag": "pos.ui"
}

告诉客户启动销售点界面,服务器不知道POS界面如何工作。

[1]技术上不是M2M:添加序列字段,可以仅由视图类型组成,没有视图id。