0

我有一个 BIRT 报告,其中包含两个数据集和两个表,每个表绑定一个。根据“替代”数据集的内容,我只希望一次显示一个表格。因此,如果 datset2 不为空,则基本上 table1 的可见性设置为隐藏,反之亦然。

我可以/如何编写这个脚本?

提前谢谢了

4

4 回答 4

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/

于 2012-09-18T22:22:33.310 回答
1

抱歉,太晚了,这可能对其他人有帮助

您应该使用数据集中的列值(计数列,主列...)进行测试,然后在您的表中Visibility properties,检查Hide ElementFor all outputs按下fx以编写以下代码:

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

我希望这会帮助其他人

于 2013-02-20T17:17:35.703 回答
0


保留一个标志。基于该标志加载您的数据集,以便您可以同时根据该标志选择您的表格可见性。

于 2012-09-03T13:09:09.863 回答
0

以下代码对我有用:(将其放在“ beforeFactory ”脚本中)

if (params["show"].value == 'N')
{
reportContext.getDesignHandle().findDataSet("MyDataSet").drop();
reportContext.getDesignHandle().findElement("MyChart").drop();
} 
于 2014-03-03T10:19:25.360 回答