最近进了新公司的数据挖掘与分析组,因公司需求开始学习Cognos,前几个星期看了下Cognos的主要设计器,没想到经理马上就要我搞Cognos的sdk,这个东西国内用的人很少,网上的资料也相当少,只能硬着头皮自己看官方的文档和例子。
这里就把东西都记录下来。
首先,根据看的一些资料,所谓sdk其实是Cognos公布了一些自己在设计产品时候留下的接口,可以让客户从程序端灵活的调用。但是Cognos本身具有的设计功能已经灰常强大了,一般会用到sdk的公司基本上都是遇到很J8的甲方。不过这次也给了我很大的学习机会。
那么我这里写了一个用java访问Cognos建立的维度和量度,来生成报表。
一、准备工作
1.建立一个叫
zj_cognos_inter的javaweb项目,
我这里比较熟悉用struts于是自己把struts的框架也导进来了
2.找到Cognos自带的例子,
示例位置在cognos安装目录"c8"webapps"samples"WEB-INF"src"com"cognos"jspSample.
在这里可以看到一些工具类
我们把这些类考到项目中来
这些类是非常重要的,很多类如API.JAVA,LogonException等都是封装的方法类,一般不需要用,不过里面有很多的方法,可供我们学习。
在这里我们用的比较多的是CognosConnection和ReportBuilder这两个类。
这里我用了一个配置文件来保存一些静态参数
<?xml version="1.0" encoding="gb2312"?>
<cognos version="8.3">
<url_home>
<![CDATA[
http://localhost/cognos8
]]>
</url_home>
<url_report_prefix>
<![CDATA[
/cgi-bin/cognos.cgi?b_action=cognosViewer&ui.action=run&ui.object=
]]>
</url_report_prefix>
<url_report_suffix>
<![CDATA[
&run.outputFormat=&run.prompt=true&cv.header=false&cv.toolbar=false
]]>
</url_report_suffix>
<url_logoff>
<![CDATA[
/cgi-bin/cognos.cgi?b_action=xts.run&m=portal/logoff.xts&h_CAM_action=logoff
]]>
</url_logoff>
<url_cm>http://localhost:9300/p2pd/servlet/dispatch</url_cm>
<namespace>my cognos</namespace>
</cognos>
ServletContext application = getServlet().getServletContext();
HttpSession session = request.getSession();
String cfgPath = application.getRealPath("/WEB-INF/cfg.xml");
String cmUrl = ConfigUtil.parseXml(cfgPath,"url_cm");
//连接cognos服务
CognosConnection conn = new CognosConnection(cmUrl,application,session);
//-----如果是用匿名认证登陆就不需要这句话,如果是用的自己的认证就需要登陆一下
//bb是我的表空间,zhangyuan是我本机用户名,123是我本机的密码
conn.logon("bb", "zhangyuan", "123");
//创建一个报表生成器的实力类
ReportBuilder rb = new ReportBuilder(conn);
//指定生成报表的包
String packageSp = "/content/package[@defaultName='mbase']";
rb.createReport(packageSp);
//用Cognos sql来指定生成的列
String[] colRef = {"[business layer].[date].[mdate].[year]","[business layer].[date].[mdate].[day]","[business layer].[measures].[psend]"};
String[] titles = {"year","day","psend"};
rb.addColumns(titles, colRef);
//指定生成的报表名
String name = "ReportWizardReport ";
//增加报表
rb.saveReport(name);
posted on 2010-05-25 12:02
张元Won 阅读(4994)
评论(8) 编辑 收藏 所属分类:
Cognos