隨筆-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 閱讀(6218) 評論(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;  回復  更多評論
            
          主站蜘蛛池模板: 南漳县| 中阳县| 博野县| 如皋市| 山西省| 南澳县| 深水埗区| 政和县| 拉萨市| 汉阴县| 宣汉县| 思南县| 兴山县| 白城市| 大港区| 松潘县| 宣汉县| 亳州市| 巴彦淖尔市| 霍山县| 满城县| 长垣县| 张家港市| 邮箱| 茂名市| 土默特右旗| 湘潭市| 高尔夫| 赣榆县| 兰考县| 锦屏县| 双江| 阳泉市| 义马市| 凤庆县| 吐鲁番市| 观塘区| 依兰县| 孝昌县| 新余市| 绩溪县|