可以用script去解決第一個問題。
可以定義一個參數去指定properties檔案的路徑,然後建立datasource。
在datasource的script中編輯beforeOpen事件,參考下面的代碼:
=======================================
importPackage( Packages.java.io );
importPackage( Packages.java.util );
fin = new java.io.FileInputStream( new String(params["propFile"]) );
props = new java.util.Properties( );
props.load(fin);
extensionProperties.odaURL = new String(props.getProperty("url"));
extensionProperties.odaDriverClass = new String(props.getProperty("driver"));
extensionProperties.odaUser = new String(props.getProperty("userid"));
extensionProperties.odaPassword = new String(props.getProperty("password"));
fin.close();
這樣就可以從properties檔案中動態讀取資料來源配置資訊。
----------------------------------------------------------------------------------------------------------------
你可以把設定檔在代碼裡寫死,也可以定義為報表參數,請注意params["propFile"]這裡。
這裡的代碼只支援絕對路徑,在deployment的情況下可能不太適用,可以修改一下支援相對路徑,相對於你發布的應用根目錄。
importPackage( Packages.java.io,Packages.java.util,Packages.java.net );
importPackage( Packages.javax.servlet.http );
req = reportContext.getHttpServletRequest( );
propPath = new String(params["propFile"]);
if ( propPath.charAt(0) != "/" )
propPath = "/" + propPath;
url = req.getSession( ).getServletContext( ).getResource( propPath );
if ( url != null )
{
props = new java.util.Properties( );
props.load( url.openStream( ) );
extensionProperties.odaURL = new String(props.getProperty("url"));
extensionProperties.odaDriverClass = new String(props.getProperty("driver"));
extensionProperties.odaUser = new String(props.getProperty("userid"));
extensionProperties.odaPassword = new String(props.getProperty("password"));
}