78色国产精品,免费av在线电影,亚洲人成免费http://www.aygfsteel.com/zhangyuan/category/45560.html經(jīng)理的空間zh-cnFri, 20 Aug 2010 22:12:55 GMTFri, 20 Aug 2010 22:12:55 GMT60cognos列表與圖形聯(lián)動(dòng)效果http://www.aygfsteel.com/zhangyuan/archive/2010/08/20/329492.htmlえ經(jīng)理ええ經(jīng)理えFri, 20 Aug 2010 09:37:00 GMThttp://www.aygfsteel.com/zhangyuan/archive/2010/08/20/329492.htmlhttp://www.aygfsteel.com/zhangyuan/comments/329492.htmlhttp://www.aygfsteel.com/zhangyuan/archive/2010/08/20/329492.html#Feedback0http://www.aygfsteel.com/zhangyuan/comments/commentRss/329492.htmlhttp://www.aygfsteel.com/zhangyuan/services/trackbacks/329492.html cognos中有列表和圖形,但是表和圖之間總是孤立的,刷新頁(yè)面也都是全頁(yè)面刷新,于是經(jīng)理在想,是否有個(gè)方法能在點(diǎn)擊cognos列

表時(shí)旁邊的cognos圖表能夠?qū)崟r(shí)的變動(dòng),類似flex中的綁定效果。在老板的強(qiáng)烈催促下,經(jīng)理也沒什么時(shí)間去網(wǎng)上去找去問,覺得憑自己以前

的一些J2EE老底子加上report studio中強(qiáng)大的HTML項(xiàng)目貌似可以搞定,于是開搞了...
 首先給大家看看數(shù)據(jù)庫(kù)

一、先用report studio建立一個(gè)帶參數(shù)的cognos餅圖報(bào)表(這里可以隨便是什么圖),報(bào)表灰常簡(jiǎn)單

設(shè)置參數(shù)名為par3,并把此報(bào)表保存為a1
二、再用report studio建立一個(gè)列表,如圖

經(jīng)理在這里多用了html項(xiàng)目,因?yàn)閏ognos在頁(yè)面上封裝的太好了,只能這樣拼湊腳本。
基本的原理就是在列表旁邊放置一個(gè)html項(xiàng)目,其內(nèi)容是一個(gè)iframe,其連接也就是剛剛做好的那個(gè)帶參數(shù)的餅圖報(bào)表。
然后在列表中放置一個(gè)label,在label中設(shè)置點(diǎn)擊事件出來iframe鏈接(其實(shí)這樣就換了一個(gè)參數(shù))及重新載入。

其中
1的代碼如下,他主要是點(diǎn)擊的列表觸發(fā)的事件

1<script type="text/javascript">
2    function changeframe(par)
3    {
4        sname="http://localhost/cognos8/cgi-bin/cognos.cgi?b_action=cognosViewer&ui.object=/content/package[@name='aa']/report[@name='a1']&ui.action=run&run.prompt=false&p_par3="+par;
5        frameChart.location.href=sname;
6    }

7</script>

 

2到6主要就是定義一個(gè)含有點(diǎn)擊事件的label
2的代碼為

1<u><label onclick="changeframe('


3其實(shí)是一個(gè)報(bào)表表達(dá)式,它是參數(shù)

1[query1].[arr2]


4的代碼為

1');"  style="width:100%;height:100%" >


5也是一個(gè)報(bào)表表達(dá)式,他是設(shè)置該列顯示的內(nèi)容

1[arr2]


6的代碼為,他收個(gè)尾

1</label ></u>


7的代碼主要是iframe,然后就是刷新等待時(shí)候的一個(gè)等待提示
7的代碼為

 1<iframe frameborder="0" id="frameChart" src="" scrolling="no" height="450" width="100%"></iframe>
 2<div id="loading" style="display:block; padding:100px 0 100px 0;text-align:center;color:#999999;font-size:12px;">
 3      頁(yè)面加載中
 4    </div>
 5<script type="text/javascript">     
 6     var  a  = document.getElementById("frameChart");   
 7     var b  = document.getElementById("loading");   
 8     a.style.display =  "none";                     
 9     b.style.display = "block";                     
10     
11        if  (window.ActiveXObject)   {   
12
13
14     a.onreadystatechange =  function()     
15     {   
16        if (this.readyState=="complete")   
17         {                                                                   
18             b.innerHTML  =   "";   
19              b.style.display = "none";   
20             a.style.display  = "";   
21          }
   
22     }
 
23     }
else
24     a.style.display =  "block";                     //隱藏 
25     b.style.display = "none"
26     }

27  </script>


拼滴我累死了.....

OK,我們來看看效果
我先點(diǎn)擊一下第一個(gè)單元格

再點(diǎn)擊第二個(gè)

注意,列表不會(huì)刷新哦,有點(diǎn)像ajax的效果。


后來想想,其實(shí)功能挺簡(jiǎn)單的。
例子比較簡(jiǎn)陋,只是想傳達(dá)一個(gè)思想,希望以后大家有好東西能一起交流。



え經(jīng)理え 2010-08-20 17:37 發(fā)表評(píng)論
]]>
Cognos SDK 研究學(xué)習(xí)手冊(cè)(二)之[java讀取report報(bào)表返回XML]http://www.aygfsteel.com/zhangyuan/archive/2010/08/05/cognos-sdk-xml-string.htmlえ經(jīng)理ええ經(jīng)理えThu, 05 Aug 2010 13:41:00 GMThttp://www.aygfsteel.com/zhangyuan/archive/2010/08/05/cognos-sdk-xml-string.htmlhttp://www.aygfsteel.com/zhangyuan/comments/327841.htmlhttp://www.aygfsteel.com/zhangyuan/archive/2010/08/05/cognos-sdk-xml-string.html#Feedback3http://www.aygfsteel.com/zhangyuan/comments/commentRss/327841.htmlhttp://www.aygfsteel.com/zhangyuan/services/trackbacks/327841.html    對(duì)COGNOS有一定了解以后,經(jīng)理逐漸發(fā)現(xiàn)COGNOS的強(qiáng)大之處,特別的立方體模型使數(shù)據(jù)倉(cāng)庫(kù)更有條理而且訪問速度更快。但是也了解到了COGNOS的劣勢(shì),應(yīng)該說是IBM整體的劣勢(shì),也就是界面太丑。雖然COGNOS也包含了幾乎所有的圖表,樣式也可以調(diào)整。但是對(duì)COGNOS的界面調(diào)整太復(fù)雜,幾乎看的比較好的COGNOS顯示界面都要有HTML對(duì)象來調(diào),更或者無(wú)論你怎么調(diào)也是基于HTML,在色彩和動(dòng)畫方面不會(huì)有很大的空間了。
    于是經(jīng)理在想,是不是可以把只用COGNOS對(duì)數(shù)據(jù)的抓取優(yōu)勢(shì)而在顯示層用別的方式呈現(xiàn)呢(比如flex或者別的)?如果COGNOS能開發(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)單就是里面完全沒有維度和亮度,直接隱射的數(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)目中來。必要包的位置在D:\cognos\c8\sdk\java\lib\下,先給大家看看我的目錄結(jié)構(gòu)

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

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

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

    xpath是十分重要的,其實(shí)報(bào)表ID也十分重要,這個(gè)經(jīng)理以后會(huì)跟大家寫。
    3.連接cognos服務(wù)器
經(jīng)理這里用ReportService_ServiceLocator對(duì)象的getreportService方法來獲得一個(gè)ReportService_Port對(duì)象。
getreportService需要一個(gè)參數(shù),是cognos服務(wù)器地址,http://localhost/p2pd/servlet/dispatch
ReportService_Port是報(bào)表操作對(duì)象,我們就是用這個(gè)對(duì)象的run方法來運(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來傳遞report的參數(shù),用循環(huán)的方式把外界的參數(shù)從HashMap中取出來,設(shè)置到ParameterValue的value中去。

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


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

大家看到了吧,官方的API只是把枚舉值做了一個(gè)羅列,具體他們是做什么的?有什么作用?什么都沒說。經(jīng)理當(dāng)然也看了sdk的源碼,希望能在源碼中找到一點(diǎn)注釋,結(jié)果是:sdk的java文件沒有一行注釋代碼。
經(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í)間。
之前講過用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)在來測(cè)試下。

經(jīng)理在這里寫了一個(gè)簡(jiǎn)單的測(cè)試?yán)?,用之前講到的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)鍵的也就是上面說的7個(gè)步驟。最后依然要BS一下cognos的開發(fā)者,居然在源碼中一行注釋都沒有,幫助文檔也不全面。
所以還是集結(jié)大家的力量一起研究一起分享研究后的成果。
歡迎大家一起來博客上討論。

謝謝~

 

 

 

 

 

 

 

 

 

 


 



え經(jīng)理え 2010-08-05 21:41 發(fā)表評(píng)論
]]>
Cognos FrameWork(維度)http://www.aygfsteel.com/zhangyuan/archive/2010/05/26/321895.htmlえ經(jīng)理ええ經(jīng)理えWed, 26 May 2010 03:03:00 GMThttp://www.aygfsteel.com/zhangyuan/archive/2010/05/26/321895.htmlhttp://www.aygfsteel.com/zhangyuan/comments/321895.htmlhttp://www.aygfsteel.com/zhangyuan/archive/2010/05/26/321895.html#Feedback0http://www.aygfsteel.com/zhangyuan/comments/commentRss/321895.htmlhttp://www.aygfsteel.com/zhangyuan/services/trackbacks/321895.html
這是對(duì)模型設(shè)計(jì)一個(gè)非常重要的概念,因?yàn)槠矫嫒≈档乃阉鳁l件是2個(gè),而三圍取值的搜索條件是3個(gè),這樣一來搜索速度會(huì)很大程度的提升。
最重要的還不僅僅如此,因?yàn)榫S度還可以分層的,就是說如上圖的例子,時(shí)間是可以分為,年、月、日,而產(chǎn)品可以分為產(chǎn)品系列、類型、和品牌產(chǎn)品,地區(qū)也可以分為地域、國(guó)家和部門。這樣一來就是一個(gè)多維多層級(jí)的數(shù)據(jù)模型。

再一個(gè)概念就是類別。類別其實(shí)是維度多面性的一個(gè)體現(xiàn)。他相當(dāng)于是在每一層上又多加了一個(gè)拓展,以地區(qū)為例。

那么有了這些概念,我們?cè)诮#粦?yīng)該說是在建立數(shù)據(jù)庫(kù)平面模型的時(shí)候就應(yīng)該按照這樣的概念去設(shè)計(jì)數(shù)據(jù)庫(kù)。畢竟兩個(gè)平面表就可以組成一個(gè)立方體的多維數(shù)據(jù)表,而表中的字段、數(shù)據(jù)可以用層和類的關(guān)系來模擬。真是受益匪淺啊~





え經(jīng)理え 2010-05-26 11:03 發(fā)表評(píng)論
]]>
Cognos SDK 研究學(xué)習(xí)手冊(cè)(一)http://www.aygfsteel.com/zhangyuan/archive/2010/05/25/321752.htmlえ經(jīng)理ええ經(jīng)理えTue, 25 May 2010 04:02:00 GMThttp://www.aygfsteel.com/zhangyuan/archive/2010/05/25/321752.htmlhttp://www.aygfsteel.com/zhangyuan/comments/321752.htmlhttp://www.aygfsteel.com/zhangyuan/archive/2010/05/25/321752.html#Feedback5http://www.aygfsteel.com/zhangyuan/comments/commentRss/321752.htmlhttp://www.aygfsteel.com/zhangyuan/services/trackbacks/321752.html    這里就把東西都記錄下來。
  
   首先,根據(jù)看的一些資料,所謂sdk其實(shí)是Cognos公布了一些自己在設(shè)計(jì)產(chǎn)品時(shí)候留下的接口,可以讓客戶從程序端靈活的調(diào)用。但是Cognos本身具有的設(shè)計(jì)功能已經(jīng)灰常強(qiáng)大了,一般會(huì)用到sdk的公司基本上都是遇到很J8的甲方。不過這次也給了我很大的學(xué)習(xí)機(jī)會(huì)。
   那么我這里寫了一個(gè)用java訪問Cognos建立的維度和量度,來生成報(bào)表。
   一、準(zhǔn)備工作
      1.建立一個(gè)叫 zj_cognos_interjavaweb項(xiàng)目, 我這里比較熟悉用struts于是自己把struts的框架也導(dǎo)進(jìn)來了
      2.找到Cognos自帶的例子, 示例位置在cognos安裝目錄"c8"webapps"samples"WEB-INF"src"com"cognos"jspSample.
      在這里可以看到一些工具類
     

我們把這些類考到項(xiàng)目中來

這些類是非常重要的,很多類如API.JAVA,LogonException等都是封裝的方法類,一般不需要用,不過里面有很多的方法,可供我們學(xué)習(xí)。
在這里我們用的比較多的是CognosConnection和ReportBuilder這兩個(gè)類。
這里我用了一個(gè)配置文件來保存一些靜態(tài)參數(shù)
<?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服務(wù)
    CognosConnection conn = new CognosConnection(cmUrl,application,session);
    
//-----如果是用匿名認(rèn)證登陸就不需要這句話,如果是用的自己的認(rèn)證就需要登陸一下
    
//bb是我的表空間,zhangyuan是我本機(jī)用戶名,123是我本機(jī)的密碼
    conn.logon("bb""zhangyuan""123");
    
//創(chuàng)建一個(gè)報(bào)表生成器的實(shí)力類
    ReportBuilder rb = new ReportBuilder(conn);
    
//指定生成報(bào)表的包
    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);
    
//指定生成的報(bào)表名
    String name  = "ReportWizardReport ";
    
//增加報(bào)表
    rb.saveReport(name);


え經(jīng)理え 2010-05-25 12:02 發(fā)表評(píng)論
]]>
主站蜘蛛池模板: 尚义县| 银川市| 论坛| 长乐市| 四子王旗| 友谊县| 昌江| 繁昌县| 丹巴县| 肥东县| 神农架林区| 五指山市| 久治县| 石河子市| 昌黎县| 尚志市| 南皮县| 米泉市| 曲麻莱县| 资阳市| 安乡县| 那曲县| 永吉县| 新巴尔虎左旗| 明水县| 永登县| 上思县| 张北县| 霍邱县| 丁青县| 河津市| 安丘市| 高碑店市| 宁国市| 大足县| 安国市| 北宁市| 兴业县| 喜德县| 定结县| 武威市|