Cognos SDK java读取report报表返回XML

2011-04-08 11:56:02|  分类: cognos |字号 订阅

      转自http://www.blogjava.net/zhangyuan/archive/2010/08/05/cognos-sdk-xml-string.html

      对COGNOS有一定了解以后,经理逐渐发现COGNOS的强大之处,特别的立方体模型使数据仓库更有条理而且访问速度更快。但是也了解到了COGNOS的劣势,应该说是IBM整体的劣势,也就是界面太丑。虽然COGNOS也包含了几乎所有的图表,样式也可以调整。但是对COGNOS的界面调整太复杂,几乎看的比较好的COGNOS显示界面都要有HTML对象来调,更或者无论你怎么调也是基于HTML,在色彩和动画方面不会有很大的空间了。
     于是经理在想,是不是可以把只用COGNOS对数据的抓取优势而在显示层用别的方式呈现呢(比如flex或者别的)?如果COGNOS能开发更多的前端显示接口固然好,但这是不可能的,当然,经理知道这样做会损失一部分性能,但是对现在大多对界面都很挑剔的客户,这肯定是一条比较好的路。
     OK,那么现在经理把做的一个java调用cognos端直接返回XML字节流的例子和大家分享下。
一、环境
    硬件环境:主屏2.0Hz+内存3gb+系统32位
    软件环境:cognos 8.41+Myeclipse8.5ga+sqlserver2000sp4

二、IBM Cognos Connection部分
    首先,我用framework做了了一个灰常简单的包(所谓非常简单就是里面完全没有维度和亮度,直接隐射的数据库表列),并把他发布到公共文件夹,名为test_sdk_paser

然后在这个包下用report studio做了一个灰常简单的报表,名为test
Cognos SDK java读取report报表返回XML_第1张图片
这个报表就是我们之后要在java中获取其数据的报表。
三、COGNOS SDK调用程序
    0.准备步骤.
我们先要把sdk所需要的包考到项目中来。必要包的位置在D:\cognos\c8\sdk\java\lib\下,先给大家看看我的目录结构
Cognos SDK java读取report报表返回XML_第2张图片
    1.我建立了一个config.properties文件用来存放congos服务器的ip和端口

    在java中对应写一个从properties中获取数据的方法
Cognos SDK java读取report报表返回XML_第3张图片
    2.弄清楚报表的xpath
    这个xpath我们可以在报表的 设置属性-->常规 找到
Cognos SDK java读取report报表返回XML_第4张图片
    xpath是十分重要的,其实报表ID也十分重要,这个经理以后会跟大家写。
    3.连接cognos服务器
经理这里用ReportService_ServiceLocator对象的getreportService方法来获得一个ReportService_Port对象。
getreportService需要一个参数,是cognos服务器地址,http://localhost/p2pd/servlet/dispatch
ReportService_Port是报表操作对象,我们就是用这个对象的run方法来运行cognos端报表。
Cognos SDK java读取report报表返回XML_第5张图片
Cognos SDK java读取report报表返回XML_第6张图片
    4.设置cognos认证信息
经理这里的cognos设置了NTML认证,那么是需要在sdk代码中设置认证信息的。
Cognos SDK java读取report报表返回XML_第7张图片
用CAM方式进行登陆
Cognos SDK java读取report报表返回XML_第8张图片
Cognos SDK java读取report报表返回XML_第9张图片
    5.设置report的参数
本例中用HashMap来传递report的参数,用循环的方式把外界的参数从HashMap中取出来,设置到ParameterValue的value中去。
Cognos SDK java读取report报表返回XML_第10张图片
    6.cognos运行报表设置
每项代表什么经理已经把注释写的很清楚了。
Cognos SDK java读取report报表返回XML_第11张图片
Cognos SDK java读取report报表返回XML_第12张图片
这里尤其提醒大家注意的一点是,RunOptionEnum.prompt这个参数一定要设置,设置这个参数是当cognos运行有参数的report时候,不弹出html提示窗口。经理之前就是没有设置这个参数,所以在测试带参数报表的时候搞了一天都没搞出来。
那么这个option到底还有多少参数呢?经理给大家看啊看你cognos sdk的官方API
Cognos SDK java读取report报表返回XML_第13张图片
大家看到了吧,官方的API只是把枚举值做了一个罗列,具体他们是做什么的?有什么作用?什么都没说。经理当然也看了sdk的源码,希望能在源码中找到一点注释,结果是:sdk的java文件没有一行注释代码。
经理在这里不想骂人,现在终于知道为什么cognos sdk这个领域这么弱了。
    7.运行cognos报表并返回xml数据
经理在这里统计了一下用sdk返回数据的时间。
之前讲过用ReportService_Port的run方法可以让report运行,然后返回一个叫AsynchReply的对象,这个对象中有details[]属性,这个里面基本上包含了report返回的所有信息。而他的status属性则标识了此次请求是否成功。
Cognos SDK java读取report报表返回XML_第14张图片


OK,现在代码都解释完了,现在来测试下。
Cognos SDK java读取report报表返回XML_第15张图片
经理在这里写了一个简单的测试例子,用之前讲到的test_sdk_paser包中的test进行测试
Cognos SDK java读取report报表返回XML_第16张图片
Cognos SDK java读取report报表返回XML_第17张图片

下面再测试一个带参数的报表

把之前的那个报表加一个参数
Cognos SDK java读取report报表返回XML_第18张图片
然后在这里输入一个1

得到这样的数据
Cognos SDK java读取report报表返回XML_第19张图片

稍微改动下代码,然后run一下
Cognos SDK java读取report报表返回XML_第20张图片
然后得到结果是这样的
Cognos SDK java读取report报表返回XML_第21张图片
正好和刚刚的结果一样~~


sdk取数据关键的也就是上面说的7个步骤。最后依然要BS一下cognos的开发者,居然在源码中一行注释都没有,帮助文档也不全面。
所以还是集结大家的力量一起研究一起分享研究后的成果。
欢迎大家一起来博客上讨论。


你可能感兴趣的:(aq)