用Birt API 处理参数问题

在使用Birt 的时候需要动态处理一些参数问题,所以使用API 来处理参数是Birt 很重要的一部分.所有以 'I' 开头的都是Interface ,
Birt 有三种parameter 分别对应 IParameterGroupDefn , ICascadingParameterGroup , IScalarParameterDefn , 对应的三个Handler 分别就是
ParameterGroupHandle, CascadingParameterGroupHandle , ScalarParameterHandle
Engine.shutdown() 已经过时了,应该使用新的Engine.destory(). 不过例子是Birt 官方的,所以我没有修改.
import java.io.Serializable;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.logging.Level;

import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.report.engine.api.EngineConfig;
import org.eclipse.birt.report.engine.api.EngineException;
import org.eclipse.birt.report.engine.api.IGetParameterDefinitionTask;
import org.eclipse.birt.report.engine.api.IParameterDefnBase;
import org.eclipse.birt.report.engine.api.IParameterGroupDefn;
import org.eclipse.birt.report.engine.api.IParameterSelectionChoice;
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.IScalarParameterDefn;
import org.eclipse.birt.report.model.api.CascadingParameterGroupHandle;
import org.eclipse.birt.report.model.api.ReportDesignHandle;
import org.eclipse.birt.report.model.api.ScalarParameterHandle;
public class ParametersTask {

static void executeReport() throws EngineException
{
HashMap<String, HashMap<String, Serializable>> parmDetails = new HashMap<String, HashMap<String, Serializable>>();

IReportEngine engine=null;
EngineConfig config = null;
try{
config = new EngineConfig( );
config.setEngineHome( "C:/birt-runtime-2_1_1/birt-runtime-2_1_1/ReportEngine" );
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){
ex.printStackTrace();
}

IReportRunnable design = null;

//Open a report design
design = engine.openReportDesign("C:/test/2.1/parameters/Parameters.rptdesign");

//Create Parameter Definition Task and retrieve parameter definitions
IGetParameterDefinitionTask task = engine.createGetParameterDefinitionTask( design );
Collection params = task.getParameterDefns( true );

//Iterate over each parameter
Iterator iter = params.iterator( );
while ( iter.hasNext( ) )
{
IParameterDefnBase param = (IParameterDefnBase) iter.next( );

if ( param instanceof IParameterGroupDefn )
{
IParameterGroupDefn group = (IParameterGroupDefn) param;
//System.out.println( "Parameter Group: " + group.getName( ) );

// Do something with the parameter group.
// Iterate over group contents.
Iterator i2 = group.getContents( ).iterator( );
while ( i2.hasNext( ) )
{
IScalarParameterDefn scalar = (IScalarParameterDefn) i2.next( );
//System.out.println("\t" + scalar.getName());
//Get details on the parameter
parmDetails.put( scalar.getName(), loadParameterDetails( task, scalar, design, group));
}

}
else
{

IScalarParameterDefn scalar = (IScalarParameterDefn) param;
//System.out.println(param.getName());
//get details on the parameter
parmDetails.put( scalar.getName(),loadParameterDetails( task, scalar, design, null));
}
}

//Destroy the engine and shutdown the Platform
//Note - If the program stays resident do not shutdown the Platform or the Engine
engine.shutdown();
Platform.shutdown();
System.out.println("Finished");
}

//Function to load parameter details in a map.
private static HashMap<String, Serializable> loadParameterDetails(IGetParameterDefinitionTask task, IScalarParameterDefn scalar, IReportRunnable report, IParameterGroupDefn group)
{



HashMap<String, Serializable> parameter = new HashMap<String, Serializable>();

if( group == null){
parameter.put("Parameter Group", "Default");
}else{
parameter.put("Parameter Group", group.getName());
}
parameter.put("Name", scalar.getName());
parameter.put("Help Text", scalar.getHelpText());
parameter.put("Display Name", scalar.getDisplayName());
//this is a format code such as > for UPPERCASE
parameter.put("Display Format", scalar.getDisplayFormat());

if( scalar.isHidden() ){
parameter.put("Hidden", "Yes");
}else{
parameter.put("Hidden", "No");
}
if( scalar.allowBlank() ){
parameter.put("Allow Blank", "Yes");
}else{
parameter.put("Allow Blank", "No");
}
if( scalar.allowNull() ){
parameter.put("Allow Null", "Yes");
}else{
parameter.put("Allow Null", "No");
}
if( scalar.isValueConcealed() ){
parameter.put("Conceal Entry", "Yes"); //ie passwords etc
}else{
parameter.put("Conceal Entry", "No");
}


switch (scalar.getControlType()) {
case IScalarParameterDefn.TEXT_BOX: parameter.put("Type", "Text Box"); break;
case IScalarParameterDefn.LIST_BOX: parameter.put("Type", "List Box"); break;
case IScalarParameterDefn.RADIO_BUTTON: parameter.put("Type", "List Box"); break;
case IScalarParameterDefn.CHECK_BOX: parameter.put("Type", "List Box"); break;
default: parameter.put("Type", "Text Box");break;
}


switch (scalar.getDataType()) {
case IScalarParameterDefn.TYPE_STRING: parameter.put("Data Type", "String"); break;
case IScalarParameterDefn.TYPE_FLOAT: parameter.put("Data Type", "Float"); break;
case IScalarParameterDefn.TYPE_DECIMAL: parameter.put("Data Type", "Decimal"); break;
case IScalarParameterDefn.TYPE_DATE_TIME: parameter.put("Data Type", "Date Time"); break;
case IScalarParameterDefn.TYPE_BOOLEAN: parameter.put("Data Type", "Boolean"); break;
default: parameter.put("Data Type", "Any"); break;
}


//Get report design and find default value, prompt text and data set expression using the DE API
ReportDesignHandle reportHandle = ( ReportDesignHandle ) report.getDesignHandle( );
ScalarParameterHandle parameterHandle = ( ScalarParameterHandle ) reportHandle.findParameter( scalar.getName() );
parameter.put("Default Value", parameterHandle.getDefaultValue());
parameter.put("Prompt Text", parameterHandle.getPromptText());
parameter.put("Data Set Expression", parameterHandle.getValueExpr());

if(scalar.getControlType() != IScalarParameterDefn.TEXT_BOX)
{
//retrieve selection list for cascaded parameter
if ( parameterHandle.getContainer( ) instanceof CascadingParameterGroupHandle ){
Collection sList = Collections.EMPTY_LIST;
if ( parameterHandle.getContainer( ) instanceof CascadingParameterGroupHandle )
{
int index = parameterHandle.getContainerSlotHandle( )
.findPosn( parameterHandle );
Object[] keyValue = new Object[index];
for ( int i = 0; i < index; i++ )
{
ScalarParameterHandle handle = (ScalarParameterHandle) ( (CascadingParameterGroupHandle) parameterHandle.getContainer( ) ).getParameters( )
.get( i );
//Use parameter default values
keyValue[i] = handle.getDefaultValue();
}
String groupName = parameterHandle.getContainer( ).getName( );
task.evaluateQuery( groupName );

sList = task.getSelectionListForCascadingGroup( groupName, keyValue );
HashMap<Object, String> dynamicList = new HashMap<Object, String>();


for ( Iterator sl = sList.iterator( ); sl.hasNext( ); )
{
IParameterSelectionChoice sI = (IParameterSelectionChoice) sl.next( );


Object value = sI.getValue( );
Object label = sI.getLabel( );
System.out.println( label + "--" + value);
dynamicList.put(value,(String) label);

}
parameter.put("Selection List", dynamicList);


}
}else{
//retrieve selection list
Collection selectionList = task.getSelectionList( scalar.getName() );

if ( selectionList != null )
{
HashMap<Object, String> dynamicList = new HashMap<Object, String>();

for ( Iterator sliter = selectionList.iterator( ); sliter.hasNext( ); )
{
IParameterSelectionChoice selectionItem = (IParameterSelectionChoice) sliter.next( );

Object value = selectionItem.getValue( );
String label = selectionItem.getLabel( );
//System.out.println( label + "--" + value);
dynamicList.put(value,label);

}
parameter.put("Selection List", dynamicList);
}
}

}


//Print out results
Iterator iter = parameter.keySet().iterator();
System.out.println("======================Parameter =" + scalar.getName());
while (iter.hasNext()) {
String name = (String) iter.next();
if( name.equals("Selection List")){
HashMap selList = (HashMap)parameter.get(name);
Iterator selIter = selList.keySet().iterator();
while (selIter.hasNext()) {
Object lbl = selIter.next();
System.out.println( "Selection List Entry ===== Key = " + lbl + " Value = " + selList.get(lbl));
}

}else{
System.out.println( name + " = " + parameter.get(name));
}
}
return parameter;
}

/**
* @param args
*/
public static void main(String[] args) {
try
{
executeReport( );
}
catch ( Exception e )
{
e.printStackTrace();
}
}

}
精通BIRT:Eclipse商务智能报表工具开发实践指南 书籍正有清华大学出版社编辑出版发行中,敬请期待,目录如下:  第一章 BIRT简介 5 1.1 BIRT初识 5 1.2 BIRT安装 8 1.2.1 BIRT设计器的安装 8 1.2.2 BIRT运行时环境的安装 9 第二章 BIRT设计器概述及本地化支持 12 2.1 BIRT设计器概述 12 2.1.1 基本概念 12 2.1.2 基本视图 13 2.2 BIRT本地化之 阅读详情

相关推荐

通过arcmap制作的第一张流域图

需要知道,识别河流依次需要填洼,流向,流量,栅格计算器,河流链接,河网分级.通过卫星图确定河流入口,在入口处画一个点,注意不要与其他河流相交。随后是进行对河流的筛选使用con函数,筛选流量大于100的河流。我们使用镶嵌工具-->镶嵌至新栅格 将两个数据合并。填洼后如图,随后进行流向的获得.使用流向工具。首先导入准备好的数据,可见两张图片并非一体。教程参考b站up:爱画地图的boney。惊醒栅格河网矢量化,进行河流分级。输入表面栅格数据,等待后如图。本次制作的是双峰县的流域图。输入流向数据,输出后如图。

pianmian1的博客 2227

Birt与MyEclipse的集成及Birt的安装部署问题

BIRT是一个Eclipse-based开放源代码报表系统。它主要是用在基于Java与J2EE的Web应用程序上。BIRT主要由两部分组成:一个是基于Eclipse的报表设计和一个可以加到你应用服务的运行期组件。BIRT同时也提供一个图形报表制作引擎。 BIRT拥有和Dreamweaver一般的操作界面,可以像画table一样画报表,也可以生成图片、导出Excel、html分页,样式比script

Hello World! 7851

Zotero搭配CNKI.js插件:一键批量下载知网文献的完整教程(附常见问题解决)

本文提供Zotero搭配CNKI.js插件实现知网文献批量下载的完整教程。详细介绍了从环境准备、插件安装到实战操作的全流程,并针对常见问题提供解决方案,旨在帮助科研人员高效构建自动化文献管理工作流,显著提升文献收集与整理效率。

e4f5g6h7的博客 1201

birt java api_BIRT使用API进行简单部署

在网上查了下BIRT的文章,不是很多。而且讲述的也不是十分全面。还是得自己琢磨啊。刚实验好,贴上来分享一下共同交流。希望也能帮助到对API部署还困惑的人。做这个纯粹是看官网上的例子,还有好多疑点,希望高手能给我解答下。首先,这个API部署其实在官网上是叫"Servlet Example"。我没有在网上找到中文的这个教程,所以我就以我这贫乏的英语水品来自己理解了官网上的步骤。下面直接开始,我不是原文...

weixin_28882149的博客 369

ROS中costmap_converter插件的配置与使用

在学习TEB算法的过程中,作者提供了一个插件用于转换代价地图,原始的代价地图是由栅格地图中单元格组成,用于表示障碍物,但单元格占用的计算资源较大,故采用插件将单元格转换成点,线,多边形表示。 插件激活 rospack plugins --attrib=plugin costmap_converter 配置cfg文件 在导航配置文件下,新建costmap_converter_params.yaml #######################################################

weixin_42621524的博客 5904

Cadence IC618与Spectre231安装:环境变量与License配置详解

在Linux系统中部署Virtuoso等EDA工具时,环境变量与License管理是决定工具能否顺利启动的核心环节。环境变量决定了系统如何找到工具二进制文件以及工具如何定位自身资源,而License则通过FlexLM授权机制控制工具的使用权限。理解PATH、CDS_ROOT、CDS_LIC_FILE等关键变量的作用,掌握lmgrd服务与lmstat验证方法,能显著减少安装后启动失败的概率。无论是学生初装Cadence IC618与Spectre231,还是实验室工作站需要搭建可用的模拟设计环境,理顺环境变量

weixin_29192365的博客 369

BIRT参数设置详解

在使用birt报表的时候感觉页面的 BIRT Report Viewer头标题没有用,想去掉在网上一查原来有详细的参数设置,看来birt的功能还是很强大啊。现在转帖如下:    BIRT作为一款功能强大的开源报表工具,其版本的升级更新速度也非常快,从1.0到2.0,一直到最新的2.2.1版本,无论从功能上还是性能上都得到了极大的提高和扩充。BIRT也提供了一个标准的J2EE实现组件,可以发布到支

知识积淀 6453

FFmpeg硬件加速实战:VAAPI驱动配置全攻略(含NVIDIA/Intel避坑指南)

本文详细解析了在Linux环境下配置FFmpeg使用VAAPI接口实现硬件加速的完整流程。针对NVIDIA、Intel等主流显卡,提供了从驱动安装、环境变量设置到多显卡切换的实战指南,并重点解决了闭源驱动冲突、国产系统适配等常见问题,帮助用户有效提升视频处理性能。

weixin_29306011的博客 454

十三、BIRT报表引擎API及报表API

13.1报表引擎详解,API结构 BIRT包含几个引擎。一个引擎是一个提供一个特定领域的功能的一套Java API。例如,数据引擎包含管理数据的API,图表引擎包含生成一个图表的API。一般而言,BIRT包含四个引擎,报表设计引擎(design Engine),报表引擎(report engine),图表引擎(chat engine),数据引擎(data engine)。 a) 关于报表设计引擎...

weixin_41961329的博客 2059

Robocopy 参数进阶:/MIR 镜像同步与 /PURGE 删除操作的风险规避指南

本文深入解析Robocopy的/MIR镜像同步与/PURGE删除操作的高级用法及风险规避策略。通过实际案例和四重防护机制,指导用户安全实现目录同步,避免数据丢失风险,特别适用于远程主机间的数据复制与备份场景。

weixin_33462927的博客 356

【YOLOv11改进 - 特征融合】SDI:多层次特征融合模块,替换contact操作

【YOLOv11改进 - 特征融合】SDI:多层次特征融合模块,替换contact操作

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 1771

birt家园里面看到的关于birt底层操作的原理

>>1. birt 与 ssh &动态生成参数页面 我现在要在已有的ssh项目中加入报表功能 大致包括上传报表,运行报表 基本思路是:上传时直接把文件内容存入数据库;运行时从数据库取出来,通过String获得inputStream提供给task运行。 主要代码片段: InputStream is=   new ByteArrayInputStream(bytes);// byte

Hello World! 3371

Windows Docker + RK3588 部署 YOLO26-Pose 人体姿态检测

YOLO26-Pose 在 RK3588 上的部署流程是 Windows Docker 容器内 ONNX 导出 → RKNN 转换(INT8 量化)→ ADB 推送 → 板端 C++ 推理。YOLO26n-Pose 在 640 输入下全链路约 55 FPS,可以覆盖实时姿态检测需求。先在板端用单张图片验证关键点输出正确性,确认 C++ 后处理的解析逻辑无误后,再切换到摄像头实时推理。

m0_64661770的博客 98

「Birt」BIRT Viewer 2.2 参数设置详解

1. Servlet模式说明 查看BIRT Viewer自带的web.xml文件,可以看到有以下几个pattern: frameset ---- 采用Ajax框架,可以显示工具条,导航条和TOC面板,实现复杂的操作,如分页处理,导出数据,导出报表,打印等等。该模式下会自动生成report document文件(预览report design文件)到特定的目录(用户可以用参数指定,也可以定义在w

FEEL 2100

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SpringBoot 集成 Birt

需求 BIRT 一般是可以通过单独部署一个Webviewer的工程来处理客户的report查看请求.但是有些需求可能是根据业务规则定制查询条件生成report,然后定期生成report放在数据库里,供客户查询或是report通过邮件发给客户。 目标 生成的report为PDF,存在硬盘上 report可以接收参数 report调用Javacode来获取数据集 Sample - car re...

guo_xl的专栏 5635

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

WEB程序和BIRT间的参数传递问题

、通过BIRT已有的传递方式,如通过frameset?paramlist……或run?paramlist……,这样的话,只需要把参数值写在URL中 2、你在设计报表的时候,可能已经设置了很多参数,报表的正确显示依赖于正确参数的传递,如果通过在WEB程序中将这些参数列出供用户输入,例如通过JSP页面提供用户输入的入口,然后将参数写在URL中传递进报表,这是可行的,但这种方法有缺点:如何原来报表

gengqkun的专栏 1912

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

十二、BIRT报表的部署与配置

12.1 报表的工作模式以及相应的部署和配置 虽然为了示例的需要,在前文的第二章讲过BIRT的配置,以及在文本类报表,网格报表,图表中用过birt jsp tag,也做过一些说明。但报表的工作模式,不仅仅包含这两种。实际上,BIRT有五种工作模式, 第一种是用jsp或者javascript访问url,这个url遵循特定的格式,例如url/frameset?__report=&a...

weixin_41961329的博客 2514

birt 报表去掉时间_BIRT 统计图中怎么根据参数实现 X 轴动态分组

报表工具一般擅长处理规则一致的数据,若条件不一致的动态运算在报表中是很难实现的。常见做法是先写段程序把数据源准备好,然后传给BIRT再去画图,而不是在BIRT中去直接处理这种数据并画图。 比如要处理这么个场景:统计图X轴以时间为刻度,根据传入不同参数条件显示不同值。统计1小时,每5分钟一条,要生成12条,期望结果:统计1天,每小时一条,要生成24条,期望结果:统计一周,每天一条,要生成7条,期望结...

weixin_33046983的博客 140

birt url含义

1.1 报表url说明 http://127.0.0.1:8080/WebViewerExample/frameset?__report=report/reportName.rptdesign说明如下: 1.        Servlet模式说明: Frameset ―― 采用Ajax框架,可以显示工具条,导航条和TOC面板,实现复杂的操作,如分页处理,导出数据,导出报表,打印等等。该模式下

birdCcc的专栏 1904

BIRT 如何用 rest api 接口获取 json 做报表

关键词导读:Json数据源 Rest API数据源 BIRT中不能构建JSON数据源,虽然一些开源社区提供了解析JSON数据源插件,但几乎所有插件都非常底层,并且使用起来很不方便,因此并不值得推荐。 BIRT的常规办法是创建一个“脚本数据源”,在该脚本源上连接到URL并自行解析结果,但脚本写起来非常麻烦,而且工作量很大。 比如要处理这么个场景:根据传入参数,调用REST API,返回嵌套的JSON数据,部分数据格式如下: [ { "id": 10...

chaochao52001的博客 408
上一篇: BIRT Design API 学习
下一篇: 简单批处理内部命令
danwind
博客等级 码龄19年 6粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值