最近進了新公司的數據挖掘與分析組,因公司需求開始學習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 閱讀(5012)
評論(8) 編輯 收藏 所屬分類:
Cognos