我有一個BIRT報告,其中包含兩個數據集和兩個表格,每個數據集綁定一個。根據「替代」數據集的內容,我只希望一張表一次顯示。因此,如果datset2不是空的,基本上table1的可見性被設置爲隱藏,反之亦然。根據替代數據集大小設置表格的BIRT可見性
Can /我該如何編寫腳本?
提前
我有一個BIRT報告,其中包含兩個數據集和兩個表格,每個數據集綁定一個。根據「替代」數據集的內容,我只希望一張表一次顯示。因此,如果datset2不是空的,基本上table1的可見性被設置爲隱藏,反之亦然。根據替代數據集大小設置表格的BIRT可見性
Can /我該如何編寫腳本?
提前
非常感謝保持對國旗的flag.Based加載數據集,使您可以在表中根據該標誌,同時數據選擇表格的知名度。
您可以調用beforeFactory腳本中的BIRT數據引擎API來檢查第二個表的數據集,以查看它是否有值以及是否從報表中刪除第一個表。
//check if table 2 has data. If it does drop table 1
importPackage(Packages.org.eclipse.birt.report.model.api);
importPackage(Packages.java.lang);
importPackage(Packages.java.util);
importPackage(Packages.org.eclipse.birt.data.engine.api);
importPackage(Packages.org.eclipse.birt.report.model.api);
importPackage(Packages.org.eclipse.birt.data.engine.api.querydefn);
importPackage(Packages.org.eclipse.birt.data.engine.core);
var myconfig = reportContext.getReportRunnable().getReportEngine().getConfig();
var de = DataEngine.newDataEngine(myconfig, null);
var dsrc = reportContext.getDesignHandle().findDataSource("Data Source");
var dset = reportContext.getDesignHandle().findDataSet("Data Set2");
var odaDataSource = new OdaDataSourceDesign("Test Data Source");
odaDataSource.setExtensionID("org.eclipse.birt.report.data.oda.jdbc");
odaDataSource.addPublicProperty("odaURL", dsrc.getProperty("odaURL").toString());
odaDataSource.addPublicProperty("odaDriverClass", dsrc.getProperty("odaDriverClass").toString());
odaDataSource.addPublicProperty("odaUser", dsrc.getProperty("odaUser").toString());
odaDataSource.addPublicProperty("odaPassword", "");
var odaDataSet = new OdaDataSetDesign("Test Data Set");
odaDataSet.setDataSource(odaDataSource.getName());
odaDataSet.setExtensionID("org.eclipse.birt.report.data.oda.jdbc.JdbcSelectDataSet");
odaDataSet.setQueryText(dset.getQueryText());
de.defineDataSource(odaDataSource);
de.defineDataSet(odaDataSet);
queryDefinition = new QueryDefinition();
queryDefinition.setDataSetName(odaDataSet.getName());
queryDefinition.setAutoBinding(true);
var pq = de.prepare(queryDefinition);
var qr = pq.execute(null);
rowcount=0;
var ri = qr.getResultIterator();
while ( ri.next())
{
rowcount++
}
ri.close();
qr.close();
de.shutdown();
if(rowcount > 0){
reportContext.getDesignHandle().findElement("Table1").drop();
}
請注意,在此示例中,表1必須命名爲Table1。這可以在表格的一般屬性中完成。完整的例子可以在這裏找到http://www.birt-exchange.org/org/devshare/designing-birt-reports/1542-data-engine-api-to-check-data-set-values/
對不起,爲時已晚,這可能幫助其他人
你應該在你的數據集使用的列值進行測試(數列,主塔...),然後在你的桌子Visibility properties
,檢查Hide Element
和For all outputs
,推動fx
寫這個代碼:
if (row["yourTestColumn"] == null){
true /* when you want to hide your table *
} else{
false
}
我希望將幫助其他人
非常感謝。剛開始努力在數據集事件處理程序中創建一個變量。爲我節省了很多時間 – DKSan
日Ë下面的代碼爲我工作: (將其放置在「beforeFactory」腳本)
if (params["show"].value == 'N')
{
reportContext.getDesignHandle().findDataSet("MyDataSet").drop();
reportContext.getDesignHandle().findElement("MyChart").drop();
}
所以我在哪裏定義的標誌 - 在事件處理程序的一個大概?以及如何參考大小 - .size()?相對比較新的BIRT(2.5.2 btw - 有點舊我知道),並沒有太多的腳本曝光,所以感謝幫助 –
bluesky