BIRT Design API 学习

ZDNet软件频道 时间:2008-07-23 作者: | BBS.ChinaUnix.net  我要评论()
本文关键词:BIRT OpenAPI API 软件
以下这个例子来自birt 的官方教材,我没有改动任何的信息.

以下这个例子来自BIRT 的官方教材,我没有改动任何的信息.
这个例子演示了从建立DataSource ,然后建立DataSet , 动态的根据输入数据输出report template .
关于BIRTAPI , 在 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)
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)
}
}


这个例子一共有四个函数 :
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 的处理的了.

 

 

BIRT

OpenAPI

API

软件


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134