4
我想修改現有的* .rptdesign文件並將其保存爲新名稱。 現有文件包含帶有模板SQL select語句和多個DS參數的Data Set
。 我想使用僅使用部分DS參數的實際SQL select語句。BIRT:如何以編程方式刪除數據集參數
但是,下面的代碼產生異常:
Exception in thread "main" `java.lang.RuntimeException`: *The structure is floating, and its handle is invalid!*
at org.eclipse.birt.report.model.api.StructureHandle.getStringProperty(StructureHandle.java:207)
at org.eclipse.birt.report.model.api.DataSetParameterHandle.getName(DataSetParameterHandle.java:143)
at org.eclipse.birt.report.model.api.DataSetHandle$DataSetParametersPropertyHandle.removeParamBindingsFor(DataSetHandle.java:851)
at org.eclipse.birt.report.model.api.DataSetHandle$DataSetParametersPropertyHandle.removeItems(DataSetHandle.java:694)
-
OdaDataSetHandle dsMaster = (OdaDataSetHandle) report.findDataSet("Master");
HashSet<String> bindVarsUsed = new HashSet<String>();
...
// find out which DS parameters are actually used
HashSet<String> bindVarsUsed = new HashSet<String>();
...
ArrayList<OdaDataSetParameterHandle> toRemove = new ArrayList<OdaDataSetParameterHandle>();
for (Iterator iter = dsMaster.parametersIterator(); iter.hasNext();) {
OdaDataSetParameterHandle dsPara = (OdaDataSetParameterHandle)iter.next();
String name = dsPara.getName();
if (name.startsWith("param_")) {
String bindVarName = name.substring(6);
if (!bindVarsUsed.contains(bindVarName)) {
toRemove.add(dsPara);
}
}
}
PropertyHandle paramsHandle = dsMaster.getPropertyHandle(OdaDataSetHandle.PARAMETERS_PROP);
paramsHandle.removeItems(toRemove);
這裏有什麼問題? 是否有人使用DE API從現有數據集中刪除參數?
所以主要的區別是,你刪除每個項目後重新評估ds.parametersIterator(),而我的代碼是使用相同的迭代器刪除多個參數? – hvb