【问题标题】:Setting BIRT visibility for table based on alternative dataset size根据替代数据集大小设置表的 BIRT 可见性
【发布时间】:2012-09-03 11:58:18
【问题描述】:

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

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

在此先感谢

【问题讨论】:

    标签: dataset birt


    【解决方案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/

    【讨论】:

      【解决方案2】:

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

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

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

      我希望这对其他人有所帮助

      【讨论】:

      • 非常感谢。刚刚开始努力在数据集事件处理程序中创建一个变量。节省了我很多时间
      【解决方案3】:


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

      【讨论】:

      • 那么我在哪里定义标志 - 大概是在一个事件处理程序中?以及如何引用大小 - .size()? BIRT 相对较新(2.5.2 btw - 我知道有点旧)并且根本没有太多接触脚本,所以感谢您的帮助
      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-20
        • 1970-01-01
        • 1970-01-01
        • 2015-07-18
        • 2020-10-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多