Jump to: navigation, search

Data Extract (BIRT) 2.1

< To: Integration Examples (BIRT)

Data Extract

This example demonstrates using the RE API to run a report and extract the results from the rptdocument.

Add comments at the bottom of the example.

BIRT Report Engine API Return to the BIRT Report Engine API examples



import java.util.ArrayList;
import java.util.logging.Level;

import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.data.engine.core.DataException;
import org.eclipse.birt.report.engine.api.EngineConfig;
import org.eclipse.birt.report.engine.api.EngineException;
import org.eclipse.birt.report.engine.api.IDataExtractionTask;
import org.eclipse.birt.report.engine.api.IDataIterator;
import org.eclipse.birt.report.engine.api.IExtractionResults;
import org.eclipse.birt.report.engine.api.IReportDocument;
import org.eclipse.birt.report.engine.api.IReportEngine;
import org.eclipse.birt.report.engine.api.IReportEngineFactory;
import org.eclipse.birt.report.engine.api.IReportRunnable;
import org.eclipse.birt.report.engine.api.IResultMetaData;
import org.eclipse.birt.report.engine.api.IResultSetItem;
import org.eclipse.birt.report.engine.api.IRunTask;

public class DataExtract {

static void executeReport() throws EngineException
 IReportEngine engine=null;
 EngineConfig config = null;
  config = new EngineConfig( );
  config.setEngineHome( "C:\eclipseBIRT\eclipse\features\org.eclipse.birt.report.runtime_2.2.0.v20070529-7U7U-Cmz0UWCVvy52" );
  config.setLogConfig(null, Level.FINE);

  Platform.startup( config );
  IReportEngineFactory factory = (IReportEngineFactory) Platform
  .createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
  engine = factory.createReportEngine( config );
  engine.changeLogLevel( Level.WARNING );

 }catch( Exception ex){

 //open the report design
 IReportRunnable design = null;

 design = engine.openReportDesign("C:/temp/BIRT/acceptandorder.rptdesign"); 

 //Create task to run the report - use the task to run the report,
 IRunTask task = engine.createRunTask(design); 

 //Run the report and create the rptdocument

 //Open the rptdocument
 IReportDocument rptdoc = engine.openReportDocument("C:/temp/BIRT/acceptandorder.rptdocument"); 

 //Create the data extraction task
 IDataExtractionTask iDataExtract = engine.createDataExtractionTask(rptdoc);

  * returns the metadata corresponding to the data stored in the report
  * document.  Could specify a component.

 ArrayList resultSetList = (ArrayList)iDataExtract.getResultSetList( );

 //Get the first result set.  Note this is a table elemenent
 IResultSetItem resultItem = (IResultSetItem)resultSetList.get( 0 );

 //Set the name of the element you want to retrieve.  
 //This will usually be ELEMENT_something if you do not name your elements.
 //If you name a table for example "MyTable"  this will be the resultset name
 String dispName = resultItem.getResultSetName( );
 iDataExtract.selectResultSet( dispName );

 IExtractionResults iExtractResults = iDataExtract.extract();
 IDataIterator iData = null;

 //Iterate the results
  if ( iExtractResults != null ) {
    iData = iExtractResults.nextResultIterator( );
    if ( iData != null  ){
      //Get metadata on retrieved results
      IResultMetaData irmd = iData.getResultMetaData();
      int colCount = irmd.getColumnCount();
      System.out.println("Column Count =" + colCount );
      for( int j=0; j< colCount; j++){
        System.out.println("Column Name =" + irmd.getColumnName(j) );
        System.out.println("Column Type =" + irmd.getColumnTypeName(j) );

      while ( iData.next( ) ) { 
        //Just disply the first two columns
        Object objColumn1;
        Object objColumn2;
          objColumn1 = iData.getValue(0);
        } catch(DataException e) {
          objColumn1 = new String("");
          objColumn2 = iData.getValue(1);
        } catch(DataException e){
          objColumn2 = new String("");
        System.out.println( objColumn1 + " , " + objColumn2 );
 }catch( Exception e){
 //close the task and showdown the engine and Platform
 //Note - If the program stays resident do not shutdown the Platform or the Engine  

public static void main(String[] args) {
  executeReport( );
 catch ( Exception e )



Please enter comments below by selecting the edit icon to the right. You will need a Bugzilla account to add comments.

This code is working for only first time. While running second time if we use same *. Rptdesign file its giving fallowing invalid design file error message. If we use new *. Rptdesign file then it will work fine. Means the code is modifying Rptdesign file. Can you please tell me how to solve this problem?

SEVERE: Line Number:1 Error Code:Error.XMLParserException.SAX_ERROR Exception:org.xml.sax.SAXParseException: Content is not allowed in prolog. Message:SAX detected an error with the basic XML syntax of the file. Jun 6, 2007 9:57:55 AM org.eclipse.birt.report.engine.api.impl.ReportEngineHelper openReportDesign SEVERE: invalid design file file:/D:/workspace/Simple/ZZZZ.rptdesign org.eclipse.birt.report.engine.api.EngineException: The design file file:/D:/workspace/Simple/ZZZZ.rptdesign has error and can not be run. at org.eclipse.birt.report.engine.api.impl.ReportEngineHelper.openReportDesign(ReportEngineHelper.java:249) at org.eclipse.birt.report.engine.api.impl.ReportEngineHelper.openReportDesign(ReportEngineHelper.java:192) at org.eclipse.birt.report.engine.api.impl.ReportEngineHelper.openReportDesign(ReportEngineHelper.java:126) at org.eclipse.birt.report.engine.api.impl.ReportEngine.openReportDesign(ReportEngine.java:222) at SRC.ReportGenerator.saveCSVFormat(ReportGenerator.java:314) at SRC.ReportGenerator.widgetSelected(ReportGenerator.java:240) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:90) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:928) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3348) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2968) at SRC.ReportGenerator.runDemo(ReportGenerator.java:210) at SRC.ReportGenerator.main(ReportGenerator.java:94) Caused by: Error.DesignFileException.INVALID_XML - 2 errors found! 1.) ( line = 1, tag = null) org.eclipse.birt.report.model.util.XMLParserException (code = Error.XMLParserException.SAX_ERROR, message : Line Number:1 Error Code:Error.XMLParserException.SAX_ERROR Exception:org.xml.sax.SAXParseException: Content is not allowed in prolog. Message:SAX detected an error with the basic XML syntax of the file. ) 2.) ( line = 1) org.xml.sax.SAXParseException (message : Content is not allowed in prolog.)

at org.eclipse.birt.report.model.parser.ModuleReader.readModule(ModuleReader.java:117) at org.eclipse.birt.report.model.parser.DesignReader.read(DesignReader.java:90) at org.eclipse.birt.report.model.core.DesignSession.openDesign(DesignSession.java:301) at org.eclipse.birt.report.model.api.SessionHandle.openDesign(SessionHandle.java:292) at org.eclipse.birt.report.engine.parser.ReportParser.getDesignHandle(ReportParser.java:157) at org.eclipse.birt.report.engine.api.impl.ReportEngineHelper.openReportDesign(ReportEngineHelper.java:244) ... 12 more


Please enter comments below by selecting the edit icon to the right. You will need a Bugzilla account to add comments.