<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-15  評(píng)論-79  文章-0  trackbacks-0
      2010年8月5日
    最近經(jīng)常做一些數(shù)據(jù)導(dǎo)入的工作!做數(shù)據(jù)挖掘項(xiàng)目大家都懂的...
    導(dǎo)入數(shù)據(jù)最痛苦的就是等待他導(dǎo)...不過(guò)如果大家沒(méi)注意一些需要注意的東西,可能大家會(huì)這樣反復(fù)等好多次!!
    一、
    首先,我也是多次吃虧的一件事情,就是老是忘記加入導(dǎo)入日志。因?yàn)樵趯?dǎo)入數(shù)據(jù)的時(shí)候可能會(huì)拋出很多異常,這些異常如果不記錄下如果缺失了重要的數(shù)據(jù)可能要從新導(dǎo)入或找到原因然后重導(dǎo)。太可惜了。加入導(dǎo)入日志一切有據(jù)可查,非常重要。

    它的做法可以在imp時(shí)直接加參數(shù):
    log=/oracle/log/imp.log (linux)
    log=E:\log\imp.log      (windows)
    指定日志的路徑和文件名
    例如:
    imp trade/zhangy@orcl file=/test/trade.dmp show=n buffer=2048000 ignore=n commit=y grants=y full=y log=/oracle/log/imp.log
    這樣就有日志了...

    二、導(dǎo)入單個(gè)表
    可能客戶給我們一個(gè)整庫(kù)文件,但是我們可能只需要其中的一些表就OK了。oracle已經(jīng)帶有導(dǎo)入單獨(dú)表的語(yǔ)法。
    IMP trade/trade file=D:\2011-02-18_trade.dmp IGNORE=Y TABLES=(TOS_ContractInterval,TOS_CONTRACTMASTER) FULL=N



    當(dāng)然還有許多語(yǔ)法,我們可以通過(guò)imp help=yes來(lái)查看..


    posted @ 2011-06-02 20:04 張?jiān)猈on 閱讀(618) | 評(píng)論 (0)編輯 收藏
    因?yàn)樾屡渲玫臋C(jī)器,裝的Oracle10g一直都沒(méi)使用過(guò)。因?yàn)閰⑴c到項(xiàng)目,昨天突然用Oracle發(fā)現(xiàn)用Plsql不上Oracle了。
    蝦米原因?...搞的我蛋疼了一上午...
    于是一直找帖糾結(jié)這個(gè)問(wèn)題,終于還是解決了,在博客中留個(gè)記錄以便以后忘記了翻翻。

    導(dǎo)致這個(gè)錯(cuò)誤的原因有很多
    可能是SID配置不對(duì),但絕大多數(shù)是因?yàn)镺racle程序本身問(wèn)題。就是OracleOraDb10g_home1TNSListener這個(gè)服務(wù)對(duì)應(yīng)的D:\oracle\product\10.2.0\db_1\BIN\TNSLSNR執(zhí)行程序沒(méi)有執(zhí)行或者執(zhí)行中斷造成的。那么我們只要設(shè)置一個(gè)全局SID服務(wù)變量,以后就可以都以這個(gè)變量為準(zhǔn)來(lái)查找到監(jiān)聽(tīng)了。

    解決方法如下:
    打開(kāi):%Oracle_Hoem%/network/admin/listener.ora文件 在 
    SID_LIST_LISTENER = 
    (SID_LIST = 
    (SID_DESC = 
      (SID_NAME = PLSExtProc) 
      (ORACLE_HOME = D:\Oracle\Oracle10g) 
      (PROGRAM = extproc) 
    后面添加: 
    (SID_DESC = 
      (GLOBAL_DBNAME = ORACLE) 
      (ORACLE_HOME = D:\Oracle\Oracle10g) 
      (SID_NAME = ORACLE) 
      ) 
    最后變成: 
    SID_LIST_LISTENER = 
    (SID_LIST = 
    (SID_DESC = 
      (SID_NAME = PLSExtProc) 
      (ORACLE_HOME = D:\Oracle\Oracle10g) 
      (PROGRAM = extproc) 
    ) (SID_DESC = 
      (GLOBAL_DBNAME = ORACLE) 
      (ORACLE_HOME = D:\Oracle\Oracle10g) 
      (SID_NAME = ORACLE) 
      ) 
    posted @ 2011-05-27 09:17 張?jiān)猈on 閱讀(1020) | 評(píng)論 (0)編輯 收藏
  • 第一步: 取消自動(dòng)validation   
  • validation有一堆,什么xml、jsp、jsf、js等等,我們沒(méi)有必要全部都去自動(dòng)校驗(yàn)一下,只是需要的時(shí)候才會(huì)手工校驗(yàn)一下!   
  • 取消方法:   
  • windows–>perferences–>myeclipse–>validation   
  • 除開(kāi)Manual下面的復(fù)選框全部選中之外,其他全部不選   
  • 手工驗(yàn)證方法:   
  • 在要驗(yàn)證的文件上,單擊鼠標(biāo)右鍵–>myeclipse–>run validation   
  • 第二步:取消Eclipse拼寫(xiě)檢查   
  • 1、拼寫(xiě)檢查會(huì)給我們帶來(lái)不少的麻煩,我們的方法命名都會(huì)是單詞的縮寫(xiě),他也會(huì)提示有錯(cuò),所以最好去掉,沒(méi)有多大的用處   
  • windows–>perferences–>general->editors->Text Editors->spelling
  • 第三步:取消myeclipse的啟動(dòng)項(xiàng)   
  • myeclipse會(huì)有很多的啟動(dòng)項(xiàng),而其中很多我們都用不著,或者只用一兩個(gè),取消前面不用的就可以   
  • windows–>perferences–>general–>startup and shutdown   啟動(dòng)項(xiàng)功能如下,可以根據(jù)自己的需要選擇
  • Automatic Updates Scheduler //自動(dòng)升級(jí)調(diào)度      
  • MyEclipse QuickSetup //快速啟動(dòng)      
  • MyEclipse Derby //derby是一個(gè)開(kāi)源數(shù)據(jù)庫(kù)的名字   
  • MyEclipse EASIE Geronimo 1 //同色都是應(yīng)用服務(wù)器的名字      
  • MyEclipse EASIE Geronimo 2       
  • MyEclipse EASIE JBOSS 2       
  • MyEclipse EASIE JBOSS 3       
  • MyEclipse EASIE JBOSS 4       
  • MyEclipse EASIE JBOSS 5       
  • MyEclipse EASIE JBOSS       
  • MyEclipse EASIE Jetty 4       
  • MyEclipse EASIE Jetty 5       
  • MyEclipse EASIE Jetty 6       
  • MyEclipse EASIE Jetty       
  • MyEclipse EASIE JOnAS 3       
  • MyEclipse EASIE JOnAS 4       
  • MyEclipse EASIE JOnAS       
  • MyEclipse EASIE JRun 4       
  • MyEclipse EASIE JRun       
  • MyEclipse EASIE Oracle 10 AS       
  • MyEclipse EASIE Oracle 9 AS       
  • MyEclipse EASIE Oracle AS       
  • MyEclipse EASIE Orion 1       
  • MyEclipse EASIE Orion 2       
  • MyEclipse EASIE Resin 2       
  • MyEclipse EASIE Resin 3       
  • MyEclipse EASIE Resin       
  • MyEclipse EASIE Sun 8.x       
  • MyEclipse EASIE Sun 8       
  • MyEclipse EASIE Sun 9       
  • MyEclipse EASIE Glassfish 2       
  • MyEclipse EASIE Glassfish 1       
  • MyEclipse EASIE Sun One       
  • MyEclipse EASIE MyEclipse Tomcat 6 Server       
  • MyEclipse EASIE Tomcat 4       
  • MyEclipse EASIE Tomcat 5       
  • MyEclipse EASIE Tomcat 6       
  • MyEclipse EASIE Tomcat       
  • MyEclipse EASIE WebLogic 10       
  • MyEclipse EASIE WebLogic 6       
  • MyEclipse EASIE WebLogic 7       
  • MyEclipse EASIE WebLogic 8       
  • MyEclipse EASIE WebLogic 9       
  • MyEclipse EASIE WebLogic       
  • MyEclipse EASIE WebSphere 5       
  • MyEclipse EASIE WebSphere 6.1       
  • MyEclipse EASIE WebSphere 6       
  • MyEclipse EASIE WebSphere 4       
  • MyEclipse Examples //樣例      
  • MyEclipse Memory Monitor //內(nèi)存監(jiān)控      
  • MyEclipse Tapestry Integration //插件集成      
  • MyEclipse JSP Debug Tooling //jsp調(diào)試插件      
  • MyEclipse File Creation Wizards //文件創(chuàng)建程序      
  • ICEfaces Integration for MyEclipse //基于Ajax的JSF開(kāi)發(fā)框架()   
  • MyEclipse Backward Compatibility //后臺(tái)功能      
  • MyEclipse Perspective Plug-in //透視圖插件      
  • Pluse Collaboration Control Center //Eclipse的網(wǎng)頁(yè)管理中心   
  • eclipse-cs 4.x.x -> 5.0.0 Migration Plug-in  //Eclipse插件兼容組件   
  • Mozilla Debug UI Plug-in(Incubation) //Mozilla調(diào)試插件(Mozilla是一款瀏覽器)      
  • Dynamic Languages ToolKit Core UI //對(duì)入PHP等動(dòng)態(tài)語(yǔ)言支持的用戶接口   
  • WTP Webservice UI Plug-in //Web 服務(wù)視圖插件      
  • JavaServer Faces Tools - Core //jsf工具核心包      
  • Automatic Updates Scheduler //自動(dòng)更新   
  • Service policy  //Web提供的服務(wù)性能目標(biāo)定義,自動(dòng)管理   
  • Atfdebug Plug-in(Incubation)  //動(dòng)態(tài)語(yǔ)言的調(diào)試工具   
  • Auxiliary Web Module Support for MeEclipse// 輔助的Web模塊支持.(可能是Struts等文件自動(dòng)添加)   
  • JSF Editor Preview Support for MyEclipse//jsf編輯器 
  • 第四步:更改jsp默認(rèn)打開(kāi)的方式   
  • 安裝了myeclipse后,編輯jsp頁(yè)面,會(huì)打開(kāi)他的編輯頁(yè)面,同時(shí)也有預(yù)覽頁(yè)面,速度很慢,不適合開(kāi)發(fā)。所以更改之windows–>perferences–>general–>editors->file associations   選擇*.jsp,把編譯器改為默認(rèn)啟動(dòng)MyEclipse JSP Edition(在下方選擇一種編輯器,然后點(diǎn)擊左邊的default按鈕   )
  • 第五步: 更改內(nèi)存使用文件   
  • 1、打開(kāi) eclipse.ini   
  •   
  • -startup
    ../Common/plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar
    --launcher.library
    ../Common/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519
    -install
    D:/Myeclipse 8.5/Program
    -vm
    D:/Myeclipse 8.5/Common/binary/com.sun.java.jdk.win32.x86_1.6.0.013/jre/bin/client/jvm.dll
    -configuration
    configuration
    -vmargs
    -Xmx512m
    -XX:MaxPermSize=1024m
    -XX:ReservedCodeCacheSize=128m
    把下面的那個(gè) -XX:MaxPermSize 調(diào)大,比如 -XX:MaxPermSize=1024M,再把 -XX:PermSize 調(diào)成跟 -XX:MaxPermSize一樣大   
  • 原因:大家一定對(duì)這個(gè)畫(huà)面很熟悉吧:   
  • 幾乎每次 eclipse 卡到當(dāng)都是因?yàn)檫@個(gè)非堆內(nèi)存不足造成的,把最大跟最小調(diào)成一樣是因?yàn)椴蛔?nbsp;myeclipse 頻繁的換內(nèi)存區(qū)域大小   
  • 注意:XX:MaxPermSize 和 Xmx 的大小之和不能超過(guò)你的電腦內(nèi)存大小   
  • 經(jīng)理比較奢侈,就調(diào)到了1024
  • 第六步: 取消Maven更新(啟動(dòng)更新)   
  • Window > Preferences > Myeclipse> Maven4Myeclipse > Maven>禁用Download repository index updates on startup

  • 改快捷鍵之類的經(jīng)理就不介紹了。

    posted @ 2010-11-17 10:25 張?jiān)猈on 閱讀(18474) | 評(píng)論 (5)編輯 收藏

    最近發(fā)現(xiàn)很多朋友連攔截器都不知道,于是想寫(xiě)個(gè)BLOG總結(jié)一下。
    java攔截器的基本原理其實(shí)非常簡(jiǎn)單,說(shuō)白了就是動(dòng)態(tài)代理類。
    下面來(lái)看一個(gè)簡(jiǎn)單的例子
    首先,我建立一個(gè)攔截器的類InterceptorClass,這里的before()和after()方法是以后攔截器會(huì)執(zhí)行的方法
    CODE清單一:

    public class InterceptorClass {
     
    public void before()
      System.out.println(
    "攔截器InterceptorClass方法調(diào)用:before()!"); 
     }
     
     
    public void after()
         System.out.println(
    "攔截器InterceptorClass方法調(diào)用:after()!"); 
     }

    }

     

    我們模擬一個(gè)業(yè)務(wù)組件接口BusinessInterface,和一個(gè)業(yè)務(wù)組件實(shí)現(xiàn)類BusinessClass
    CODE清單二:

    public interface BusinessInterface {
     
    public void doSomething();
    }

     

    CODE清單三:

    public class BusinessClass implements BusinessInterface {
     
    public void doSomething() {
       System.out.println(
    "業(yè)務(wù)組件BusinessClass方法調(diào)用:doSomething()"); 
     }

    }

     

    然后,創(chuàng)建一個(gè)動(dòng)態(tài)代理類DynamicProxyHandler,這個(gè)類是集成InvocationHandler接口的,動(dòng)態(tài)類的原理實(shí)際上是使得當(dāng)你執(zhí)行一個(gè)動(dòng)態(tài)方

    法的時(shí)候,他可以把這個(gè)動(dòng)態(tài)方法dispatch到這個(gè)動(dòng)態(tài)類上來(lái)。這樣,你就可以在這個(gè)方法的前后嵌入自己的一些方法。
    CODE清單四:
    //包含了業(yè)務(wù)對(duì)象綁定動(dòng)態(tài)代理類的處理,并實(shí)現(xiàn)了InvocationHandler接口的invoke方法

    public class DynamicProxyHandler implements InvocationHandler {
     
    private Object business;//被代理對(duì)象
     private InterceptorClass inceptor = new InterceptorClass();//攔截器
     
     
    // 動(dòng)態(tài)生成一個(gè)代理類對(duì)象,并綁定被代理類和代理處理器
     public Object bind(Object business) {
       
    this.business = business;
       
    return Proxy.newProxyInstance(
         
    //被代理類的ClassLoader
         business.getClass().getClassLoader(),
         
    //要被代理的接口,本方法返回對(duì)象會(huì)自動(dòng)聲稱實(shí)現(xiàn)了這些接口
         business.getClass().getInterfaces(), 
         
    //代理處理器對(duì)象
         this);
     }


     
     // 代理要調(diào)用的方法,并在方法調(diào)用前后調(diào)用連接器的方法

     /**
      * 
    @param proxy  代理類對(duì)象
      * 
    @param method 被代理的接口方法
      * 
    @param args   被代理接口方法的參數(shù)
      * 
    @throws Throwable
      
    */

     
    public Object invoke(Object proxy, Method method, Object[] args)
       
    throws Throwable {
      Object result 
    = null;
      inceptor.before();
      result
    =method.invoke(business,args);
      inceptor.after();
      
    return result;
     }


    OK,我們來(lái)寫(xiě)個(gè)類測(cè)試一下
    CODE清單五:

    public static void main(String[] args) {
      
    //生成動(dòng)態(tài)代理類實(shí)例
      DynamicProxyHandler handler = new DynamicProxyHandler();
      
    //生成待測(cè)試的業(yè)務(wù)組件對(duì)象
            BusinessInterface business = new BusinessClass();
            
    //將業(yè)務(wù)組件對(duì)象和動(dòng)態(tài)代理類實(shí)例綁定
            BusinessInterface businessProxy = (BusinessInterface) handler.bind(business);
            
    //用動(dòng)態(tài)代理類調(diào)用方法
            businessProxy.doSomething();
     }


    來(lái)看看結(jié)果:


    近期struts2很流行,而且攔截器是struts2里面一個(gè)比較好的功能,下面舉個(gè)例子說(shuō)明一下攔截器在struts2中的用法。
    struts2對(duì)攔截器實(shí)現(xiàn)做了一個(gè)封裝,使得我們?cè)趯?shí)現(xiàn)的時(shí)候比較簡(jiǎn)單。
    首先我們要建一個(gè)攔截器類
    CODE清單六:

    public class AuthorizationInterceptor extends AbstractInterceptor {
     @Override
     
    public String intercept(ActionInvocation invocation) throws Exception {
      Map session 
    = invocation.getInvocationContext().getSession();
      String userName 
    = (String) session.get("userName");
      
    if ( userName != null && userName.equals("test")) {
       System.out.println(
    "攔截器:合法用戶登錄---");
       
    return invocation.invoke();
      }

      
    else
      
    {
       System.out.println(
    "攔截器:用戶未登錄---");
       
    return Action.LOGIN;
      }

     }

    }


    這個(gè)類是必須要繼承struts2包中提供的AbstractInterceptor類,這個(gè)類有一個(gè)抽象方法intercept,這個(gè)方法是必須要實(shí)現(xiàn)的。
    那么經(jīng)理在這個(gè)攔截器里面寫(xiě)了一個(gè)簡(jiǎn)單的實(shí)現(xiàn),對(duì)url用戶合法性做了一個(gè)限制。

    接下來(lái)比較關(guān)鍵的是過(guò)濾器在struts2中的配置,先看看代碼
    CODE清單七:

    <package name="system" extends="struts-default">
      
    <interceptors>
       
    <!--  定義權(quán)限控制攔截器  -->
       
    <interceptor name="authority" 

    class
    ="com.sharesin.biz.common.intercepts.struts2.AuthorizationInterceptor"/>
       
    <!-- 定義一個(gè)包含權(quán)限控制的攔截器棧   -->
       
    <interceptor-stack name="mystack">
        
    <interceptor-ref name="defaultStack"></interceptor-ref>
        
    <interceptor-ref name="authority"></interceptor-ref>
       
    </interceptor-stack>
      
    </interceptors>
       
    <!--定義默認(rèn)攔截器   -->
            
    <default-interceptor-ref name="mystack" />
       
    <!--定義全局處理結(jié)果   -->
      
    <global-results>
       
    <result name="login">index.jsp</result>
      
    </global-results>
      
    <action name="login_*" class="com.sharesin.biz.web.system.LoginAction" method="{1}">
       
    <result name="success">system/homepage.jsp</result>
      
    </action>
     
    </package>


    在interceptors節(jié)點(diǎn)里,我們可以定義多個(gè)攔截器,這里的名為authority的只是其中的一個(gè)。struts2的攔截器棧我是先執(zhí)行struts2默認(rèn)的攔

    截器defaultStack,然后再執(zhí)行我的。然后只需要用default-interceptor-ref標(biāo)簽設(shè)置好這個(gè)system包中的默認(rèn)攔截器為這個(gè)攔截器就OK了。

    struts2中引入了package這個(gè)概念,我覺(jué)得十分實(shí)用,當(dāng)然這對(duì)struts2攔截器也是個(gè)實(shí)惠,我們可以根據(jù)不同的action來(lái)分包和不同的攔截器


    ok,來(lái)運(yùn)行測(cè)試一下。


    結(jié)果..


     

     

     

     

     

    posted @ 2010-09-06 17:21 張?jiān)猈on 閱讀(4526) | 評(píng)論 (3)編輯 收藏
         摘要:  在FLEX開(kāi)發(fā)中有一些小技巧,經(jīng)理在這里總結(jié)下,方便以后查閱,也希望能和大家一起交流。 這些小功能在實(shí)際開(kāi)發(fā)中是很經(jīng)常用的。 一、在DataGrid的列中加圖片 做報(bào)表的時(shí)候經(jīng)常會(huì)在DataGrid中加入一些刻度條或者增減的圖片表示一些API指標(biāo)值,其實(shí)這個(gè)功能FLEX可以實(shí)現(xiàn)。 在DataGrid-colums-DataGridColumn中有個(gè)itemRenderer屬性,...  閱讀全文
    posted @ 2010-09-03 11:39 張?jiān)猈on 閱讀(3929) | 評(píng)論 (1)編輯 收藏

    在使用flex過(guò)程中經(jīng)常會(huì)對(duì)調(diào)樣式感到頭痛,經(jīng)理在這里準(zhǔn)備把常用的一些東東總結(jié)一下,以便以后查閱。
    以后慢慢總結(jié)。
    一、公用
    1.includeInLayout:它的作用是當(dāng)使用visible隱藏對(duì)象的時(shí)候,該對(duì)象不會(huì)占位。
    2.字體:fontsize:全局字體大小,推薦設(shè)置12。font-family:"ARIAL"。這些在CSS中設(shè)定好

    二、Panel
    1.headerHeight:Panel頭的寬度,這里一般設(shè)置成15比較舒服。
    2.borderThicknessBottom:Panel控件下邊框的粗細(xì),一般設(shè)置成2比較舒服。
    3.borderThicknessLeft:Panel左邊框的粗細(xì),一般設(shè)置成2比較舒服。
    4.borderThicknessRight:Panel右邊框的粗細(xì),一般設(shè)置成2比較舒服。
    5.backgroundImage:如果覺(jué)得Panel的白色北京太丑,那就用這個(gè)換一個(gè)漸變背景吧。

    三、DataGrid&AdvancedDataGrid
    1.headerColors:用于繪制標(biāo)題背景漸變的兩種顏色的數(shù)組。推薦[#60beff,#1273ce],藍(lán)色漸變
    2.alternatingItemColors:交替模式中行的顏色。此值可以是由多種顏色中任意兩種所組成的數(shù)組。推薦[#FFFDCE, #C8ECFF],淺藍(lán)和黃色。
    3.headerWordWrap:則指定標(biāo)題文本不適合一行時(shí)將換行。(這是在AdvancedDataGridColumnGroup中設(shè)置的)。
    4.一個(gè)標(biāo)志,指示當(dāng)此列中各行的文本不能在一行中顯示時(shí),是否能夠自動(dòng)換行(這是在DataGridColumn中設(shè)置的)。

    四、Chart
    1.showDataTips:指定Flex是否顯示圖表的提示窗口控件。
    2.verticalAxis-CategoryAxis-Title:?jiǎn)挝豢梢约釉谧鴺?biāo)軸上。
    3.GradientEntry:設(shè)置圖表的漸變色。詳見(jiàn)第..
    http://www.tkk7.com/zhangyuan/archive/2010/09/03/330847.html
    如下CODE

     1<mx:BarSeries xField="costs" >
     2                        <mx:fill>
     3                            <mx:LinearGradient>
     4                                <mx:GradientEntry color="#A6A602" ratio="0"  />
     5                                <mx:GradientEntry color="#DFDF97" ratio=".2"  />
     6                                <mx:GradientEntry color="#A6A602" ratio=".4"  />
     7                                <mx:GradientEntry color="#F5F655" ratio=".8"  />
     8                                <mx:GradientEntry color="#A6A602" ratio="1"  />
     9                            </mx:LinearGradient>
    10                        </mx:fill>
    11                    </mx:BarSeries>





    posted @ 2010-08-27 15:44 張?jiān)猈on 閱讀(3022) | 評(píng)論 (0)編輯 收藏

     cognos中有列表和圖形,但是表和圖之間總是孤立的,刷新頁(yè)面也都是全頁(yè)面刷新,于是經(jīng)理在想,是否有個(gè)方法能在點(diǎn)擊cognos列

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

    的一些J2EE老底子加上report studio中強(qiáng)大的HTML項(xiàng)目貌似可以搞定,于是開(kāi)搞了...
     首先給大家看看數(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)擊事件出來(lái)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,我們來(lái)看看效果
    我先點(diǎn)擊一下第一個(gè)單元格

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

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


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

    posted @ 2010-08-20 17:37 張?jiān)猈on 閱讀(4332) | 評(píng)論 (4)編輯 收藏

        對(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)注釋,結(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 @ 2010-08-05 21:41 張?jiān)猈on 閱讀(6233) | 評(píng)論 (16)編輯 收藏
    主站蜘蛛池模板: 免费无码又爽又刺激高潮软件| 亚洲中文久久精品无码ww16| 亚洲福利精品电影在线观看| 亚洲欧洲日本天天堂在线观看| kk4kk免费视频毛片| 国产极品粉嫩泬免费观看| 97久久精品亚洲中文字幕无码 | 亚洲AV美女一区二区三区| www永久免费视频| 亚洲精品在线视频| 夜夜爽妓女8888视频免费观看| 亚洲成a人片在线观看久| 99久久国产免费-99久久国产免费 99久久国产免费中文无字幕 | 亚洲精品乱码久久久久久 | 日韩毛片免费在线观看| 亚洲国产成人AV在线播放| 免费鲁丝片一级观看| 亚洲人成网站免费播放| 真实乱视频国产免费观看| 麻豆精品不卡国产免费看| 亚洲色图国产精品| 免费观看无遮挡www的小视频| 亚洲色图在线播放| 亚洲国产91精品无码专区| 亚洲高清视频免费| 亚洲国产精品无码中文lv| 久久国产亚洲电影天堂| 免费看一级做a爰片久久| 一级毛片免费不卡| 亚洲色偷偷色噜噜狠狠99网| 一本久到久久亚洲综合| 二个人看的www免费视频| 亚洲精选在线观看| 亚洲乱码中文字幕综合234| 久久精品免费一区二区喷潮| 疯狂做受xxxx高潮视频免费| 亚洲午夜精品第一区二区8050| 国产成人精品无码免费看| 亚洲jjzzjjzz在线播放| 亚洲成a人在线看天堂无码| 国产成人免费爽爽爽视频 |