隨筆-15  評(píng)論-79  文章-0  trackbacks-0

              對(duì)COGNOS有一定了解以后,經(jīng)理逐漸發(fā)現(xiàn)COGNOS的強(qiáng)大之處,特別的立方體模型使數(shù)據(jù)倉(cāng)庫(kù)更有條理而且訪問(wèn)速度更快。但是也了解到了COGNOS的劣勢(shì),應(yīng)該說(shuō)是IBM整體的劣勢(shì),也就是界面太丑。雖然COGNOS也包含了幾乎所有的圖表,樣式也可以調(diào)整。但是對(duì)COGNOS的界面調(diào)整太復(fù)雜,幾乎看的比較好的COGNOS顯示界面都要有HTML對(duì)象來(lái)調(diào),更或者無(wú)論你怎么調(diào)也是基于HTML,在色彩和動(dòng)畫(huà)方面不會(huì)有很大的空間了。
              于是經(jīng)理在想,是不是可以把只用COGNOS對(duì)數(shù)據(jù)的抓取優(yōu)勢(shì)而在顯示層用別的方式呈現(xiàn)呢(比如flex或者別的)?如果COGNOS能開(kāi)發(fā)更多的前端顯示接口固然好,但這是不可能的,當(dāng)然,經(jīng)理知道這樣做會(huì)損失一部分性能,但是對(duì)現(xiàn)在大多對(duì)界面都很挑剔的客戶,這肯定是一條比較好的路。
              OK,那么現(xiàn)在經(jīng)理把做的一個(gè)java調(diào)用cognos端直接返回XML字節(jié)流的例子和大家分享下。
          一、環(huán)境
              硬件環(huán)境:主屏2.0Hz+內(nèi)存3gb+系統(tǒng)32位
              軟件環(huán)境:cognos 8.41+Myeclipse8.5ga+sqlserver2000sp4

          二、IBM Cognos Connection部分
              首先,我用framework做了了一個(gè)灰常簡(jiǎn)單的包(所謂非常簡(jiǎn)單就是里面完全沒(méi)有維度和亮度,直接隱射的數(shù)據(jù)庫(kù)表列),并把他發(fā)布到公共文件夾,名為test_sdk_paser

          然后在這個(gè)包下用report studio做了一個(gè)灰常簡(jiǎn)單的報(bào)表,名為test

          這個(gè)報(bào)表就是我們之后要在java中獲取其數(shù)據(jù)的報(bào)表。
          三、COGNOS SDK調(diào)用程序
              0.準(zhǔn)備步驟.
          我們先要把sdk所需要的包考到項(xiàng)目中來(lái)。必要包的位置在D:\cognos\c8\sdk\java\lib\下,先給大家看看我的目錄結(jié)構(gòu)

              1.我建立了一個(gè)config.properties文件用來(lái)存放congos服務(wù)器的ip和端口

              在java中對(duì)應(yīng)寫(xiě)一個(gè)從properties中獲取數(shù)據(jù)的方法

              2.弄清楚報(bào)表的xpath
              這個(gè)xpath我們可以在報(bào)表的 設(shè)置屬性-->常規(guī) 找到

              xpath是十分重要的,其實(shí)報(bào)表ID也十分重要,這個(gè)經(jīng)理以后會(huì)跟大家寫(xiě)。
              3.連接cognos服務(wù)器
          經(jīng)理這里用ReportService_ServiceLocator對(duì)象的getreportService方法來(lái)獲得一個(gè)ReportService_Port對(duì)象。
          getreportService需要一個(gè)參數(shù),是cognos服務(wù)器地址,http://localhost/p2pd/servlet/dispatch
          ReportService_Port是報(bào)表操作對(duì)象,我們就是用這個(gè)對(duì)象的run方法來(lái)運(yùn)行cognos端報(bào)表。


              4.設(shè)置cognos認(rèn)證信息
          經(jīng)理這里的cognos設(shè)置了NTML認(rèn)證,那么是需要在sdk代碼中設(shè)置認(rèn)證信息的。

          用CAM方式進(jìn)行登陸


              5.設(shè)置report的參數(shù)
          本例中用HashMap來(lái)傳遞report的參數(shù),用循環(huán)的方式把外界的參數(shù)從HashMap中取出來(lái),設(shè)置到ParameterValue的value中去。

              6.cognos運(yùn)行報(bào)表設(shè)置
          每項(xiàng)代表什么經(jīng)理已經(jīng)把注釋寫(xiě)的很清楚了。


          這里尤其提醒大家注意的一點(diǎn)是,RunOptionEnum.prompt這個(gè)參數(shù)一定要設(shè)置,設(shè)置這個(gè)參數(shù)是當(dāng)cognos運(yùn)行有參數(shù)的report時(shí)候,不彈出html提示窗口。經(jīng)理之前就是沒(méi)有設(shè)置這個(gè)參數(shù),所以在測(cè)試帶參數(shù)報(bào)表的時(shí)候搞了一天都沒(méi)搞出來(lái)。
          那么這個(gè)option到底還有多少參數(shù)呢?經(jīng)理給大家看啊看你cognos sdk的官方API

          大家看到了吧,官方的API只是把枚舉值做了一個(gè)羅列,具體他們是做什么的?有什么作用?什么都沒(méi)說(shuō)。經(jīng)理當(dāng)然也看了sdk的源碼,希望能在源碼中找到一點(diǎn)注釋?zhuān)Y(jié)果是:sdk的java文件沒(méi)有一行注釋代碼。
          經(jīng)理在這里不想罵人,現(xiàn)在終于知道為什么cognos sdk這個(gè)領(lǐng)域這么弱了。
              7.運(yùn)行cognos報(bào)表并返回xml數(shù)據(jù)
          經(jīng)理在這里統(tǒng)計(jì)了一下用sdk返回?cái)?shù)據(jù)的時(shí)間。
          之前講過(guò)用ReportService_Port的run方法可以讓report運(yùn)行,然后返回一個(gè)叫AsynchReply的對(duì)象,這個(gè)對(duì)象中有details[]屬性,這個(gè)里面基本上包含了report返回的所有信息。而他的status屬性則標(biāo)識(shí)了此次請(qǐng)求是否成功。


          OK,現(xiàn)在代碼都解釋完了,現(xiàn)在來(lái)測(cè)試下。

          經(jīng)理在這里寫(xiě)了一個(gè)簡(jiǎn)單的測(cè)試?yán)樱弥爸v到的test_sdk_paser包中的test進(jìn)行測(cè)試


          下面再測(cè)試一個(gè)帶參數(shù)的報(bào)表

          把之前的那個(gè)報(bào)表加一個(gè)參數(shù)

          然后在這里輸入一個(gè)1

          得到這樣的數(shù)據(jù)

          稍微改動(dòng)下代碼,然后run一下

          然后得到結(jié)果是這樣的

          正好和剛剛的結(jié)果一樣~~


          sdk取數(shù)據(jù)關(guān)鍵的也就是上面說(shuō)的7個(gè)步驟。最后依然要BS一下cognos的開(kāi)發(fā)者,居然在源碼中一行注釋都沒(méi)有,幫助文檔也不全面。
          所以還是集結(jié)大家的力量一起研究一起分享研究后的成果。
          歡迎大家一起來(lái)博客上討論。

          謝謝~

           

           

           

           

           

           

           

           

           

           


           

          posted on 2010-08-05 21:41 張?jiān)猈on 閱讀(6218) 評(píng)論(16)  編輯  收藏 所屬分類(lèi): Cognos

          評(píng)論:
          # re: Cognos SDK 研究學(xué)習(xí)手冊(cè)(二)之[java讀取report報(bào)表返回XML] 2010-08-05 22:51 | bonamana
          大哥,不要打這么多底紋好不好  回復(fù)  更多評(píng)論
            
          # re: Cognos SDK 研究學(xué)習(xí)手冊(cè)(二)之[java讀取report報(bào)表返回XML] 2010-08-05 23:38 | え經(jīng)理え
          最近太流行轉(zhuǎn)載了... 沒(méi)辦法··@bonamana
            回復(fù)  更多評(píng)論
            
          # re: Cognos SDK 研究學(xué)習(xí)手冊(cè)(二)之[java讀取report報(bào)表返回XML] 2010-08-11 14:47 | gf7
          轉(zhuǎn)載你是沒(méi)辦法制止的,再說(shuō)轉(zhuǎn)了才說(shuō)明你的好,有價(jià)值。你發(fā)表的目的是什么?  回復(fù)  更多評(píng)論
            
          # re: Cognos SDK 研究學(xué)習(xí)手冊(cè)(二)之[java讀取report報(bào)表返回XML] 2010-09-12 18:59 | 董懂
          請(qǐng)問(wèn)輸入兩個(gè)參數(shù)怎么弄??而且你的index好像永遠(yuǎn)都是0吧。。--!  回復(fù)  更多評(píng)論
            
          # re: Cognos SDK 研究學(xué)習(xí)手冊(cè)(二)之[java讀取report報(bào)表返回XML] 2010-09-12 23:38 | え經(jīng)理え
          設(shè)置兩個(gè)我參數(shù)是一樣的..我試過(guò)的...

          你說(shuō)的index指的是什么?..  回復(fù)  更多評(píng)論
            
          # re: Cognos SDK 研究學(xué)習(xí)手冊(cè)(二)之[java讀取report報(bào)表返回XML] 2010-09-14 14:09 | 董懂
          @え經(jīng)理え
          5.設(shè)置report的參數(shù) index變量。。。
            回復(fù)  更多評(píng)論
            
          # re: Cognos SDK 研究學(xué)習(xí)手冊(cè)(二)之[java讀取report報(bào)表返回XML][未登錄](méi) 2010-09-20 14:56 | aa
          您能把cognos sdk的官方API上傳一份嗎?
            回復(fù)  更多評(píng)論
            
          # re: Cognos SDK 研究學(xué)習(xí)手冊(cè)(二)之[java讀取report報(bào)表返回XML][未登錄](méi) 2010-09-20 15:16 | aa
          向您借問(wèn)cognos sdk的官方API,
          能上傳一份嗎?或者說(shuō)一下下載地址,找的實(shí)在是太久了,沒(méi)找到。
          謝謝。
            回復(fù)  更多評(píng)論
            
          # re: Cognos SDK 研究學(xué)習(xí)手冊(cè)(二)之[java讀取report報(bào)表返回XML] 2011-02-11 11:52 | tyoushinya
          麻煩能不能實(shí)現(xiàn)報(bào)表多張圖片的取得啊?
          查了一些資料只能找到取得一張圖片的例子。  回復(fù)  更多評(píng)論
            
          # re: Cognos SDK 研究學(xué)習(xí)手冊(cè)(二)之[java讀取report報(bào)表返回XML][未登錄](méi) 2011-06-27 16:44 | 崔新鵬
          為什么我向cognos報(bào)表中傳兩個(gè)參數(shù)就不管用了那?????  回復(fù)  更多評(píng)論
            
          # re: Cognos SDK 研究學(xué)習(xí)手冊(cè)(二)之[java讀取report報(bào)表返回XML] 2011-07-08 11:06 | Cognoser
          雁過(guò)留聲,看過(guò)留言,jianchibuxie_777@sina.com  回復(fù)  更多評(píng)論
            
          # re: Cognos SDK 研究學(xué)習(xí)手冊(cè)(二)之[java讀取report報(bào)表返回XML] 2012-06-26 16:38 | 馬云
          # re: Cognos SDK 研究學(xué)習(xí)手冊(cè)(二)之[java讀取report報(bào)表返回XML] 2013-08-23 11:06 | yuc
          請(qǐng)問(wèn)返回這個(gè)xml文件有什么實(shí)質(zhì)性的用途呢?  回復(fù)  更多評(píng)論
            
          # re: Cognos SDK 研究學(xué)習(xí)手冊(cè)(二)之[java讀取report報(bào)表返回XML] 2013-12-31 09:53 | 黑蝙蝠
          請(qǐng)問(wèn)一下如果報(bào)表的列項(xiàng)是合并的單元格,xml里面是否會(huì)展示出來(lái)?  回復(fù)  更多評(píng)論
            
          # re: Cognos SDK 研究學(xué)習(xí)手冊(cè)(二)之[java讀取report報(bào)表返回XML][未登錄](méi) 2014-03-11 15:14 | 匿名
          第5項(xiàng)中 int index=0 應(yīng)該放在循環(huán)外面 還有參數(shù)名稱(chēng)要和cognos報(bào)表中的參數(shù)名稱(chēng)對(duì)應(yīng) 帶參報(bào)表終于解析出來(lái)了 。
            回復(fù)  更多評(píng)論
            
          # re: Cognos SDK 研究學(xué)習(xí)手冊(cè)(二)之[java讀取report報(bào)表返回XML][未登錄](méi) 2014-03-11 15:17 | 匿名
          @匿名
          補(bǔ)充
          ParmValueItem[] p1 = new ParmValueItem[1];
          p1[0] = item1;  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 望江县| 安西县| 东兰县| 二连浩特市| 姜堰市| 两当县| 武汉市| 屏南县| 永兴县| 金湖县| 南靖县| 衢州市| 通榆县| 玉门市| 名山县| 扶沟县| 铜山县| 新竹县| 通许县| 灯塔市| 水城县| 通化市| 安仁县| 永和县| 清远市| 五家渠市| 岐山县| 当涂县| 文山县| 陇南市| 平顺县| 东阳市| 竹溪县| 罗定市| 西充县| 巴中市| 象州县| 尉氏县| 准格尔旗| 深泽县| 特克斯县|