操作

操作定义了系统对用户操作的响应行为:登录、操作按钮、选择发票等。

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

type

当前操作的类别,决定了可以使用哪些字段以及如何解释该操作。

name

操作的简短用户可读描述,可能会在客户端界面中显示

客户端可以以4种形式获取操作:

  • False

    如果当前有任何操作对话框打开,请关闭它

  • 一个字符串

    如果 客户端动作 匹配,则解释为客户端动作的标签,否则视为数字

  • 一个数字

    从数据库中读取相应的操作记录,可以是数据库标识符或者是 外部标识符

  • 一个字典

    将其视为客户端操作描述符并执行

绑定

除了两个必填属性外,所有操作还共享用于在任意模型的上下文菜单中呈现操作的 可选 属性:

binding_model_id

指定操作绑定到哪个模型

注解

对于服务器操作,请使用 model_id

binding_type

指定绑定类型,大多数情况下是指定操作将出现在哪个上下文菜单中

action (default)

指定该操作将出现在绑定模型的 操作 上下文菜单中。

report

指定该操作将出现在绑定模型的 打印 上下文菜单中。

binding_view_types

一个逗号分隔的视图类型列表,用于指定操作在上下文菜单中显示的视图类型,主要是 “list” 和 / 或 “form”。默认为 list,form (既有列表又有表单)

窗口操作 (ir.actions.act_window)

最常见的操作类型,用于通过 视图 来展示模型的可视化:窗口操作定义了模型的一组视图类型(可能还包括特定视图)(以及可能是模型的特定记录)。

它的字段为:

res_model

用于展示视图的模型

views

一个 (view_id, view_type) 对的列表。每对的第二个元素是视图的类别(tree, form, graph, …),第一个元素是可选的数据库id(或 False )。如果没有提供id,客户端应该获取请求模型的指定类型的默认视图(这是由 fields_view_get() 自动完成的)。列表中的第一个类型是默认视图类型,在执行操作时将默认打开。每个视图类型在列表中最多出现一次

res_id (optional)

如果默认视图是 form,则指定要加载的记录(否则应创建新记录)

search_view_id (optional)

(id, name) 对,id 是特定搜索视图的数据库标识符,用于加载操作。默认获取模型的默认搜索视图

target (optional)

是否应该在主内容区域中打开视图(current),全屏模式中打开视图(fullscreen)或在对话框/弹出窗口中打开视图(new)。使用``main``而不是``current``来清除面包屑。默认为``current``。

context (optional)

传递给视图的附加上下文数据

domain (optional)

筛选域,隐式添加到所有视图搜索查询中

limit (optional)

默认情况下在列表中显示的记录数。在Web客户端中默认为80。

例如,要打开带有列表和表单视图的客户(设置了 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",
}

在数据库中的窗口操作有一些不同的字段,客户端应该忽略这些字段,主要用于组合 views 列表:

view_mode (default= tree,form )

逗号分隔的视图类型列表,作为字符串(/!\ 不要有空格 /!\)。所有这些类型都将出现在生成的 views 列表中(至少有一个 False view_id)

view_ids

M2M1 to view objects, defines the initial content of views

注解

Act_window 视图也可以通过 ir.actions.act_window.view 来定义清晰。

如果您计划为您的模型允许多个视图,请优先使用 ir.actions.act_window.view 而不是 view_ids 动作

<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 中的任何视图填充,则将其添加到 views 列表中

这些主要用于从 数据文件 定义操作:

<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”视图。

The server-side composition of the views sequence is the following:

  • view_ids 中获取每个 (id, type) (按 sequence 排序)

  • 如果 view_id 已定义且其类型尚未填充,则附加其 (id, type)

  • 对于 view_mode 中的每个未填充的类型,追加 (False, type)

1

技术上不是M2M:添加一个序列字段,可以由仅视图类型组成,而无需视图ID。

URL Actions (ir.actions.act_url)

允许通过Odoo操作打开URL(网站/网页)。可以通过两个字段进行自定义:

url

激活操作时要打开的地址

target

在新窗口/页面中打开地址,如果是 new,则用页面替换当前内容,如果是 self。默认为 new

{
    "type": "ir.actions.act_url",
    "url": "https://odoo.com",
    "target": "self",
}

将用Odoo主页替换当前内容部分。

服务器操作 (ir.actions.server)

class odoo.addons.base.models.ir_actions.IrActionsServer(env, ids, prefetch_ids)[源代码]

服务器动作模型。服务器动作基于基础模型,提供各种类型的动作,可以自动执行,例如使用基础动作规则,或手动添加到“更多”上下文菜单中。

自Odoo 8.0版本起,在操作表单视图中提供了一个“创建菜单动作”按钮。它会在基本模型的“更多”菜单中创建一个条目。这样可以轻松地通过界面创建服务器动作并以批量模式运行它们。

可用的操作有:

  • ‘执行 Python 代码’:将执行一段 Python 代码块

  • ‘创建新记录’:创建一个带有新值的新记录

  • ‘写入记录’: 更新记录的值

  • ‘执行多个操作’: 定义一个触发多个其他服务器操作的操作

允许从任何有效的操作位置触发复杂的服务器代码。对客户端而言,只有两个字段是相关的:

id

要运行的服务器操作的数据库内标识符

context (optional)

运行服务器操作时使用的上下文数据

在数据库中的记录更加丰富,可以根据其 state 执行许多特定或通用的操作。某些字段(以及相应的行为)在不同的状态之间是共享的:

model_id

与该操作相关联的Odoo模型。

state

  • code:通过``code``参数执行给定的Python代码。

  • object_create:根据``fields_lines``的规范创建模型``crud_model_id``的新记录。

  • object_write:根据``fields_lines``的规范更新当前记录

  • 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 to ir.model.fields,指定当前记录的m2o字段,新创建的记录应该设置在该字段上(模型应该匹配)

fields_lines (create/write)

在创建或复制记录时要覆盖的字段。使用字段为 One2many

col1

ir.model.fields 用于在相关模型中设置(crud_model_id 用于创建,model_id 用于更新)

value

字段的值,通过 type 解释

type (value|reference|equation)

如果是 value,则 value 字段将被解释为字面值(可能会被转换),如果是 equation,则 value 字段将被解释为 Python 表达式并进行求值

child_ids (multi)

指定多个子操作(ir.actions.server)以在多状态下执行。如果子操作本身返回操作,则最后一个操作将作为多操作的下一个操作返回给客户端

评估上下文

在服务器操作的评估上下文或周围环境中,有许多键可用:

  • model 通过 model_id 与动作关联的模型对象

  • record/records record/recorset on which the action is triggered, can be void.

  • env Odoo Environment

  • datetime, dateutil, time, timezone 对应的 Python 模块

  • log: log(message, level='info') logging function to record debug information in ir.logging table

  • Warning 异常的构造函数

报告操作 ( ir.actions.report )

触发报告打印。

如果您通过 <record> 而不是 <report> 标签来定义报表,并且希望该操作显示在模型视图的打印菜单中,您还需要从 绑定 指定 binding_model_id。不需要将 binding_type 设置为 report,因为 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表达式;记录可以通过变量 object 访问

客户端操作 (ir.actions.client)

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

tag

操作的客户端标识符,一个任意字符串,客户端应该知道如何做出反应

params (optional)

一个Python字典,用于在客户端操作标签旁边向客户端发送附加数据

target (optional)

是否应该在主内容区域中打开客户端操作(current),全屏模式(fullscreen)或对话框/弹出窗口(new)。使用 main 而不是 current 来清除面包屑。默认为 current

{
    "type": "ir.actions.client",
    "tag": "pos.ui"
}

告诉客户端启动销售点界面,服务器不知道销售点界面的工作方式。

自动化操作 (ir.cron)

在预定义频率上自动触发的操作。

name

自动化操作的名称(主要用于日志显示)

interval_number

在两次执行操作之间的 interval_type uom数量

interval_type

频率间隔的度量单位(分钟小时

numbercall

此操作需要运行的次数。如果预计此操作将无限运行,请设置为 -1

doall

布尔值,指定在服务器重新启动时是否需要执行未执行的操作。

model_id

将调用此操作的模型

code

操作的代码内容。可以是对模型方法的简单调用:

model.<method_name>()
nextcall

此操作的下一次计划执行日期(日期/时间格式)