深入理解报表运行机制

原文:http://blog.sina.com.cn/s/blog_57ded94e01014ppd.html

1) OpenERP报表的基本运行机制
    OpenERP报表的一般定义语法是:
      <report id="c2c_demo_report_x" string="C2C Demo Report" model="hr.holidays" 
          name="sandbox_c2c_reporting_tools" header="False"/>

这个定义的含义是,在对象hr.holidays上增加报表操作(model="hr.holidays"),该报表操作的显示字符是C2C Demo Report(string="C2C Demo Report"),当用户点击该操作字符(C2C Demo Report),系统调用名为sandbox_c2c_reporting_tools(name="sandbox_c2c_reporting_tools")的Services,该Services返回报表文件(PDF或其他格式文件)。
    因此,理解OpenERP报表机制的核心是,理解报表Services机制。

2) OpenERP的报表Service
    OpenERP的报表Service的基本接口定义在文件:openerp-server-6.0.3\bin\report\interface.py,期定义如下:
        report_int(netsvc.Service)
          __init__(self, name, audience='*')
          create(self, cr, uid, ids, datas, context=None)

init方法中最重要的参数是name,该参数是Service Name,其格式是"report.xxx", xxx 必须和报表定义时候的(name="sandbox_c2c_reporting_tools")一致,系统是通过该名字找到该Service。
    create方法中,最重要的参数是ids,该参数是报表操作所在的画面上,选定的对象的id列表。通常,系统会为ids中的每一个对象出一个报表。datas参数通常用于Wizard的情况,即先弹出Wizard画面,用户输入一些数据,点击按钮,系统再输出报表文件。在这种情况,datas参数里保存着用户在Wizard画面上输入的数据。
    显然,系统的内部动作是,用户点击报表动作,系统根据name="sandbox_c2c_reporting_tools"找到相应Service,调用Service的Create方法,返回报表文件。Create方法的返回值格式是:(report_doc,mimetype)。例如,如果返回pdf报表,返回值是(pdf_doc,'pdf')。

3) RML报表
    如果直接继承接口report_int,编写create方法生成pdf文档,代码复杂,工作量大。系统提供了RML格式报表,用于简化pdf报表开发。其基本原理是,开发RML格式文档,系统的Create方法读取rml文件,渲染成pdf文档,输出。相关接口如下:
  report_rml(report_int)
    __init__(self, name, table, tmpl, xsl)
    create(self, cr, uid, ids, datas, context)

report_sxw(report_rml)
    __init__(self, name, table, rml=False, parser=rml_parse, header='external', store=False)
    create(self, cr, uid, ids, data, context=None)

这两个派生Class中,create方法的参数没有变化,init方法增加了一些参数,说明如下:
    table: 报表关联的数据对象,渲染rml时候需要调用该对象取得数据。
    rml:RML文件路径及名称,系统需要读取该文件渲染成PDF报表。
    parser:渲染器,系统的实际做法是,在create方法中调用渲染器的有关方法,将rml渲染成pdf。用户可以开发自己的渲染器,用于将rml渲染成其他格式,如html、txt等,实际上,系统已经提供了html、txt等的渲染器。

因此,开发rml格式的报表时候,通常只需要开发自己的渲染器(parser),不需要开发report_int。

openerp经典收藏 深入理解报表运行机制(转载)的更多相关文章

  1. openerp经典收藏 深入理解工作流(Workflow)(转载)

    深入理解工作流(Workflow) 原文:http://shine-it.net/index.php/topic,2494.0.html 一.工作流定义:<?xml version=" ...

  2. openerp经典收藏 深入理解对象(转载)

    深入理解对象(转载) 原文地址:http://shine-it.net/index.php/topic,2159.0.htmlhttp://blog.sina.com.cn/s/blog_57ded9 ...

  3. openerp经典收藏 对象定义详解(转载)

    对象定义详解 原文地址:http://shine-it.net/index.php/topic,2159.0.htmlhttp://blog.sina.com.cn/s/blog_57ded94e01 ...

  4. openerp经典收藏 字段定义详解(转载)

    字段定义详解 原文地址:http://shine-it.net/index.php/topic,2159.0.htmlhttp://blog.sina.com.cn/s/blog_57ded94e01 ...

  5. 深入理解JavaScript运行机制

    深入理解JavaScript运行机制 前言 本文是写作在给团队新人培训之际,所以其实本文的受众是对JavaScript的运行机制不了解或了解起来有困难的小伙伴.也就是说,其实真正的原理和本文阐述的并不 ...

  6. 如何通过setTimeout理解JS运行机制详解

    setTimeout()函数:用来指定某个函数或某段代码在多少毫秒之后执行.它返回一个整数,表示定时器timer的编号,可以用来取消该定时器. 例子 ? 1 2 3 4 5 console.log(1 ...

  7. openerp 经典收藏 记录规则 – 销售只能看到自己的客户,经理可以看到全部(转载)

    记录规则 – 销售只能看到自己的客户,经理可以看到全部 原文地址:http://cn.openerp.cn/record_rule/ OpenERP中的权限管理有四个层次: 菜单级别: 即,不属于指定 ...

  8. js异步梳理:1.从浏览器的多进程到JS的单线程,理解JS运行机制

    大家很早就知道JS是一门单线程的语言.但是也时不时的会看到进程这个词.首先简单区分下线程和进程的概念 1. 简单理解进程 - 进程是一个工厂,工厂有它的独立资源 - 工厂之间相互独立 - 线程是工厂中 ...

  9. 深入理解ceph-disk运行机制

    谷忠言 一,背景 目前项目所用的ceph集群内部的一个节点, 一般需要管理大约十块硬盘左右的数据存储空间,外加一到两块ssd组成的journal空间.Ceph要求每个osd对应的数据盘挂载到特定的目录 ...

随机推荐

  1. 2013年arcgis培训

    关于开展“GIS空间分析及应用案例解析”培训班的通知   各企事业单位: 随着信息技术的发展,地理信息系统(简称GIS)产业异军突起,在国民经济各个行业中的应用日益广泛,物联网.智慧地球.3S技术等等 ...

  2. Java学习笔记——switch语句的参数类型

    在JDK1.6的版本中,switch后面的括号里面只能放int类型的值,注意是只能放int类型, 但是放byte,short,char类型的也可以. 是因为byte,short,shar可以自动提升( ...

  3. [原创] Web UI自动化应用测试框架实践 - 概览

    之前为我们部门做的一个UI框架.不能纯粹解读为框架,主要是做了一些简单的分层设计,以解决稳定性.降低复杂性.提升可维护性以及快速构建测试用例等实际问题. 主要部分:1. 测试数据.主要提供测试类库需要 ...

  4. PHP 中mysql如何实现事务提交?

    事务就是指对数据库的多次修改,要么全部成功,要么全部失败,不能出现部分修改成功,部分修改失败的情况. PHP下操作mysql数据库要实现事务提交,需注意以下方面: 1, 数据库表存储引擎类型设置为in ...

  5. 如何使用 SQL Developer 导出数据

    完成此方法文档后,您应该能够了解: 如何使用 SQL Developer 将数据导出为各种文件格式 如何导出模式中的对象定义 目录 1. 简介 2. 软件要求 3. 导出数据 4. 导出对象定义 5. ...

  6. 转: Android基于HLS和RTMP协议的第三方SDK选择

    转自: http://isunxu.xyz/android/between-rtmp-and-hls-third-party-choice/ 协议的详解网上资料都太多了,我就不赘述了.Android上 ...

  7. log4net保存到数据库系列四、完整代码配置log4net

    园子里面有很多关于log4net保存到数据库的帖子,但是要动手操作还是比较不易,从头开始学习log4net数据库日志一.WebConfig中配置log4net 一.WebConfig中配置log4ne ...

  8. Sublime Text—自带快捷键介绍

    前言: Sublime Text是个小巧便捷的编辑器,除了众多好用的插件外,还有它自带的快捷键,打代码事半功倍,不会用的赶紧看看吧! 其实菜单上都有,看不懂可以汉化,Key Bindings-Defa ...

  9. web服务器内置对象,或者说是ServletAPI的实例

    final javax.servlet.jsp.PageContext pageContext; javax.servlet.http.HttpSession session = null;   // ...

  10. jQuery滚动时动态加载页面内容

    var loading = false; $(window).scroll(function(){ if((($(window).scrollTop()+$(window).height())+250 ...