odoo17 | 核心组件 - 动作(Actions)

动作Actions

在Odoo中,动作(Actions)是系统的核心组件之一,负责定义系统响应用户交互的具体行为。动作定义了系统对用户操作的响应行为,例如登录、按钮点击、发票选择等。动作可以存储在数据库中或直接作为字典在按钮方法中返回。所有动作都具有两个必需的属性:

  1. type:当前动作的类别,决定了哪些字段可以使用以及如何解释该动作。
  2. name:动作的简短用户可读描述,可能显示在客户端界面中。

客户端可以通过以下四种形式获取动作:

  • False:如果任何动作对话框当前处于打开状态,则关闭它。
  • 字符串:如果客户端动作匹配,则将其解释为客户端动作的标签;否则,将其视为数字。
  • 数字:从数据库中读取相应动作记录,可能是数据库标识符或外部ID。
  • 字典:将其视为客户端动作描述符并执行。

绑定

除了上述两个必需的属性外,所有动作还共享一些可选属性,用于在任意模型的上下文菜单中展示动作:

  • binding_model_id:指定动作绑定到的模型。
  • binding_type(默认为action):指定绑定类型,主要决定动作将出现在哪个上下文菜单下。如:
    • action(默认):指定动作将在绑定模型的动作上下文菜单中出现。
    • report:指定动作将在绑定模型的打印上下文菜单中出现。
  • binding_view_types:一个逗号分隔的视图类型列表,指明动作将在哪种视图类型的上下文菜单中出现,通常是“list”和/或“form”。默认为两者(列表和表单)。

窗口动作(ir.actions.act_window)

最常见的动作类型,用于通过视图展示模型的可视化表示:窗口动作定义了一个模型(及该模型特定记录)的一系列视图类型(及可能的具体视图)。

其字段包括:

  • res_model:要展示视图的模型。
  • views:一个包含一对对的列表。每对的第二个元素是视图类别(如tree、form、graph等),第一个元素是可选的数据库ID(或False)。如果不提供ID,则客户端应获取请求模型的指定类型的默认视图(由fields_view_get()自动完成)。列表中的第一种视图类型将是默认视图类型,在执行动作时默认打开。列表中每种视图类型至多出现一次。
  • res_id(可选):如果默认视图是form,则指定要加载的记录(否则应创建新的记录)。
  • search_view_id(可选):(id, name)对,是该动作要加载的具体搜索视图的数据库标识符。默认情况下,获取模型的默认搜索视图。
  • target(可选):视图应在何处打开——主内容区域(current)、全屏模式(fullscreen)、新窗口/弹出窗口(new)。使用new代替current以清除面包屑。默认为current。
  • context(可选):传递给视图的附加上下文数据。
  • domain(可选):添加到所有视图搜索查询的隐式过滤条件域。
  • limit(可选):默认在列表中显示的记录数量。在web客户端中,默认为80。

例如,打开客户(带有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"
}

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

  • view_mode(默认为tree,form):字符串形式的视图类型逗号分隔列表(注意:不包含空格!)。列表中的所有类型都将出现在生成的视图列表中(至少有一个view_id)。
  • view_ids:到视图对象的M2M1,定义视图的初始内容。

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

URL动作(ir.actions.act_url)

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

  • url:激活动作时要打开的地址。
  • target(默认为new):可用值包括:
    • new:在新窗口/页面中打开URL。
    • self:在当前窗口/页面中打开URL(替换实际内容)。
    • download:重定向到下载URL。

示例:

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

这将会用Odoo主页替换当前内容区域。

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

类 odoo.addons.base.models.ir_actions.IrActionsServer(env, ids, prefetch_ids)

服务器动作模型,针对基础模型工作,并提供了多种可以自动执行的动作,比如通过基础动作规则自动执行,或者手动执行,通过将动作添加到“更多”上下文菜单中。

自Odoo 8.0版本开始,在动作表单视图上提供了一个“创建菜单动作”按钮。它会在基础模型的“更多”菜单中创建一个条目。这使得能够通过界面轻松创建并批量运行服务器动作。

可使用的动作包括:

  • ‘执行Python代码’:将被执行的一段Python代码块
  • ‘创建新记录’:根据指定的新值创建一个新的记录
  • ‘写入记录’:更新记录的值
  • ‘执行多个动作’:定义触发其他多个服务器动作的动作

允许从任何有效操作位置触发复杂的服务器端代码。对客户端来说,只有两个字段至关重要:

  • id:在数据库中要运行的服务器动作的标识符

  • context(可选):在运行服务器动作时使用的上下文数据
    而在数据库中的记录则更为丰富,可以根据它们的状态执行多种特定或通用的操作。其中,部分字段(及其对应的行为)在不同状态间共享:

  • model_id:与动作关联的Odoo模型

根据不同状态,行为通过不同的字段定义。下面列出各状态对应的字段:

  • state

    • code:通过参数code执行提供的Python代码

    • object_create:根据crud_model_id和fields_lines字段中的规范创建模型的新记录

    • object_write:根据fields_lines字段中的规范更新当前记录(或记录集)

    • multi:通过参数child_ids给出并执行多个动作

状态字段

依据其状态,动作的行为是通过不同的字段来定义的。每个字段后都会注明对应的状态。

  • code(code状态) 在动作被调用时,指定要执行的一段Python代码。
<record model="ir.actions.server" id="print_instance"><field name="name">合作伙伴服务器动作</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">合作伙伴服务器动作</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状态,必填):要在其中创建新记录的模型

  • link_field_id(create状态):指向ir.model.fields的many2one关系,指定当前记录中的m2o字段,新创建的记录应与此字段关联

  • fields_lines(create/write状态):在创建或复制记录时需要覆盖的字段。One2many关系,包含以下字段:

    • col1:在相关模型中要设置的ir.model.fields(对于创建,对于更新)
    • value:字段值,根据type字段解释
    • type(value|reference|equation):如果为value,则字段被解释为字面值(可能经过转换);如果为equation,则字段被解释为Python表达式并求值
  • child_ids(multi状态):指定在multi状态下执行的多个子动作(ir.actions.server)。如果子动作自身返回动作,最后一个子动作将作为multi状态自身的下一个动作返回给客户端

评估上下文

在服务器动作或与其相关的评估上下文中,有一系列键可供使用:

  • model:通过model_id链接到动作的模型对象
  • record/records:触发动作的记录/记录集,可能为空
  • env:Odoo环境
  • datetime, dateutil, time, timezone:相应的Python模块
  • log:日志函数,用于在ir.logging表中记录调试信息
  • Warning:异常构造器,用于警告

报告动作(ir.actions.report)

触发报告的打印。

如果你通过<report>标签而非ir.actions.report定义你的报告,并且希望该动作在模型视图的“打印”菜单中显示,还需要指定binding_model_idbinding_type。不需要设置binding_typereport,因为默认情况下它会隐式设为此值。

报告动作的相关字段包括:

  • name(必需):如果没有指定print_report_name,则用作文件名。否则,仅在查找报告列表时作为报告的助记/描述
  • model(必需):报告所针对的模型
  • report_type(默认为qweb-pdf):可以是qweb-pdf(PDF报告)或qweb-html(HTML报告)
  • report_name(必需):用于呈现报告的qweb模板的名称(外部ID)
  • print_report_name:定义报告名称的Python表达式
  • groups_id:许多对多的关系,指向允许查看/使用当前报告的组
  • multi:如果设置为True,该动作不会在表单视图中显示
  • paperformat_id:指向您希望为本报告使用的纸张格式的many2one关系(如果不指定,则使用公司格式)
  • attachment_use:如果设置为True,报告只会首次请求时生成一次,之后重新打印存储的报告,而不再每次重新生成
    可用于那些必须只生成一次的报告(例如出于法律原因)
  • attachment:定义报告名称的Python表达式;记录作为对象变量可访问

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

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

  • tag:动作的客户端标识符,是一个任意字符串,客户端应知道如何对此作出反应。

  • params(可选):附加数据的Python字典,随客户端动作标签一起发送给客户端。

  • target(可选):指示客户端动作是否应在主内容区域(current)、全屏模式(fullscreen)或对话框/弹出窗口(new)中打开。使用new代替current以清除面包屑。默认为current

例如:

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

这段代码告诉客户端启动销售点(POS)界面,服务器并不了解POS界面的工作原理。

参阅:

在服务器端,我们简单地定义了一个操作:ir.actions.client

<record id="action_home_page" model="ir.actions.client"><field name="tag">petstore.homepage</field>
</record>

以及打开操作的菜单:

<menuitem id="home_page_petstore_menu" parent="petstore_menu"name="Home Page" action="action_home_page"/>

视图的体系结构

自动化动作(ir.cron)

在预定义频率上自动触发的动作(定时任务)。

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

  • interval_number:两次执行动作之间的间隔数,单位为interval_type指定的时间单位

  • interval_type:频率间隔单位(小时、分钟、天、周、月)

  • numbercall:此动作需要运行的次数。如果期望动作无限期运行,请设置为-1

  • doall:布尔值,指定在服务器重启时是否需要执行错过的动作。

  • model_id:此动作将被调用的模型

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

    model.<method_name>()
    
  • nextcall:此动作的下一次计划执行日期(日期/时间格式)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/708010.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3D数字孪生

数字孪生&#xff08;Digital Twin&#xff09;是物理对象、流程或系统的虚拟复制品&#xff0c;用于监控、分析和优化现实世界的对应物。 这些数字孪生在制造、工程和城市规划等领域变得越来越重要&#xff0c;因为它们使我们能够在现实世界中实施改变之前模拟和测试不同的场景…

从业务角度出发,实现UniApp二次开发的最佳实践

UniApp作为一款跨平台的移动应用开发框架&#xff0c;为开发者提供了在多个平台上构建应用的便利性。在这篇文章中&#xff0c;我们将深入探讨UniApp的二次开发&#xff0c;以及如何通过定制化来满足你的独特需求。 1.了解UniApp基础 1.1项目结构和文件 熟悉UniApp的项目结构…

动态规划(题目提升)

[NOIP2012 普及组] 摆花 方法一&#xff1a;记忆化搜索 何为记忆化搜素&#xff1a;就是使用递归函数对每次得到的结果进行保存&#xff0c;下次遇到就直接输出即可 那么这个题目使用递归&#xff08;DFS&#xff09;是怎样的&#xff1f; 首先我们需要搞清楚几个坑点&#x…

C/C++语言文字小游戏(荒岛求生)

游戏背景 玩家在荒岛上&#xff0c;需要寻找食物、水源、避难所等资源来生存。 玩家需要避免危险&#xff0c;如野兽、植物、天气等&#xff0c;否则会失去血量或生命。 玩家可以在荒岛上遇到其他生存者&#xff0c;可以选择合作或对抗。 游戏目标是生存一定时间或找到生存的出…

Javaweb之SpringBootWeb案例之 Bean管理的第三方Bean的详细解析

2.3 第三方Bean 学习完bean的获取、bean的作用域之后&#xff0c;接下来我们再来学习第三方bean的配置。 之前我们所配置的bean&#xff0c;像controller、service&#xff0c;dao三层体系下编写的类&#xff0c;这些类都是我们在项目当中自己定义的类(自定义类)。当我们要声…

将任何网页变成桌面应用,全平台支持 | 开源日报 No.184

tw93/Pake Stars: 20.9k License: MIT Pake 是利用 Rust 轻松构建轻量级多端桌面应用的工具。 与 Electron 包大小相比几乎小了 20 倍&#xff08;约 5M&#xff01;&#xff09;使用 Rust Tauri&#xff0c;Pake 比基于 JS 的框架更轻量和更快内置功能包括快捷方式传递、沉浸…

常见设计模式之单例模式

单例模式 单例模式是一种常用的软件设计模式&#xff0c;主要目的是确保一个类在整个应用程序生命周期中只有一个实例&#xff0c;并提供一个全局访问点以获取该实例。 单例模式分为几种不同的实现方式&#xff0c;包括懒汉模式和饿汉模式。每种方式都有其特点和适用场景。例如…

vue或者uniapp修改数据后页面不重新渲染

1.数据是对象 通常是某个渲染的数组改变了层级较深的数据导致页面没有实时渲染 this.itemsJSON.parse(JSON.stringify(this.items)); 2.数据是数组 this.$set 方法&#xff0c;可以显式地告诉Vue&#xff0c;某个属性的值已经发生了变化&#xff0c;从而触发视图的更新 le…

小程序中使用echarts地图

一、下载并安装echarts 1、下载echarts-for-weixin组件 echarts-for-weixin项目提供了一个小程序组件&#xff0c;用这种方式可以在小程序中方便地使用 ECharts。 下载ec-canvas项目&#xff08;下载地址&#xff09; ​​ 注意&#xff1a;下载的 ec-canvas 中的echarts的版本…

sql中COALESCE函数详解

在SQL中&#xff0c;COALESCE函数是一个非常有用的函数&#xff0c;用于从其参数列表中返回第一个非NULL值。如果所有给定的参数都是NULL&#xff0c;那么COALESCE函数将返回NULL。这个函数可以接受多个参数&#xff0c;使其在处理可能出现的NULL值时非常灵活和强大。 语法 C…

【Linux】协程简介

【Linux】协程简介 一、什么是协程&#xff1f;简介优点 二、为什么使用协程&#xff1f;三、协程的种类1、对称协程2、非对称协程 四、协程栈1、静态栈2、分段栈3、共享栈4、虚拟内存栈 五、协程调度1、栈式调度2、星切调度3、环切调度 六、常见协程库参考文献 一、什么是协程…

word embedding

介绍&#xff1a; ASCII可以编码为计算机可以识别的数据&#xff0c;为什么还需要embedding? 计算机只是对“字母”进行ASCII编码&#xff0c;并没有对词汇的“Word”编码。词汇应该是咱们处理自然语言的最基本的元素&#xff0c;而不是字母。那么世界上有千千万万的Word&am…

力扣381. O(1) 时间插入、删除和获取随机元素 - 允许重复

RandomizedCollection 是一种包含数字集合(可能是重复的)的数据结构。它应该支持插入和删除特定元素&#xff0c;以及删除随机元素。 实现 RandomizedCollection 类: RandomizedCollection()初始化空的 RandomizedCollection 对象。 bool insert(int val) 将一个 val 项插入到…

机器学习 | 模型评估和选择 各种评估指标总结——错误率精度-查准率查全率-真正例率假正例率 PR曲线ROC曲线

文章目录 1. 如何产生训练集和测试集呢&#xff1f;1.1 留出法1.2 K折交叉验证法1.3 自助法 2. 模型评估指标2.1 错误率和精度2.2 查准率和查全率与F12.2.1 PR曲线及其绘制 2.3 正例率和假例率2.3.1 ROC曲线图绘制及AUC 3 假设检验 1. 如何产生训练集和测试集呢&#xff1f; 1…

mac配置环境变量总结

1、启动终端Terminal 2、进入当前用户的home目录 输入 cd &#xff5e; (注意中间的空格) 3、创建 .bash_profile 文件 输入 touch .bash_profile 4、编辑 .bash_profile文件 输入 open -e .bash_profile .bash_profile文件内容 5、更新配置 source ~/.bash_profile…

Java的泛型特性和PECS特性

Java的泛型特性是Java SE 5引入的&#xff0c;它提供了编译时类型安全检测机制&#xff0c;这意味着程序可以在编译期间检测到类型错误&#xff0c;而不是在运行时。泛型的引入极大地增强了程序的类型安全性&#xff0c;减少了强制类型转换的需要。以下是Java泛型特性的详细解释…

【ACW 服务端】k8s部署

k8s部署 --- apiVersion: apps/v1 kind: Deployment metadata:annotations:k8s.kuboard.cn/displayName: 【wu-smart-acw-server】后台服务端labels:k8s.kuboard.cn/layer: svck8s.kuboard.cn/name: wu-smart-acw-servername: wu-smart-acw-servernamespace: defaultresourceV…

python 处理B站视频数据,数据存本地

python 处理B站视频数据&#xff0c;数据存本地 绪论实现1 导入头文件2. 获得数据的函数3 获取dvid4 获取数据&#xff0c;保存 后续 绪论 上一个已经通过B站的API&#xff0c;来实现了对数据的读取&#xff0c;这篇文章就是&#xff0c;将数据存储在本地的TXT文件中 上一篇文…

记autodl跑模型GPU CPU利用率骤变为0问题

目录 问题 解决 问题 实验室服务器资源紧张&#xff0c;博主就自己在autodl上租卡跑了&#xff0c;autodl有一个网络共享存储&#xff0c;可挂载至同一地区的不同实例中&#xff0c;当我们在该地区创建实例开机后&#xff0c;将会挂载文件存储至实例的/root/autodl-fs目录…

Grafana 安装指南

目录 介绍 安装 卸载 Grafana 汉化 介绍 Grafana是一款开源数据可视化平台&#xff0c;支持连接多种数据源&#xff0c;创建定制化仪表盘&#xff0c;通过直观的查询编辑器分析数据&#xff0c;设置灵活的警报规则并接收通知&#xff0c;具备丰富的插件生态系统&#xff0c…