随笔-15  评论-79  文章-0  trackbacks-0

    对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

这个报表就是我们之后要在java中获取其数据的报表。
三、COGNOS SDK调用程序
    0.准备步骤.
我们先要把sdk所需要的包考到项目中来。必要包的位置在D:\cognos\c8\sdk\java\lib\下,先给大家看看我的目录结构

    1.我建立了一个config.properties文件用来存放congos服务器的ip和端口

    在java中对应写一个从properties中获取数据的方法

    2.弄清楚报表的xpath
    这个xpath我们可以在报表的 设置属性-->常规 找到

    xpath是十分重要的,其实报表ID也十分重要,这个经理以后会跟大家写。
    3.连接cognos服务器
经理这里用ReportService_ServiceLocator对象的getreportService方法来获得一个ReportService_Port对象。
getreportService需要一个参数,是cognos服务器地址,http://localhost/p2pd/servlet/dispatch
ReportService_Port是报表操作对象,我们就是用这个对象的run方法来运行cognos端报表。


    4.设置cognos认证信息
经理这里的cognos设置了NTML认证,那么是需要在sdk代码中设置认证信息的。

用CAM方式进行登陆


    5.设置report的参数
本例中用HashMap来传递report的参数,用循环的方式把外界的参数从HashMap中取出来,设置到ParameterValue的value中去。

    6.cognos运行报表设置
每项代表什么经理已经把注释写的很清楚了。


这里尤其提醒大家注意的一点是,RunOptionEnum.prompt这个参数一定要设置,设置这个参数是当cognos运行有参数的report时候,不弹出html提示窗口。经理之前就是没有设置这个参数,所以在测试带参数报表的时候搞了一天都没搞出来。
那么这个option到底还有多少参数呢?经理给大家看啊看你cognos sdk的官方API

大家看到了吧,官方的API只是把枚举值做了一个罗列,具体他们是做什么的?有什么作用?什么都没说。经理当然也看了sdk的源码,希望能在源码中找到一点注释,结果是:sdk的java文件没有一行注释代码。
经理在这里不想骂人,现在终于知道为什么cognos sdk这个领域这么弱了。
    7.运行cognos报表并返回xml数据
经理在这里统计了一下用sdk返回数据的时间。
之前讲过用ReportService_Port的run方法可以让report运行,然后返回一个叫AsynchReply的对象,这个对象中有details[]属性,这个里面基本上包含了report返回的所有信息。而他的status属性则标识了此次请求是否成功。


OK,现在代码都解释完了,现在来测试下。

经理在这里写了一个简单的测试例子,用之前讲到的test_sdk_paser包中的test进行测试


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

把之前的那个报表加一个参数

然后在这里输入一个1

得到这样的数据

稍微改动下代码,然后run一下

然后得到结果是这样的

正好和刚刚的结果一样~~


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

谢谢~

 

 

 

 

 

 

 

 

 

 


 

posted on 2010-08-05 21:41 张元Won 阅读(6188) 评论(16)  编辑  收藏 所属分类: Cognos

评论:
# re: Cognos SDK 研究学习手册(二)之[java读取report报表返回XML] 2010-08-05 22:51 | bonamana
大哥,不要打这么多底纹好不好  回复  更多评论
  
# re: Cognos SDK 研究学习手册(二)之[java读取report报表返回XML] 2010-08-05 23:38 | え经理え
最近太流行转载了... 没办法··@bonamana
  回复  更多评论
  
# re: Cognos SDK 研究学习手册(二)之[java读取report报表返回XML] 2010-08-11 14:47 | gf7
转载你是没办法制止的,再说转了才说明你的好,有价值。你发表的目的是什么?  回复  更多评论
  
# re: Cognos SDK 研究学习手册(二)之[java读取report报表返回XML] 2010-09-12 18:59 | 董懂
请问输入两个参数怎么弄??而且你的index好像永远都是0吧。。--!  回复  更多评论
  
# re: Cognos SDK 研究学习手册(二)之[java读取report报表返回XML] 2010-09-12 23:38 | え经理え
设置两个我参数是一样的..我试过的...

你说的index指的是什么?..  回复  更多评论
  
# re: Cognos SDK 研究学习手册(二)之[java读取report报表返回XML] 2010-09-14 14:09 | 董懂
@え经理え
5.设置report的参数 index变量。。。
  回复  更多评论
  
# re: Cognos SDK 研究学习手册(二)之[java读取report报表返回XML][未登录] 2010-09-20 14:56 | aa
您能把cognos sdk的官方API上传一份吗?
  回复  更多评论
  
# re: Cognos SDK 研究学习手册(二)之[java读取report报表返回XML][未登录] 2010-09-20 15:16 | aa
向您借问cognos sdk的官方API,
能上传一份吗?或者说一下下载地址,找的实在是太久了,没找到。
谢谢。
  回复  更多评论
  
# re: Cognos SDK 研究学习手册(二)之[java读取report报表返回XML] 2011-02-11 11:52 | tyoushinya
麻烦能不能实现报表多张图片的取得啊?
查了一些资料只能找到取得一张图片的例子。  回复  更多评论
  
# re: Cognos SDK 研究学习手册(二)之[java读取report报表返回XML][未登录] 2011-06-27 16:44 | 崔新鹏
为什么我向cognos报表中传两个参数就不管用了那?????  回复  更多评论
  
# re: Cognos SDK 研究学习手册(二)之[java读取report报表返回XML] 2011-07-08 11:06 | Cognoser
雁过留声,看过留言,jianchibuxie_777@sina.com  回复  更多评论
  
# re: Cognos SDK 研究学习手册(二)之[java读取report报表返回XML] 2012-06-26 16:38 | 马云
谢谢~  回复  更多评论
  
# re: Cognos SDK 研究学习手册(二)之[java读取report报表返回XML] 2013-08-23 11:06 | yuc
请问返回这个xml文件有什么实质性的用途呢?  回复  更多评论
  
# re: Cognos SDK 研究学习手册(二)之[java读取report报表返回XML] 2013-12-31 09:53 | 黑蝙蝠
请问一下如果报表的列项是合并的单元格,xml里面是否会展示出来?  回复  更多评论
  
# re: Cognos SDK 研究学习手册(二)之[java读取report报表返回XML][未登录] 2014-03-11 15:14 | 匿名
第5项中 int index=0 应该放在循环外面 还有参数名称要和cognos报表中的参数名称对应 带参报表终于解析出来了 。
  回复  更多评论
  
# re: Cognos SDK 研究学习手册(二)之[java读取report报表返回XML][未登录] 2014-03-11 15:17 | 匿名
@匿名
补充
ParmValueItem[] p1 = new ParmValueItem[1];
p1[0] = item1;  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: