2012-09-03 20 views
0

我有一個BIRT報告,其中包含兩個數據集和兩個表格,每個數據集綁定一個。根據「替代」數據集的內容,我只希望一張表一次顯示。因此,如果datset2不是空的,基本上table1的可見性被設置爲隱藏,反之亦然。根據替代數據集大小設置表格的BIRT可見性

Can /我該如何編寫腳本?

提前

回答

0


非常感謝保持對國旗的flag.Based加載數據集,使您可以在表中根據該標誌,同時數據選擇表格的知名度。

+0

所以我在哪裏定義的標誌 - 在事件處理程序的一個大概?以及如何參考大小 - .size()?相對比較新的BIRT(2.5.2 btw - 有點舊我知道),並沒有太多的腳本曝光,所以感​​謝幫助 – bluesky

1

您可以調用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/

1

對不起,爲時已晚,這可能幫助其他人

你應該在你的數據集使用的列值進行測試(數列,主塔...),然後在你的桌子Visibility properties,檢查Hide ElementFor all outputs,推動fx寫這個代碼:

if (row["yourTestColumn"] == null){ 
    true /* when you want to hide your table * 
} else{ 
    false 
} 

我希望將幫助其他人

+0

非常感謝。剛開始努力在數據集事件處理程序中創建一個變量。爲我節省了很多時間 – DKSan

0

日Ë下面的代碼爲我工作: (將其放置在「beforeFactory」腳本)

if (params["show"].value == 'N') 
{ 
reportContext.getDesignHandle().findDataSet("MyDataSet").drop(); 
reportContext.getDesignHandle().findElement("MyChart").drop(); 
} 
相關問題