---------
更新时间
18:06 2016-09-18 星期日
15:05 2016-03-14 星期一
18:07 2016-02-19 星期五
---------
* 窗口动作
   <?xml version="1.0" encoding="utf-8" ?>
    <openerp>
       <data>
         <act_window id="action_todo_stage"
                     name="To-Do Task Stages"
                     res_model="todo.task.stage"
                     view_mode="tree,form" />

<act_window id="todo_app.action_todo_task"
                     name="To-Do Task "
                     res_model="todo.task"
                     view_mode="tree,form,calendar,gantt,graph"
                     target="current"
                     context="{'default_user_id':uid}"
                     domain="[]"
                     limit="80" />
         <act_window id="action_todo_task_stage"
                     name="To-Do Task Stages"
                     res_model="todo.task.stage"
                     src_model="todo.task"
                     multi="False" />
       </data>

</openerp>
   
    可以用ir.action.act_window 重新写上面的对象
    <record id="action_todo_stage" model="ir.actions.act_window">
        <field name="name">To-Do Task Stage</field>
        <field name="type">ir.actions.act_window</field>
        <field name="domain">["list of 3-tuples (max 250 characters)"]</field>
        <field name="context">{"context dictionary (max 250 characters)"}</field>
        <field name="res_model">todo.task.stage</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
        <field name="search_view_id" ref="todo_task_search"/>
        <field name="view_id" ref="view_form_todo_task_ui" />
    </record>
   
    窗口的动作是存在 ir.actions.act_window 模型中的,我们可以在xml文件中用<act_window>来快捷定义
    下面是部分属性说明,完整的可以在 openerp/addons/base/ir/ir_actions.py 中的 ir.actions.act_window
    类中可以找到
    # name 显示的标题
    # type 动作类型 ,默认ir.actions.act_window
    # view_id 中的 ref 值是对应视图对象的id 触发时用哪个视图
    # context 设置目标视图的上下文
    # domain 过滤记录按条件,如:[["customer", "=", true]]
    # res_id: 当动作打开视图是表单视图时,要指定的加载记录id,只有‘view_mode’ 值为 form时才有效
              否则就会新建一个记录 如:"res_id": a_product_id,
    # res_model 动作响应的目标模型
    # target 如果设置为new 就打开新窗口,默认是 current
    # view_mode:列出允许使用的视图模式 如 form, tree, calendar,etc 默认是 tree,form
    # view_type:设定tree时的列表是树状还是普通列表, tree-树状   form-普通列表 缺省是form
    # usage: 过滤菜单和动作
    # view_ids:
    # views:是(view_id,view_type) 元组对列表,第一组是动作默认打开的视图
            如:"views": [[False, "tree"], [False, "form"]]
    # limit 指列表视图时,一页的记录数,默认是80
    # auto_refresh: 在视图中添加一个刷新功能
    # groups_id:权限组 用快捷标签则为 groups
    # search_view_id 指定响应的搜索视图(id,name) 元组对
    # filter:列表视图显示过滤器(bool)   
    # auto_search: 加载默认视图后,自动搜索
    # src_model 指定可以启动视图的更多按钮
    # multi 设为True, 更多按钮显示在列表视图,否则显示在表单视图   
   
   
    系统的默认值:
      _defaults = {
        'type': 'ir.actions.act_window',
        'view_type': 'form',
        'view_mode': 'tree,form',
        'context': '{}',
        'limit': 80,
        'target': 'current',
        'auto_refresh': 0,
        'auto_search':True,
        'multi': False,
    }

* URL动作
    ir.actions.act_url
    {
    "type": "ir.actions.act_url",
    "url": "http://odoo.com",
    "target": "self",
    }
        <record id="action_website_homepage" model="ir.actions.act_url">
            <field name="name">Website Homepage</field>
            <field name="url">/page/homepage</field>
            <field name="target">self</field>
        </record>
     # name: 显示名称
     # url:网址
     # target: new 新开  self 本窗口

* 服务端动作(这个是非常强大,开专题讲)
    ir.actions.server
        <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">
                if object.some_condition():
                    action = {
                        "type": "ir.actions.act_window",
                        "view_mode": "form",
                        "res_model": object._name,
                        "res_id": object.id,
                    }
            </field>
        </record>
     # id 服务端动作标识
     # context 上下文
     # model_id 链接响应的模型
     # condition 条优
     # code python代码设定,这里最灵活了

* 报表动作
    ir.actions.report.xml
       <record id="mc_crm_lead_demo_report" model="ir.actions.report.xml">
            <field name="name">Marketing campaign demo report</field>
            <field name="type">ir.actions.report.xml</field>
            <field name="model">crm.lead</field>
            <field name="report_name">crm.lead.demo</field>
            <field name="report_rml">marketing_campaign_crm_demo/crm_lead_mc_demo_report.rml</field>
            <field name="report_type">pdf</field>
        </record>
       
   
    #name 显示名称
    #type 动作类型,固定为ir.actions.report.xml
    #model 响应的模型
    #report_type 报表类型 有 ('qweb-pdf', 'PDF'),
                    ('qweb-html', 'HTML'),
                    ('controller', 'Controller'),
                    ('pdf', 'RML pdf (deprecated)'),
                    ('sxw', 'RML sxw (deprecated)'),
                    ('webkit', 'Webkit (deprecated)'),
    #report_name 要用的报表模板
    #groups_id 权限组
    #paperformat_id
    #attachment_use (bool)第二次打开还是前一次打开的结果
    #attachment 附件的名称
    # report_rml rml文件路径
   
    快捷标签<report> 用的属性有一些不同,主要是 groups
    <report
        id="account_invoices"
        model="account.invoice"
        string="Invoices"
        report_type="qweb-pdf"
        name="account.report_invoice"
        file="account.report_invoice"
        attachment_use="True"
        attachment="(object.state in ('open','paid')) and
            ('INV'+(object.number or '').replace('/','')+'.pdf')"
    />
   
   
   
* js调用action
    在js中调用action 和直接在python 中调用action是一样的
    但是有一个比较坑的区别是  views: [[false, 'list'],[false, 'form']],
    这里与form对应的时list 而不是tree 然而在python 里边调用 action时 tree , 这个点是很难发现的。 是通过源码查找找到的。

instance.web_calendar.CalendarView.include({
         open_event: function(id, title) {
            var self = this;
            console.log(self,"id:",id,"title:",title,'model:',self.model);
            if (self.model=='crm.phonecall'){
                this.do_action({
                        type: 'ir.actions.act_window',
                        res_model: "crm.phonecall",
                        view_mode: 'tree',
                        view_type: 'tree,form',
                        views: [[false, 'list'],[false, 'form']],
                        domain:'[("previous_contact_id","=",'+id+')]',
                        target: 'current',
                        context:"{'default_previous_contact_id':"+id+"}",
                    }, {
                        on_reverse_breadcrumb: function () {
                            self.reload();
                        }
                    });
            }else{
                this._super.apply(this, arguments);
            }
         }

});

* py文件调用action
    知识点 1. "[('id','in',[" + ','.join(map(str, sale_order_ids)) + "])]"
    在实际下情况下运用py的语法. 这操作就是 把sale_order_ids 的id列表 转换成 id字符串
    就是odoo的domain的表达式是字符串

#这个是一个简单的一个方法  
     model_data_obj = self.pool.get('ir.model.data')
        stock_picking_tree_ids = model_data_obj.xmlid_to_res_id(
            cr, SUPERUSER_ID, 'dftg_stock_picking_tree')
        view_picking_form_id = model_data_obj.xmlid_to_res_id(
            cr, SUPERUSER_ID, 'stock.view_picking_form')
        return {
            'type': 'ir.actions.act_window',
            'res_model': 'stock.picking',
            'view_mode': 'tree,form',
            'view_type': 'form',
            'name': u'查看出/入库单',
            'views': [(stock_picking_tree_ids, 'tree'), (view_picking_form_id, 'form')],
            'view_id': stock_picking_tree_ids,
            'domain': "[('so_id','='," + str(ids[0]) + "),('state','not in',['waiting'])]",
        }
    #这种方法是更常用更强大的 会动态的返回form 或者tree 很方便
      适用各种需求
        mod_obj = self.pool.get('ir.model.data')
        act_obj = self.pool.get('ir.actions.act_window')
        result = mod_obj.get_object_reference(
            cr, uid, 'dftg_ext', 'fake_sale_order_action')
        id = result and result[1] or False
        result = act_obj.read(cr, uid, [id], context=context)[0]
        # compute the number of invoices to display

if len(sale_order_ids) > 1:
            result[
                'domain'] = "[('id','in',[" + ','.join(map(str, sale_order_ids)) + "])]"
        else:
            res = mod_obj.get_object_reference(
                cr, uid, 'dftg_ext', 'fake_sale_order_form')
            result['views'] = [(res and res[1] or False, 'form')]
            result['res_id'] = sale_order_ids and sale_order_ids[0] or False
        return result
       
       
* 客户端动作
  openerp/addons/base/ir/ir_actions.py
    ir.actions.client
        <record id="action_client_sale_menu" model="ir.actions.client">
            <field name="name">Open Sale Menu</field>
            <field name="tag">reload</field>
            <field name="params" eval="{'menu_id': ref('base.menu_base_partner')}"/>
        </record>
       
    #name 显示名称
    #tag
    #res_model 目标模型
    #context 设置目标视图的上下文
    #params 带上参数
    #params_store

(20)odoo中的action的更多相关文章

  1. Odoo中的五种Action详解

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826232.html Odoo中的五种action都是继承自ir.actions.actions模型实现的 ...

  2. (19)odoo中的javascript

    -----------更新日期15:17 2016-02-16 星期二-----------* 用到的js库   我们可以打开 addons/web/views/webclient_template. ...

  3. (30)odoo中的快捷标签

    * 快捷标签   提供快捷标签是为了简化代码的编码,把复杂的工作封装化   * 找到封装化的源码:  openerp/tools/convert.py   xml_import      self._ ...

  4. odoo中def init(self):

    # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. f ...

  5. Struts2不扫描jar包中的action

    今天在做一个二开的项目,将struts打成jar包放在WEB-INF的目录下却扫描不到指定的路径,也就是http访问访问不到我们指定的action,其他代码可以正常使用,就是访问不到action.st ...

  6. C# -- 等待异步操作执行完成的方式 C# -- 使用委托 delegate 执行异步操作 JavaScript -- 原型:prototype的使用 DBHelper类连接数据库 MVC View中获取action、controller、area名称、参数

    C# -- 等待异步操作执行完成的方式 C# -- 等待异步操作执行完成的方式 1. 等待异步操作的完成,代码实现: class Program { static void Main(string[] ...

  7. Odoo中Qweb使用入门

    参考 可参考官网例子https://doc.odoo.com/trunk/web/qweb/或 http://thierry-godin.developpez.com/openerp/tutorial ...

  8. odoo13之在odoo中添加自定义页面

    注: 本博文是阅读Ruter博客 在odoo中添加自定义页面 后所做的个人总结,以及博文搬迁,主要是便于自己的后期理解:大部分内容为搬运,当然也包括自己的一些总结和流程优化. 前言 首先展示效果:进入 ...

  9. 如何快速在odoo中创建自己的菜单

    上一篇内容:如何快速创建odoo模块,使用脚手架快速创建自己的odoo应用app 前言 在上一个教程中,我们已经实现了对模块的创建,现在我们要对创建的模块添加内容,这个教程将教你如何在odoo菜单中创 ...

随机推荐

  1. Python ftplib

    http://automationtesting.sinaapp.com/blog/m_ftplib https://docs.python.org/2/library/ftplib.html 概述 ...

  2. centos7 安装教程

    1. 在安装的时候,不要用默认的最小安装.选择GNOME Desktop 2.自动分区的时候,选择自己进行分区 2个分区,1个大小为1024M的swap分区,剩下的分配一个ext3的分区.设备类型都选 ...

  3. Atlassian如何实施DevOps

    DevOps是推动开发和运维团队之间沟通和协作的手段.它不是一个工具或产品.相反,其成功的首要因素就是文化.目的是更快的创新和更好的客户体验. "2015年DevOps状态报告"调 ...

  4. 序列的方法(str,list,tuple)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在快速教程中,我们了解了最基本的序列(sequence).回忆一下,序列包含有定值 ...

  5. hdu 5673 Robot 卡特兰数+逆元

    Robot Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem D ...

  6. git学习笔记09-bug分支-自己的分支改到一半了-要去改bug怎么办?

    当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交: 并不是你不想提交,而是工作只进行到一半,还没法 ...

  7. iOS - OC NSSize 尺寸

    前言 结构体,这个结构体用来表示事物的宽度和高度. typedef CGSize NSSize; struct CGSize { CGFloat width; CGFloat height; }; t ...

  8. PHP面向对象(OOP)编程入门教程————如何实例化对象?

    我们上面说过面向对象程序的单位就是对象,但对象又是通过类的实例化出来的,既然我们类会声明了,下一步就是实例化对象了. 当定义好类后,我们使用new关键字来生成一个对象. $对象名称 = new 类名称 ...

  9. Jquery 移除 html中绑定的onClick事件

    HTML绑定示例: <button class="edit" onClick="showTurnEdit(this)">编辑</button& ...

  10. MonkeyRunner学习(2)常用命令

    目录: 1.截图 2.暂停 (时延秒) 3.屏幕操作 4.打印 5.字符串发送到键盘输入(登录输入) 6.唤醒设备屏幕 7.重起手机 8.按键(系统键) 9.回车键 10.for 循环 11.循环截图 ...