odoo13 学习 Actions 动作的定义

odoo中的动作一共有6种:
Window Actions (ir.actions.act_window)
URL Actions (ir.actions.act_url)
Server Actions (ir.actions.server)
Report Actions (ir.actions.report)
Client Actions (ir.actions.client)
Automated Actions (ir.cron)

Actions定义系统响应用户操作的行为:登录、操作按钮、选择发票、等等。动作可以存储在数据库中,也可以直接作为字典返回,例如按钮方法。
所有操作都有两个强制属性:type, name
type:当前操作的类别,决定可以使用哪些字段以及如何解释该操作。
name:简短的用户可读的动作描述,可以显示在客户端的界面上。

一个客户端可以获得四种形式的动作:
1.False 如果当前有任何动作对话框打开,请关闭它
2.A string 如果客户端动作匹配,解释为客户端动作的标签,否则作为一个数字处理
3.A number 从数据库中读取相应的动作记录,可能是数据库标识符或external id
4. A dictionary 将其视为客户端操作描述符并执行

除了两个强制属性外,所有操作还共享可选属性,用于在任意模型的上下文菜单中表示操作

binding_model_id:指定动作绑定到哪个模型
binding_type:指定绑定的类型,这主要是操作将出现在下面的上下文菜单。action (default):指定操作将出现在绑定模型的操作上下文菜单中。report:指定操作将出现在绑定模型的“打印上下文”菜单中。
binding_view_types:以逗号分隔的视图类型列表,动作会出现在上下文菜单中,主要是“list”和/或“form”。默认列表,表单(列表和表单)

一 Window Actions (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)对,id是加载操作的特定搜索视图的数据库标识符。默认获取模型的默认搜索视图
target (optional):视图是否应该在主内容区(当前)、全屏模式(全屏)或对话框/弹出窗口(新建)中打开。使用main而不是current来清除面包屑。默认为当前。
context (optional):传递给视图的附加上下文数据
domain (optional):过滤域以隐式添加到所有视图搜索查询
limit (optional):默认情况下在列表中显示的记录数量。web客户端默认值为80

ps:使用列表和表单视图打开客户(与客户标志集合作)

{
    "type": "ir.actions.act_window",
    "res_model": "res.partner",
    "views": [[False, "tree"], [False, "form"]],
    "domain": [["customer", "=", true]],
}

ps:或者在新对话框中打开特定产品的表单视图(分别获得)

{
    "type": "ir.actions.act_window",
    "res_model": "product.product",
    "views": [[False, "form"]],
    "res_id": a_product_id,
    "target": "new", # 新窗口
}

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

  • view_mode (default= tree,form )
    以逗号分隔的视图类型列表(/!)\没有空格/!)。所有这些类型都将出现在生成的视图列表中(至少有一个假view_id)
  • view_ids
    用于查看对象,定义视图的初始内容
    ps:
<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中的某个视图填充
<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>

二 URL Actions (ir.actions.act_url)
允许打开一个URL(网站/网页)通过Odoo的行动。可以通过两个字段自定义:url target

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

上面代码表示将由url中的地址,取代当前页面

三 Server Actions (ir.actions.server)
服务器的行为模型。服务器动作在一个基础模型上工作,并提供各种类型的动作,这些动作可以自动执行,例如使用基础动作规则,或者通过在“More”上下文菜单中添加动作来手动执行。
自odo8.0以来,一个按钮“创建菜单动作”按钮在动作表单视图中是可用的。它在基本模型的More菜单中创建一个条目。这允许创建服务器动作,并通过接口以大规模模式轻松地运行它们。
可用的操作有:

' Execute Python Code ':将被执行的Python代码块
‘Create a new Record’:用新值创建一个新记录
‘Write on a Record’: 更新记录
‘Execute several actions’: 定义触发其他几个服务器操作的操作

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

id 要运行的服务器操作的数据库内标识符
context (optional) 运行服务器操作时要使用的上下文数据
model_id 模型链接到Odoo的动作
state:
1.code: 执行通过code参数给出的python代码.
2.object_create: 按照fields_lines规范创建模型crud_model_id的新记录
3.object_write: 按照fields_lines规范更新当前记录
4.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 ir.model.field,指定应该在其上设置新创建的记录的当前记录的m2o字段(模型应该匹配)。
fields_lines (create/write):
child_ids (multi):

四 Report Actions (ir.actions.report)
出发打印报表
如果您通过< record>而不是< report>标签定义报表,并且希望该操作显示在模型视图的打印菜单中,您还需要从Bindings中指定binding_model_id。没有必要设置binding_type来报告,因为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表达式;记录可以作为变量对象访问

五 Client Actions (ir.actions.client)
触发一个完全在客户端中实现的操作。

  • tag 操作的客户端标识符,一个客户端应该知道如何响应的任意字符串
  • params (optional) 客户端操作是否应该在主内容区(当前)、全屏模式(全屏)或对话框/弹出窗口(新建)打开。使用main而不是current来清除面包屑。默认为当前。
 {
    "type": "ir.actions.client",
    "tag": "pos.ui"
}

六 Automated Actions (ir.cron)
动作自动触发在预先设定的频率。

  • name 自动操作的名称(主要用于日志显示)
  • interval_number 两次执行该操作之间的interval_type uom数目
  • interval_type 频率间隔的测量单位
  • numbercall 操作必须运行的次数。如果该操作预计将无限期运行,则将其设置为-1
  • doall 布尔警告在服务器重启的情况下是否必须执行错过的操作。
  • model_id 此操作将在其上调用的模
  • code 动作的代码内容。可以简单调用模型的方法
model.<method_name>()
  • nextcall 此动作的下一次计划执行日期(日期/时间格式)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值