Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

关于 OpenERP html 格式报表的一些测试.



  • 看BBS里,一直有关于翻译,关于报表方面的努力.
    我的想法是 关于翻译, 一般来讲,在很多企业里,只要使用顺手了.界面上有一些未翻译部分,也是不影响企业的正常使用的. 象SAP这样的大家伙,在走入国门后,还是有很多地方还是原版的E文界面的.

    本来近段时间一直在看OpenERP权限部分的东西. 也没有啥人可以IM讨论.

    早先在OpenERP QQ群(69195329) 就讨论到关于 OpenERP 的实现机制. 我大致看了一下. OpenERP 设计上面是比较灵活的.支持多种格式的报表.

    因为我在企业里时间里,一直觉得 HTML(XHTML) 在企业报表方面应该比较适合. 也在以前的企业里使用过很多HTML报表. 所以, 自然就希望 OpenERP支持HTML报表就好了.

    当时讨论时 OpenERP 是 5.0.1 版.
    抓包(xmlrpc)分析了一下, 在请求报表时,有一个参数引起了我的兴趣.
    [code]<member><name>report_type</name><value><string>pdf</string></value></member>[/code]

    根据 name 就可以估计,应该是支持多种格式的报表.
    仔细看了一下 5.0.1 的 server 源码. 发现有个 html2html 的部分.猜想应该是 关于 html 报表的东西.

    然后,把抓到的数据包里的内容
    [code]<member><name>report_type</name><value><string>pdf</string></value></member>[/code]
    改为
    [code]<member><name>report_type</name><value><string>html</string></value></member>[/code]
    重新POST.. 很可惜. 失败了.. 但我想我的猜测应该没有错.

    所以, OpenERP 5.0.3 放出来后, 群里又讨论到中文报表的效率问题(主要还是字体以及报表的处理方式), 如果使用HTML报表,自然不会存在上面的字估以及处理效率问题.

    所以,按5.0.1 的方式,抓包,改包... 居然成功了...

    然后再 模拟客户端取出报表的内容. 呵呵. 的确成功了. 报表内容返回了我选择商品的数据.

    目前还存在两个问题待解决:

    A 如何修改 Client 或者 web-Client ,让报表的表现默认为 html 格式.
    B 如何修改 对应的报表HTML模板

    附:
    报表的请求及返回原理:

    报表的交互都是使用的 xmlrpc 或者 netrpc (netrpc 与 xmlrpc 的不同,唯一就是 netrpc 直接走 socket 而非 HTTP)

    Client--->简称 C
    Server--->简称 S

    当点击报表时,
    C 发送 对应报表的请求 rpc 内容.
    本例 使用的打印商品标签(产品--->产品---->双击产品--->Product Labels)
    [code]<param><value><string>product.product.label</string></value></param><param><value><array><data><value><int>2</int></value></data></array></value></param>...<member><name>model</name><value><string>product.product</string></value></member><member><name>id</name><value><int>2</int></value></member><member><name>report_type</name><value><string>html</string></value></member>
    [/code]
    本例数据, 目的打印 商品ID=2 的标签.

    注意 <string>html</string> 我已经由 <string>pdf</string> 改为 html 了.

    然后服务器(S)返回:
    [code]<?xml version='1.0'?><methodResponse><params><param><value><int>3</int></value></param></params></methodResponse>[/code]

    也就是说,生成了一个报表ID=3的报表.

    接下来..客户端(C)再请求得到报表的二进制数据:
    [code]<methodCall><methodName>report_get</methodName><params>...<param><value><int>3</int></value></param></params></methodCall>[/code]

    服务器(S)返回该报表的xml 数据
    [code]
    HTTP/1.0 200 OKServer: BaseHTTP/0.3 Python/2.5.2Date: Tue, 22 Sep 2009 07:29:19 GMTContent-type: text/xmlContent-length: 3101
    <?xml version='1.0'?><methodResponse><params><param><value><struct><member><name>state</name><value><boolean>1</boolean></value></member><member><name>result</name><value><string>PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy93M2MvL0RURCBIVE1MIDQuMCBGcmFtZXNldC8vRU4iPgo8aHRtbD4KPGhlYWQ+CjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i.....
    ....[/code]

    下面的部 result 部分便是报表的二进制数据(base64过的)

    然后 base64 decode 一下.

    得到报表内容:

    [code]<!DOCTYPE HTML PUBLIC "-//w3c//DTD HTML 4.0 Frameset//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <style type="text/css"> p {margin:0px; font-size:12px;} td {font-size:14px;}p.nospace {font-size:15.0px}
    </style>
    <script type="text/javascript">
    var indexer = 0; var aryTest = ["<table border='0' width='277'><tr><td width='14'> </td><td><table style='mytable' colWidths='2.8cm,5.4cm'><tr><td><p style='nospace'/></td><td><p style='nospace' t='1'>1.0</p></td></tr><tr><p/><td><p style='nospace'>商品002</p>, <p style='nospace'/></td></tr><tr><td width='79.3700787402'/><td width='153.070866142'/></tr></table></td></tr></table><br/><br/></td></tr></table><br/>"] ; function nextData() { if(indexer < aryTest.length -1)......[/code]



  • 看BBS里,一直有关于翻译,关于报表方面的努力.
    我的想法是 关于翻译, 一般来讲,在很多企业里,只要使用顺手了.界面上有一些未翻译部分,也是不影响企业的正常使用的. 象SAP这样的大家伙,在走入国门后,还是有很多地方还是原版的E文界面的.

    本来近段时间一直在看OpenERP权限部分的东西. 也没有啥人可以IM讨论.

    早先在OpenERP QQ群(69195329) 就讨论到关于 OpenERP 的实现机制. 我大致看了一下. OpenERP 设计上面是比较灵活的.支持多种格式的报表.

    因为我在企业里时间里,一直觉得 HTML(XHTML) 在企业报表方面应该比较适合. 也在以前的企业里使用过很多HTML报表. 所以, 自然就希望 OpenERP支持HTML报表就好了.

    当时讨论时 OpenERP 是 5.0.1 版.
    抓包(xmlrpc)分析了一下, 在请求报表时,有一个参数引起了我的兴趣.
    [code]<member><name>report_type</name><value><string>pdf</string></value></member>[/code]

    根据 name 就可以估计,应该是支持多种格式的报表.
    仔细看了一下 5.0.1 的 server 源码. 发现有个 html2html 的部分.猜想应该是 关于 html 报表的东西.

    然后,把抓到的数据包里的内容
    [code]<member><name>report_type</name><value><string>pdf</string></value></member>[/code]
    改为
    [code]<member><name>report_type</name><value><string>html</string></value></member>[/code]
    重新POST.. 很可惜. 失败了.. 但我想我的猜测应该没有错.

    所以, OpenERP 5.0.3 放出来后, 群里又讨论到中文报表的效率问题(主要还是字体以及报表的处理方式), 如果使用HTML报表,自然不会存在上面的字估以及处理效率问题.

    所以,按5.0.1 的方式,抓包,改包... 居然成功了...

    然后再 模拟客户端取出报表的内容. 呵呵. 的确成功了. 报表内容返回了我选择商品的数据.

    目前还存在两个问题待解决:

    A 如何修改 Client 或者 web-Client ,让报表的表现默认为 html 格式.
    B 如何修改 对应的报表HTML模板

    附:
    报表的请求及返回原理:

    报表的交互都是使用的 xmlrpc 或者 netrpc (netrpc 与 xmlrpc 的不同,唯一就是 netrpc 直接走 socket 而非 HTTP)

    Client--->简称 C
    Server--->简称 S

    当点击报表时,
    C 发送 对应报表的请求 rpc 内容.
    本例 使用的打印商品标签(产品--->产品---->双击产品--->Product Labels)
    [code]<param><value><string>product.product.label</string></value></param><param><value><array><data><value><int>2</int></value></data></array></value></param>...<member><name>model</name><value><string>product.product</string></value></member><member><name>id</name><value><int>2</int></value></member><member><name>report_type</name><value><string>html</string></value></member>
    [/code]
    本例数据, 目的打印 商品ID=2 的标签.

    注意 <string>html</string> 我已经由 <string>pdf</string> 改为 html 了.

    然后服务器(S)返回:
    [code]<?xml version='1.0'?><methodResponse><params><param><value><int>3</int></value></param></params></methodResponse>[/code]

    也就是说,生成了一个报表ID=3的报表.

    接下来..客户端(C)再请求得到报表的二进制数据:
    [code]<methodCall><methodName>report_get</methodName><params>...<param><value><int>3</int></value></param></params></methodCall>[/code]

    服务器(S)返回该报表的xml 数据
    [code]
    HTTP/1.0 200 OKServer: BaseHTTP/0.3 Python/2.5.2Date: Tue, 22 Sep 2009 07:29:19 GMTContent-type: text/xmlContent-length: 3101
    <?xml version='1.0'?><methodResponse><params><param><value><struct><member><name>state</name><value><boolean>1</boolean></value></member><member><name>result</name><value><string>PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy93M2MvL0RURCBIVE1MIDQuMCBGcmFtZXNldC8vRU4iPgo8aHRtbD4KPGhlYWQ+CjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i.....
    ....[/code]

    下面的部 result 部分便是报表的二进制数据(base64过的)

    然后 base64 decode 一下.

    得到报表内容:

    [code]<!DOCTYPE HTML PUBLIC "-//w3c//DTD HTML 4.0 Frameset//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <style type="text/css"> p {margin:0px; font-size:12px;} td {font-size:14px;}p.nospace {font-size:15.0px}
    </style>
    <script type="text/javascript">
    var indexer = 0; var aryTest = ["<table border='0' width='277'><tr><td width='14'> </td><td><table style='mytable' colWidths='2.8cm,5.4cm'><tr><td><p style='nospace'/></td><td><p style='nospace' t='1'>1.0</p></td></tr><tr><p/><td><p style='nospace'>商品002</p>, <p style='nospace'/></td></tr><tr><td width='79.3700787402'/><td width='153.070866142'/></tr></table></td></tr></table><br/><br/></td></tr></table><br/>"] ; function nextData() { if(indexer < aryTest.length -1)......[/code]



  • <!-- s:lol --><img src="{SMILIES_PATH}/lol.gif" alt=":lol" title="" /><!-- s:lol --> 水,辛苦啦


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待