odoo V10中文参考手册(三:Actions)

action简介

actions定义了系统对于用户的操作的响应:登录、按钮、选择项目等,action可以保存在数据库或在按钮方法中以数据字典的形式返回。每个action有两个必选属性:

  • type -- 响应动作的类型,决定使用哪个字段或动作的响应方式
  • name -- 在用户界面中显示给用户的易读的动作描述

客户端可以通过4种形式来获取action

  • False - 会自动关闭所有的对话框
  • String - 如果有相匹配的客户端动作,会被解释为相应动作的标签,否则会当成Number处理
  • Number - 从数据库读取相应的action记录,一般是数据库标识id
  • Dict - 当成客户端动作来执行

窗口Action(ir.actions.act_window )

最常用的action类型,用于将model的数据展示出来

字段列表:
1.res_model -- 需要在view里显示数据的model
2.views -- 一个(view_id, view_type) 列表,view_type代表视图类型如:form,tree,gragh...,view_id是可选的数据库id或False,如果没有指定id,客户端会自动用fields_view_get()获取相应类型的默认视图,type参数列表的第一个会被默认用来展示
3.res_id (可选) -- 当默认的视图类型是form时,可用于指定加载的数据
4.search_view_id (可选) -- (id, name),id是储存在数据库的搜索视图,默认会读取model的默认搜索视图
5.target (可选) -- 定义视图是 在当前视图上打开(current)、使用全屏模式(fullscreen)、使用弹出框(new)、可使用main代替current来清除面包屑导航
6.context (可选) -- 额外的需要传给视图的环境数据
7.domain (可选) -- 自动添加到视图搜索中的查询
8.limit (可选) -- 在客户端显示的数据量,默认80
9.auto_search(可选) -- 搜索是否在加载默认视图后立即执行,默认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",
}

保存在数据库里窗口action有一些不同的需要被客户忽略的字段,大多数情况下用来组成视图列表

  • view_mode -- 以逗号分隔的视图类型列表,所有类型的视图会被展示出来
  • view_ids -- 视图对象的一系列的字段,用于定义视图的默认内容
  • view_id -- 将指定的view加入到视图中,以防不被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,即使它不是对应模型的默认视图

服务端组合视图的步骤:

  • 依次获取view_ids的(id, type)
  • 如果定义了view_id而且它的类型没有被包含在其中,将它加到最前面
  • 对于所有没有指定的view_mode,加一个(False,type)

链接Action(ir.actions.act_url)

可以通过odoo的链接打开一个网站页面,可通过两个字段来自定义:

  • url -- 当激活action时所打开的链接
  • target -- new:在新窗口打开,self:替换当前页面内容,默认new
{
    "type": "ir.actions.act_url",
    "url": "http://odoo.com",
    "target": "self",
}

服务器Action (ir.actions.server)

可以通过action定位来触发复杂的服务端代码,需要两个与客户端相关的字段:

  • id -- 服务端action在数据库存储的id

  • context (可选) -- 执行服务端action的上下文环境
    储存在数据库中的action可以基于state执行一些特别的动作,部分字段在state之间是相互共享的

  • model_id -- 与action相关联的model,在 evaluation contexts中可用

  • condition (可选) -- 使用服务端的 evaluation contexts 来执行python代码,如果是False则阻止action执行,默认值是True

动作类型是可以随意扩展的,默认的动作类型:

  • code -- 当调用action时执行的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>

# 在code片段中可以定义一个action变量,会被返回给客户端用于指定下一个执行的action
<field name="code">
    if object.some_condition():
        action = {
            "type": "ir.actions.act_window",
            "view_mode": "form",
            "res_model": object._name,
            "res_id": object.id,
        }
</field>
  • object_create -- 使用钩子创建一条新记录(通过create或copy方法)

  • use_create
    1.new - 基于指定的 model_id创建一条记录
    2.new_other - 基于指定的crud_model_id创建一条记录
    3.copy_current - 复制action所引用的记录
    4.copy_other - 复制一个通过ref_object获得的记录

  • fields_lines --当创建或复制记录时需要修改的字段,One2many 会有以下字段:
    1.col1 -- 在use_create里所包含的需要被重赋值的ir.model.fields
    2.value -- 字段对应的值,基于type进行解析
    3.type -- 取值value:就是value字段的值,取值equation:value字段会当成python来解析

  • crud_model_id -- 当use_create为new_other时,表示用于创建新记录的model id

  • ref_object -- 当use_create为copy_other时用于指定创建记录时引用的记录

  • link_new_record -- 是否用用link_field_id将新记录和当前记录进行many2one关联,默认False

  • link_field_id -- 指定当前记录与新记录进行many2one关联的字段

  • object_write -- 与object_create相似,只是只修改当前记录而不创建新记录

  • use_create
    1.current - 修改更新到当前记录
    2.other - 修改更新到通过crud_model_id 或 ref_object指定的新记录
    3.expression - 修改更新到通过crud_model_id 以及 write_expression筛选过后的记录

  • write_expression - 返回一条记录或对象id的python表达式

  • fields_lines,crud_model_id,ref_object与object_create一致

  • multi
    将通过child_ids many2many关系定义的action一个个执行,如果有action自己返回action,最后一个action被返回给客户端作为将前multi action的下一个action

  • trigger 发送一个信号给工作流

  • wkf_transition_id - 用于触发的与workflow.transition有Many2one关系的id

  • use_relational_model - 如果是base(默认),则触发当前记录的维护信号;如果是relational,则触发通过wkf_model_id 和 wkf_field_id筛选出来的当前记录的字段

  • client_action -- 返回通过action_id定义的action

上下文环境

有些键在上下文环境和服务端action里是可用的:

  • model -- 通过model_id与action关联的model
  • object, obj -- 只在有active_model 和active_id才可用,给出经过active_id过滤的记录
  • pool -- 当前数据库注册
  • datetime, dateutil, time -- python模块
  • cr -- 当前查询游标
  • user -- 当前用户记录
  • context -- 执行上下文环境
  • Warning -- 警告异常的构造器

报表Action (ir.actions.report.xml)

此action为打印报表的触发器

  • name(必选) -- 在一个列表里进行查找时使用
  • model (必选) -- 报表所反映的数据来源model
  • report_type (必选) -- qweb-pdf | qweb-html
  • report_name -- 报表命名,用于输出的pdf文件名
  • groups_id -- 可以读取或使用当前报表的用户组,Many2many字段
  • paperformat_id -- 报表所使用的纸张格式,默认使用公司的格式,Many2one字段
  • attachment_use -- 当取值true的时候只在第一次请求时生成报表,之后直接从保存的报表打印,可用于生成后不会有改变的报表
  • attachment -- 使用python表达式来定义报表名字,该记录可用变量object访问

客户端Actions (ir.actions.client)

触发一个完全在客户端实现的action

  • tag -- action在客户端的标识符,一般是一个专用的字符串
  • params (可选) -- 用来传给客户端的python数据字典格式数据
  • target (可选) -- current:当前内容区打开action,fullscreen:以全屏模式打开,new:以弹出框打开
#例:打开一个pos界面,不需要服务端知道它是如何运行的
{
    "type": "ir.actions.client",
    "tag": "pos.ui"
}

译自odoo官方文档:http://www.odoo.com/documentation/10.0/reference/actions.html,欢迎批评指正。

内容发布自//www.greatytc.com/u/6fdae8ec06bc,转载请注明出处

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容