在很多時候, 你會向報表中傳遞一些比較零散的資料, 並且這些資料是動態, 有些可以從資料庫中取得, 有些是自己自訂的. 而水晶報表的資料來源不允許自訂的欄位, 這個時候你就可以中參數來解決這個問題了, 你可以在後台把 值 傳遞給 報表中的對應參數. (ps.參數名字不分大小寫)
// STRING VALUE PARAMETER.
String stringValue = "my title33"; // TODO: Fill in value
//HashMap變數中的元素的key值對應報表中參數的名字
HashMap map = new HashMap();
map.put("p1",stringValue);
map.put("p2","abx");
map.put("p3","abc");
//報表參數的Controller
ParameterFieldController parameterFieldController =
clientDoc.getDataDefController().getParameterFieldController();
if(parameterFieldController == null)...{
throw new NullPointerException("Can't get ParameterFieldController!!");
}
//HashMap對象的迭次
Iterator it = map.keySet().iterator();
while(it.hasNext())...{
String key = (String)it.next();
try...{
if(!"".equals(key) && key != null)//下面這個方法最重要, 對參數賦值
parameterFieldController
.setCurrentValue("", key.trim(), map.get(key));
}catch(ReportSDKException rde)...{
//處理出現沒對應的參數或其他原因的異常
System.out.println("Parameter:" + key + " throw Exception!!: " + rde);
}
}
我的報表檔案中有2個參數, 分別是p1和p2, 沒有p3, 所以拋出異常, 不過我不想介面上顯示異常的資訊, 也不想異常中斷我的程式, 所以我只是把異常的相關資訊顯示在控制台裡面.
運行後我的報表的參數p1和p2都被成功賦值, 控制台也顯示了空參數的異常, 當然那是沒有p3的緣故.
是不是很簡單, 由於這隻是個小小的例子, 所以寫得很簡單. 但在實際運用中要加以完善才行, 對方法更好的封裝, 對資料更加完善的判斷.
//例子中用到的類, 想把下面的東西插入到代碼中, 死活沒反映!!!!!
java.util.HashMap,
java.util.Iterator,
com.crystaldecisions.reports.sdk.ParameterFieldController,
com.crystaldecisions.sdk.occa.report.lib.ReportSDKException,
java.lang.NullPointerException
(有誰知道在csdn的blog中怎麼上傳圖片嗎? 唉, 有些東西用文字還真是難說清楚啊!)