9.报表和WebService
True

1. 报表

1.1 报表打印

Odoo 8.0 开始使用新的基于QWebTwitter Bootstrap Wkhtmltopdf的报表引擎。一个报表有两个元素组成:
其一是ir.actions.report.xml中,针对报表提供的快捷元素<report>,这个元素用于设置报表的各种基本参数(如默认类型,报表生成后是否保存到数据库)

已复制

另一个是标准的QWeb视图,实例如下:

已复制

由于报表是标准的web页面,所以都可以通过URL和输出参数来访问,例如HTML版本的发票报表可以通过这个地址访问:http://localhost:8069/report/html/account.report_invoice/1(如果安装了account),而PDF版本可以通过这个地址访问:http://localhost:8069/report/pdf/account.report_invoice/1

警告
如果出现了PDF报表没有样式(比如有文本显示但是与html版本的风格/布局不一致),可能是wkhtmltopdf进程不能为下载提供web服务。
如果你检查服务日志,并且看到生成PDF报表时CSS样式未被下载,那么就可以肯定是这个问题。
wkhtmltopdf进程使用web.base.url这个系统参数作为根路径来组合所有文件路径,但是这个参数是在管理员帐户登录后自动生成的。如果你的服务器位于某种代理服务器之后,则无法访问该服务器。你可以添加一个系统参数来固化它:

  • report.url,可以访问你的服务器的URL地址,比如http://localhost:8069或者类似的地址。这个参数仅用于这个特殊情况。
  • web.base.url.freeze,当设置这个参数值为True时将停止自动更新web.base.url

练习

#创建授课模型的报表
对于每个授课,报表都将显示它的授课名称,开始和结束时间,以及课程出席人列表。

openacademy / __ manifest__.py

已复制

openacademy/reports.xml

已复制

仪表盘

练习

#定义一个仪表盘
定义一个仪表盘,这个仪表盘包含了已经建立的图形视图、授课日历视图、课程列表视图(可以选择form视图)。这个仪表盘可以通过菜单中的菜单项使用,并且当选择开放学院主菜单时自动显示在web客户端。

  1. 建立文件openacademy/views/session_board.xml。这个文件包含面板视图,视图的触发action,打开仪表盘的action,以及重新定义主菜单项以添加仪表盘的action。

注意
可以使用的仪表盘风格有:11-12-11-1-1

  1. 更新openacademy/__manifest__.py文件,以引用新的数据文件。

openacademy/__manifest__.py

已复制

openacademy/views/session_board.xml

已复制

WebServices
WebService模型为所有web服务提供通用接口:

  • XML-RPC
  • JSON-RPC
    业务对象也可以通过这种分布式机制进行访问,在客户端界面通过上下文编辑这些业务对象。
    Odoo支持通过XML-RPC/JSON-RPC接口访问,这两种协议在许多开发语言中都有库支持。

XML-RPC库
下面的例子是Python程序通过xmlrpclib库访问Odoo服务器:

已复制

练习

#在客户端添加新服务
编写Python程序,用来发送XML-RPC请求到运行Odoo的PC。这个程序将显示全部授课,以及所对应的座位数。也可以为课程创建新的授课。

已复制

不使用硬编码,通过课程名称查找课程ID:

# 3.create a new session for the "Functional" course

已复制

JSON-RPC库
下面的例子是一个Python程序,通过Pythong的标准库urllib2json与Odoo服务器交互。

已复制

下面是使用jsonrpc完成相同功能的程序

已复制

列表使用时间组件
True