环境

odoo-14.0.post20221212.tar

Actions(动作)

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

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

  • type

    当前Action的类别,决定可以使用哪些字段以及如何解释action

  • name

    action的名称,在客户端的界面中显示对action的简短用户可读描述

Bindings(绑定)

除了两个强制属性外,所有action有用于在任意模型的上下文菜单中显示动作的可选属性:

  • binding_model_id

    指定action绑定的模型,格式:moduleName.modelName。注解对于“Server Actions”,请使用model_id

  • binding_type

    指定绑定的类型,主要是放置action的上下文菜单

    • action (默认)

      设置Action将出现在绑定模型的Action上下文菜单。

    • report

      设置Action将出现在绑定模型的Print上下文菜单。

  • binding_view_types

    以逗号分隔的视图类型列表,即Action需要显示的上下文菜单所在的视图,主要是“列表”和“表单”。默认为list,form(列表和表单)

Window Actions (ir.actions.act_window)

最常见的动作类型,用于通过视图呈现模型的可视化:Window Action为模型定义了一组视图类型(以及可能的特定视图)(以及可能特定的模型记录)。

包含字段:

  • res_model

    action触发的要显示的视图关联的模型

  • views

    (view_id,view_type)对的列表。每对视图的第二个元素是视图的类别(treeformgraph, ……),第一个元素是可选的数据库id(或False)。如果未提供id,则客户端应获取所请求模型的指定类型的默认视图(这由 fields_view_get()自动完成)。列表的第一种类型是默认视图类型,在执行操作时默认打开。每个视图类型在列表中最多应出现一次。当action配置如下时,打开的依旧是tree视图,也就说view_mode似乎是如下文所述,typeir.actions.act_window的情况下,被忽略了,不起作用

    {
    'type': 'ir.actions.act_window',
    'views': [[False, "tree"], [False, "form"]],
    'view_mode': 'form',
    #...
    }
  • res_id (可选)

    如果默认视图为 form,指定需要加载的记录(否则创建一个条新记录)

  • search_view_id (可选)

    (id, name) 对, id 为动作需要加载的指定搜索视图的数据库ID。默认获取模型的默认搜索视图。

  • target (可选)

    视图是否应在主内容区域(current)、以全屏模式(fullscreen)或对话框/弹出窗口(new)中打开。使用main而不是current以清除导航面包屑(实际发现,使用current会导致面导航面包屑不断重复,形如 顾客信息/导入记录/顾客信息/导入数据/...)。默认为new

  • context (可选)

    传递给视图的附加上下文

  • domain (可选)

    隐式添加到所有视图搜索查询的过滤domain

  • limit (可选)

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

  • name(可选),action名称,界面显示时拼接到当前面包屑导航(现有导航面包屑 / name值)。默认值为“Unnamed”,注意:如果name值为空字符串,则默认为 Unnamed

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

另一个例子,在当前页面中打开estate.customer模块的默认列表视图

{
'type': 'ir.actions.act_window',
'name': _('导入数据'),
'res_model': 'estate.customer',
'views': [[False, "tree"]],
'view_mode': 'tree',
'context': self._context,
'target': 'main'
}

参考连接:

https://www.odoo.com/documentation/14.0/zh_CN/developer/howtos/web.html?highlight=do_action#the-action-manager

在数据库window action中,操作有几个不同的字段,这些字段应被客户端忽略,主要用于组成view列表

  • view_mode (默认= tree,form )

    以逗号分隔的视图类型列表,格式为字符串(注意不要包含空格)。所有这些类型都必须在生成的views列表中(至少有一个False view_id

  • view_ids

    M2M(技术上不是M2M:添加了一个sequence字段,可以只由一个视图类型组成,没有视图id) to view objects,定义views的初始内容。

    注解:Act_window视图也可以通过ir.actions.Act_window.view干净地定义。如果您计划为模型允许多个视图,优先使用ir.actions.cact_window.wiew而不是view_ids action。

    <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

    添加到views列表中的特定视图,以防其类型是 view_mode 列表的一部分,并且尚未由view_ids中的某个视图填充

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

<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中的每个未填充类型,追加(False,type)

应用实践举例

estate模块的estate.property模型的表单视图中,为Action添加菜单"选取offers",如下:

![image-20230117111309634](images/odoo Actions学习总结/image-20230117111309634.png)

action配置:

<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<record id="action_demo_wizard" model="ir.actions.act_window">
<field name="name">选取offers</field>
<field name="res_model">demo.wizard</field>
<field name="type">ir.actions.act_window</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="binding_model_id" ref="estate.model_estate_property"/>
<field name="binding_view_types">form</field>
</record>
</data>
</odoo>

参考连接

https://www.odoo.com/documentation/14.0/zh_CN/developer/reference/addons/actions.html

odoo Actions学习总结的更多相关文章

  1. odoo开发学习「目录」

    目录: 一.odoo介绍(发源 版本 ERP对比 优势劣势 应用场景 发展情况 社区介绍) 二.odoo设计思想 三.odoo自带模块 四.odoo开发前准备(python基础) 五.odoo环境搭建 ...

  2. odoo研究学习:刷新本地模块列表都干了什么事?

    模块信息存储在ir.module.module 数据表中 平时在开发过程中经常会刷新本地模块列表,例如:新增了模块.更新了模块基础信息.更换了模块图标等等,在点击‘更新’按钮的时候odoo平台到底干了 ...

  3. Github Actions 学习笔记

    Github Actions是什么? Github Actions 官方介绍:GitHub Actions是一个持续集成和持续交付(CI/CD)平台,允许您自动化构建.测试和部署管道.您可以创建构建和 ...

  4. 免费下载获取Odoo中文开发 指南 手册

    引言 Odoo是一个强大的商业应用开源平台.在此基础上,构建了一套紧密集成的应用程序,涵盖了从CRM到销售到股票和会计的所有业务领域.Odoo有一个动态和不断增长的社区,不断增加功能.连接器和其他商业 ...

  5. odoo:开源 ERP/CRM 入门与实践

    看了这张图,或许你对odoo有了一些兴趣. 这次就是和大家一起交流开源ERP/CRM系统:odoo 对以下读者有帮助:研发.产品.项目.市场.服务.运营.管理等. 一.背景趋势 社交网络.电商O2O: ...

  6. odoo:开源 ERP/CRM 入门与实践 -- 上海嘉冰信息技术公司提供咨询服务

    odoo:开源 ERP/CRM 入门与实践 看了这张图,或许你对odoo有了一些兴趣. 这次Chat就是和大家一起交流开源ERP/CRM系统:odoo 对以下读者有帮助:研发.产品.项目.市场.服务. ...

  7. oddo

    看了这张图,或许你对odoo有了一些兴趣. https://www.cnblogs.com/wterp/p/9093616.html 这次就是和大家一起交流开源ERP/CRM系统:odoo 对以下读者 ...

  8. Caliburn.Micro学习笔记(二)----Actions

    Caliburn.Micro学习笔记目录 上一篇已经简单说了一下引导类和简单的控件绑定 我的上一个例子里的button自动匹配到ViewModel事件你一定感觉很好玩吧 今天说一下它的Actions, ...

  9. odoo学习

    odoo视图对应模型:model="ir.ui.view"> <record id="mrp_workcenter_view_light_inherit&qu ...

  10. odoo通过actions.client进行自定义页面

    一.使用原因 由于odoo自带页面在项目开发过程中无法满足使用,需要使用到动作ir.actions.client进行自定义视图的开发,实现自定义的xml视图开发. 二.实现目标 三.开发过程 1.项目 ...

随机推荐

  1. golang beego 使用supervisor 部署后台进程管理. 静态文件找不到的解决办法.

    directory=/root/go/src/you_self_dir 请在客户端配置文件*.ini中加入一行命令, 等于号后面就是自己的项目目录,这时就能找到项目文件了.

  2. Prism IoC 依赖注入

    现有2个项目,SinglePageApp是基于Prism创建的WPF项目,框架使用的是Prism.DryIoc,SinglePageApp.Services是C#类库,包含多种服务,下面通过使用Pri ...

  3. 莫烦tensorflow学习记录 (3)建造我们第一个神经网络

    另一个学习文档http://doc.codingdict.com/tensorflow/tfdoc/tutorials/overview.html 定义 add_layer() https://mof ...

  4. foxy rviz2 "rviz_common/Time"报错问题

    报错内容 The class required for this panel, 'rviz_common/Time', could not be loaded. Error: According to ...

  5. 【论文笔记】SegNet

    [深度学习]总目录 SegNet是Cambridge提出旨在解决自动驾驶或者智能机器人的图像语义分割深度网络,开放源码,基于caffe框架.SegNet运用编码-解码结构和最大池化索引进行上采样,最主 ...

  6. vue导航固定 吸顶效果

    吸顶效果 如何得到滚动条滚动的距离,document.documentElement.scrollTop 通过onscroll事件来完成滚动事件监听,达到吸顶值后,进行样式更换

  7. Yolov8和Yolov10的差异以及后处理实现

    Yolo模型可分为4个维度的概念 模型版本.数据集.模型变体(Variants).动态/静态模型. Yolo各模型版本进展历史 Yolov(2015年华盛顿大学的 Joseph Redmon 和 Al ...

  8. vitepress使用createContentLoader时遇到["vitepress" resolved to an ESM file. ESM file cannot be loaded by `require`.]报错

    在使用vitepress构建一个所有博客的概览页的时候,使用到了createContentLoader这个api,但是在index.data.ts中定义并导出后,在md文件中调用遇到了下面这个问题: ...

  9. python 日志写入文件,参数说明及动态判断文件是创建还是追加

    import logging import os ''' 格式符 含义 %(levername)s 日志级别名称 %(pathname)s 当前执行程序的路径(即脚本所在的位置) %(filename ...

  10. FreeRTOS简单内核实现5 阻塞延时

    0.思考与回答 0.1.思考一 为什么 FreeRTOS简单内核实现3 任务管理 文章中实现的 RTOS 内核不能看起来并行运行呢? Task1 延时 100ms 之后执行 taskYIELD() 切 ...