|
|
Line 1: |
Line 1: |
| == Dynamic Table == | | == Dynamic Table == |
− | | + | Moved to new BIRT Examples location. [[Java - Build Dynamic Table (BIRT)]] |
− | This example opens an existing report and adds a data source, data set and a table.
| + | |
− | The table columns are dynamically created based on an ArrayList that is passed in. The columns must
| + | |
− | exist in the query that is passed in.
| + | |
− | | + | |
− | == Modifying the Source ==
| + | |
− | | + | |
− | Prior to compiling the source, modify these three lines:
| + | |
− | | + | |
− | *config.setProperty("BIRT_HOME", "C:/birt-runtime-2_1_1/birt-runtime-2_1_1/ReportEngine");
| + | |
− | *designHandle = session.openDesign("c:/tmp/testdeapi.rptdesign");
| + | |
− | *designHandle.saveAs( "c:/temp/sample.rptdesign" ); //$NON-NLS-1$
| + | |
− | | + | |
− | Edit the first line to point to the actual location where you installed the BIRT runtime.
| + | |
− | The second line must point to an existing report.
| + | |
− | The last line is the location where the report will be written to. The directory must exist prior to saving the report.
| + | |
− | | + | |
− | == Compiling the Example ==
| + | |
− | | + | |
− | When running this example from within Eclipse, the Java Build Path for the project must contain all of the libraries in the BIRT_HOME/lib directory as well as the JRE System Library.<br/>
| + | |
− | | + | |
− | Here is a complete list of these libraries:
| + | |
− | *chartengineapi.jar
| + | |
− | *com.ibm.icu_3.4.4.1.jar
| + | |
− | *commons-cli-1.0.jar
| + | |
− | *commons-codec-1.3.jar
| + | |
− | *coreapi.jar
| + | |
− | *dataadapterapi.jar
| + | |
− | *dteapi.jar
| + | |
− | *engineapi.jar
| + | |
− | *flute.jar
| + | |
− | *js.jar
| + | |
− | *modelapi.jar
| + | |
− | *org.eclipse.emf.common_2.2.0.v200606051102.jar
| + | |
− | *org.eclipse.emf.ecore.xmi_2.2.0.v200606051102.jar
| + | |
− | *org.eclipse.emf.ecore_2.2.0.v200606051102.jar
| + | |
− | *sac.jar
| + | |
− | *scriptapi.jar
| + | |
− | | + | |
− | The example should now run successfully.
| + | |
− | | + | |
− | Add comments at the bottom of the example.
| + | |
− | | + | |
− | [[BIRT Design Engine API]] Return to the BIRT Design Engine API examples
| + | |
− | | + | |
− | == Source ==
| + | |
− | ===DECreateDynamicTable.java===
| + | |
− | | + | |
− | | + | |
− |
| + | |
− |
| + | |
− | import java.io.IOException;
| + | |
− | import java.util.ArrayList;
| + | |
− |
| + | |
− | import org.eclipse.birt.core.framework.Platform;
| + | |
− | import org.eclipse.birt.report.model.api.CellHandle;
| + | |
− | import org.eclipse.birt.report.model.api.DataItemHandle;
| + | |
− | import org.eclipse.birt.report.model.api.DesignConfig;
| + | |
− | import org.eclipse.birt.report.model.api.ElementFactory;
| + | |
− | import org.eclipse.birt.report.model.api.IDesignEngine;
| + | |
− | import org.eclipse.birt.report.model.api.IDesignEngineFactory;
| + | |
− | import org.eclipse.birt.report.model.api.LabelHandle;
| + | |
− | import org.eclipse.birt.report.model.api.OdaDataSetHandle;
| + | |
− | import org.eclipse.birt.report.model.api.OdaDataSourceHandle;
| + | |
− | import org.eclipse.birt.report.model.api.PropertyHandle;
| + | |
− | import org.eclipse.birt.report.model.api.ReportDesignHandle;
| + | |
− | import org.eclipse.birt.report.model.api.RowHandle;
| + | |
− | import org.eclipse.birt.report.model.api.SessionHandle;
| + | |
− | import org.eclipse.birt.report.model.api.StructureFactory;
| + | |
− | import org.eclipse.birt.report.model.api.TableHandle;
| + | |
− | import org.eclipse.birt.report.model.api.activity.SemanticException;
| + | |
− | import org.eclipse.birt.report.model.api.elements.structures.ComputedColumn;
| + | |
− |
| + | |
− | import com.ibm.icu.util.ULocale;
| + | |
− |
| + | |
− | /**
| + | |
− | * Dynamic Table BIRT Design Engine API (DEAPI) demo.
| + | |
− | */
| + | |
− |
| + | |
− | public class DECreateDynamicTable
| + | |
− | {
| + | |
− | ReportDesignHandle designHandle = null;
| + | |
− | ElementFactory designFactory = null;
| + | |
− | StructureFactory structFactory = null;
| + | |
− |
| + | |
− | public static void main( String[] args )
| + | |
− | {
| + | |
− | try
| + | |
− | {
| + | |
− | DECreateDynamicTable de = new DECreateDynamicTable();
| + | |
− | ArrayList al = new ArrayList();
| + | |
− | al.add("OFFICECODE");
| + | |
− | al.add("CITY");
| + | |
− | al.add("COUNTRY");
| + | |
− |
| + | |
− | de.buildReport(al, "From Offices" );
| + | |
− | }
| + | |
− | catch ( IOException e )
| + | |
− | {
| + | |
− | // TODO Auto-generated catch block
| + | |
− | e.printStackTrace();
| + | |
− | }
| + | |
− | catch ( SemanticException e )
| + | |
− | {
| + | |
− | // TODO Auto-generated catch block
| + | |
− | e.printStackTrace();
| + | |
− | }
| + | |
− | }
| + | |
− |
| + | |
− | void buildDataSource( ) throws SemanticException
| + | |
− | {
| + | |
− |
| + | |
− | OdaDataSourceHandle dsHandle = designFactory.newOdaDataSource(
| + | |
− | "Data Source", "org.eclipse.birt.report.data.oda.jdbc" );
| + | |
− | dsHandle.setProperty( "odaDriverClass",
| + | |
− | "org.eclipse.birt.report.data.oda.sampledb.Driver" );
| + | |
− | dsHandle.setProperty( "odaURL", "jdbc:classicmodels:sampledb" );
| + | |
− | dsHandle.setProperty( "odaUser", "ClassicModels" );
| + | |
− | dsHandle.setProperty( "odaPassword", "" );
| + | |
− |
| + | |
− | designHandle.getDataSources( ).add( dsHandle );
| + | |
− |
| + | |
− | }
| + | |
− |
| + | |
− | void buildDataSet(ArrayList cols, String fromClause ) throws SemanticException
| + | |
− | {
| + | |
− |
| + | |
− | OdaDataSetHandle dsHandle = designFactory.newOdaDataSet( "ds",
| + | |
− | "org.eclipse.birt.report.data.oda.jdbc.JdbcSelectDataSet" );
| + | |
− | dsHandle.setDataSource( "Data Source" );
| + | |
− | String qry = "Select ";
| + | |
− | for( int i=0; i < cols.size(); i++){
| + | |
− | qry += " " + cols.get(i);
| + | |
− | if( i != (cols.size() -1) ){
| + | |
− | qry += ",";
| + | |
− | }
| + | |
− |
| + | |
− | }
| + | |
− | qry += " " + fromClause;
| + | |
− |
| + | |
− | dsHandle.setQueryText( qry );
| + | |
− |
| + | |
− | designHandle.getDataSets( ).add( dsHandle );
| + | |
− |
| + | |
− |
| + | |
− |
| + | |
− | }
| + | |
− | void buildReport(ArrayList cols, String fromClause ) throws IOException, SemanticException
| + | |
− | {
| + | |
− |
| + | |
− |
| + | |
− | //Configure the Engine and start the Platform
| + | |
− | DesignConfig config = new DesignConfig( );
| + | |
− |
| + | |
− | config.setProperty("BIRT_HOME", "C:/birt-runtime-2_1_1/birt-runtime-2_1_1/ReportEngine");
| + | |
− | IDesignEngine engine = null;
| + | |
− | try{
| + | |
− |
| + | |
− |
| + | |
− | Platform.startup( config );
| + | |
− | IDesignEngineFactory factory = (IDesignEngineFactory) Platform
| + | |
− | .createFactoryObject( IDesignEngineFactory.EXTENSION_DESIGN_ENGINE_FACTORY );
| + | |
− | engine = factory.createDesignEngine( config );
| + | |
− |
| + | |
− | }catch( Exception ex){
| + | |
− | ex.printStackTrace();
| + | |
− | }
| + | |
− |
| + | |
− |
| + | |
− | SessionHandle session = engine.newSessionHandle( ULocale.ENGLISH ) ;
| + | |
− |
| + | |
− |
| + | |
− |
| + | |
− | try{
| + | |
− | //open a design or a template
| + | |
− | designHandle = session.openDesign("c:/tmp/testdeapi.rptdesign");
| + | |
− |
| + | |
− | designFactory = designHandle.getElementFactory( );
| + | |
− |
| + | |
− | buildDataSource();
| + | |
− | buildDataSet(cols, fromClause);
| + | |
− |
| + | |
− | TableHandle table = designFactory.newTableItem( "table", cols.size() );
| + | |
− | table.setWidth( "100%" );
| + | |
− | table.setDataSet( designHandle.findDataSet( "ds" ) );
| + | |
− |
| + | |
− |
| + | |
− | PropertyHandle computedSet = table.getColumnBindings( );
| + | |
− | ComputedColumn cs1 = null;
| + | |
− |
| + | |
− | for( int i=0; i < cols.size(); i++){
| + | |
− | cs1 = StructureFactory.createComputedColumn();
| + | |
− | cs1.setName((String)cols.get(i));
| + | |
− | cs1.setExpression("dataSetRow[\"" + (String)cols.get(i) + "\"]");
| + | |
− | computedSet.addItem(cs1);
| + | |
− | }
| + | |
− |
| + | |
− |
| + | |
− | // table header
| + | |
− | RowHandle tableheader = (RowHandle) table.getHeader( ).get( 0 );
| + | |
− |
| + | |
− |
| + | |
− | for( int i=0; i < cols.size(); i++){
| + | |
− | LabelHandle label1 = designFactory.newLabel( (String)cols.get(i) );
| + | |
− | label1.setText((String)cols.get(i));
| + | |
− | CellHandle cell = (CellHandle) tableheader.getCells( ).get( i );
| + | |
− | cell.getContent( ).add( label1 );
| + | |
− | }
| + | |
− |
| + | |
− | // table detail
| + | |
− | RowHandle tabledetail = (RowHandle) table.getDetail( ).get( 0 );
| + | |
− | for( int i=0; i < cols.size(); i++){
| + | |
− | CellHandle cell = (CellHandle) tabledetail.getCells( ).get( i );
| + | |
− | DataItemHandle data = designFactory.newDataItem( "data_"+(String)cols.get(i) );
| + | |
− | data.setResultSetColumn( (String)cols.get(i));
| + | |
− | cell.getContent( ).add( data );
| + | |
− | }
| + | |
− |
| + | |
− | designHandle.getBody( ).add( table );
| + | |
− |
| + | |
− | // Save the design and close it.
| + | |
− |
| + | |
− | designHandle.saveAs( "c:/temp/sample.rptdesign" ); //$NON-NLS-1$
| + | |
− | designHandle.close( );
| + | |
− | System.out.println("Finished");
| + | |
− | }catch (Exception e){
| + | |
− | e.printStackTrace();
| + | |
− | }
| + | |
− |
| + | |
− | }
| + | |
− | }
| + | |
− | ----
| + | |
− | | + | |
− | == Comments ==
| + | |
− | Please enter comments below by selecting the edit icon to the right.
| + | |
− | You will need a Bugzilla account to add comments.
| + | |
| | | |
| ---- | | ---- |
| [[Category:BIRT]] | | [[Category:BIRT]] |
| [[Category:BIRT Example OLD]] | | [[Category:BIRT Example OLD]] |