0

2 つのデータセットと 2 つのテーブルがそれぞれにバインドされた BIRT レポートがあります。「代替」データセットの内容に基づいて、一度に 1 つのテーブルのみを表示したい。したがって、基本的に、datset2 が空でない場合、table1 の可視性は非表示に設定され、その逆も同様です。

これをスクリプト化できますか/どのようにスクリプトを作成できますか?

よろしくお願いします

4

4 に答える 4

1

beforeFactoryスクリプトでBIRTDataEngine APIを呼び出して、2番目のテーブルのデータセットをチェックし、値があるかどうか、およびレポートから最初のテーブルを削除するかどうかを確認できます。

//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 ElementしてFor 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 に答える