浏览 7862 次
锁定老帖子 主题:BIRT Design API 学习
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-07-03
这个例子演示了从建立DataSource ,然后建立DataSet , 动态的根据输入数据输出report template . 关于Birt 的 API , 在 eclipse 的 help content 里面有,3.3 支持新的基于topic 的search ,可以帮我们简化搜索的topic , 其中有五个API (一共是5个) : Report Object Model API , Report Engine API , Birt Report Scripting API , Open Data Access API , Data Engine API .另外也提供详细的讲解每一个report 的元素的意思.非常好的一份资料 . DECreateDynamicTable.java 例子code : 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(); } } } 这个例子一共有四个函数 : 1 . Main 函数: 这个例子简单之处在与它可以直接的运行,只要你修改了 config.setProperty("BIRT_HOME", "C:/birt-runtime-2_1_1/birt-runtime-2_1_1/ReportEngine"); 指向你自己的Birt Runtime 解压后的ReportEngine 目录. designHandle = session.openDesign("c:/tmp/testdeapi.rptdesign"); 你可以从Birt 里面建立一个新的Report template.然后指向这个report 就可以了 designHandle.saveAs( "c:/temp/sample.rptdesign" ); //$NON-NLS-1$ 指定一个你想保存的位置,c:/temp 目录存在你才能够保存到c:/temp 目录下. 2 . buildDataSource 函数把一个ReportDesignHandle 的 Data Source 初始化, setProperties 左边的String 是不能变的,Data Source 的名字可以随便取,取DataSet 的时候要根据这个名字来取. 3 . buildDataSet 通过拼sql 的方式 ,来build DataSet, 注意sql 别拼错了. 4 . buildReport 注意element 的初始化顺序.在所有的DataItem 外面都是一层Cell,Cell 外面才是row .这个例子使用的row 来拼成table 的,也可以用column 来拼,相对应的数据处理也是一个column 一个 column 的处理的了. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |