`
Openhearted
  • 浏览: 29098 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

用程序处理报表参数

    博客分类:
  • Java
阅读更多

参数是报表生成之前想报表设计文件输入的报表元素。报表的应用程序可以访问报表的参数的属性,最常用的属性是name和value,你可以使用参数名或通用编码来获取参数。

为报表设计创建一个参数定义任务
一个IGetParameterDefinitionTask对象提供链接到报表设计所有参数的接口。通过调用 ReportEngine.createGetParameterDefinitionTask( )创建一个参数定义对象,使用结束后调用他的close方法关闭。

测试报表设计是否有参数
IGetParameterDefinitionTask.getParameterDefns( )可以测试报表设计是否有参数,它返回一个参数集合,调用集合的isEmpty( )方法可以测试集合中是否有元素。

获取报表设计的参数
通过IGetParameterDefinitionTask.getParameterDefn( )方法获取一个已知名字的参数,它返回一个IParameterDefnBase类型对象,也可以调用getParameterDefns( )方法返回一个参数集合。
getParameterDefns( )需要一个boolean参数,如果为false返回一个未分组的参数集合,如果为true返回报表设计中定义的参数组。
调用IParameterDefnBase.getParameterType( )可以检验参数是否是一个组。如果是一个组则返回IParameterDefnBase.PARAMETER_GROUP,如果是一个级联参数组则返回 IParameterDefnBase.CASCADING_PARAMETER_GROUP。为获取一组报表参数,使用方法 IParameterGroupDefn.getContents( ),它返回一个数据类型是IScalarParameterDefn的ArrayList对象。

获取报表参数的默认值
这个任务是可选的。调用IGetParameterDefinitionTask.getDefaultValue( )获取一个已知参数的默认值,它返回的是一个Object。可以通过调用IScalarParameterDefn.getDataType( )来获取Object的有效类型,它返回一个IScalarParameterDefn定义的int类型的静态变量。调用 IGetParameterDefinitionTask.getDefaultValues( )来获取报表设计的所有参数的默认值,它返回一个HashMap对象存储了从参数名到默认值的映射。

使用常量列表提供的效值
许多报表参数只接受常量列表的值,这些值可能是静态常量,也可能是数据库里查出来的数据list。使用 IGetParameterDefinitionTask.getSelectionList( )可以返回参数所能接受的参数(IParameterSelectionChoice)的集合,如果集合为null,则可以接受任何值。 IParameterSelectionChoice的getLabel( )方法返回现实的文本,getValue( )返回值。

获取每个报表参数的属性
这个任务是可选的。使用IScalarParameterDefn的方法可以获取表参数的属性。应用程序使用属性生成用户自定义接口。例如,获取参数的数据类型使用getDataType( )方法。

为参数设置值
调用IGetParameterDefinitionTask.setParameterValue( )为参数设置值。如果你是通过应用程为日期数值等参数返回一个字符串,要把他们转化成和本地无关的格式。调用方法 ReportParameterConverter.parse( )方法可以完成这项工作。getParameterValues( )方法返回一个HashMap包含了已经设置的所有参数。

实例
下面的代码展示了如何设置一个已知参数名的参数值:

Java代码
  1. // Create a parameter definition task.  
  2. IGetParameterDefinitionTask task = engine.createGetParameterDefinitionTask( runnable );  
  3. // Instantiate a scalar parameter.  
  4. IScalarParameterDefn param = (IScalarParameterDefn)   
  5. task.getParameterDefn( "customerID" );  
  6. // Get the default value of the parameter. In this case,   
  7. // the data type of the parameter, customerID, is Double.  
  8. int customerID = ((Double) task.getDefaultValue( param )).intValue( );  
  9. // Get a value for the parameter. This example assumes that   
  10. // this step creates a correctly typed object, inputValue.  
  11. // Set the value of the parameter.  
  12. task.setParameterValue( "customerID", inputValue );  
  13. // Get the values set by the application for all parameters.  
  14. HashMap parameterValues = task.getParameterValues( );  
  15. // Close the parameter definition task.  
  16. task.close( );  
// Create a parameter definition task.
IGetParameterDefinitionTask task = engine.createGetParameterDefinitionTask( runnable );
// Instantiate a scalar parameter.
IScalarParameterDefn param = (IScalarParameterDefn) 
task.getParameterDefn( "customerID" );
// Get the default value of the parameter. In this case, 
// the data type of the parameter, customerID, is Double.
int customerID = ((Double) task.getDefaultValue( param )).intValue( );
// Get a value for the parameter. This example assumes that 
// this step creates a correctly typed object, inputValue.
// Set the value of the parameter.
task.setParameterValue( "customerID", inputValue );
// Get the values set by the application for all parameters.
HashMap parameterValues = task.getParameterValues( );
// Close the parameter definition task.
task.close( );




下面的代码展示了如何使用报表参数集合,例子中使用ReportParameterConverter将字符串转化成用户接口接受的参数格式。

Java代码
  1. // Create a parameter definition task.  
  2. IGetParameterDefinitionTask task = engine.createGetParameterDefinitionTask( runnable );  
  3. // Create a collection of the parameters in the report design.  
  4. Collection params = task.getParameterDefns( false );  
  5. // Get the default values of the parameters.  
  6. HashMap parameterValues = task.getDefaultValues( );  
  7. // Get values for the parameters. Later code in this example  
  8. // assumes that this step creates a HashMap object,  
  9. // inputValues. The keys in the HashMap are the parameter  
  10. // names and the values are those that the user provided.  
  11. // Iterate through the report parameters, setting the values   
  12. // in standard locale-independent format.  
  13. Iterator iterOuter = params.iterator( );  
  14. ReportParameterConverter cfgConverter =  
  15.         new ReportParameterConverter( "", Locale.getDefault() );  
  16. while ( iterOuter.hasNext( ) ) {  
  17. IParameterDefnBase param = (IParameterDefnBase) iterOuter.next( );  
  18. String value = (String) inputValues.get( param.getName( ));  
  19. if ( value != null ) {  
  20. parameterValues.put( param.getName( ),   
  21. cfgConverter.parse( value, param.getDataType( ) ) );  
  22. }  
  23. }  
  24. // Close the parameter definition task.  
  25. task.close( );  
// Create a parameter definition task.
IGetParameterDefinitionTask task = engine.createGetParameterDefinitionTask( runnable );
// Create a collection of the parameters in the report design.
Collection params = task.getParameterDefns( false );
// Get the default values of the parameters.
HashMap parameterValues = task.getDefaultValues( );
// Get values for the parameters. Later code in this example
// assumes that this step creates a HashMap object,
// inputValues. The keys in the HashMap are the parameter
// names and the values are those that the user provided.
// Iterate through the report parameters, setting the values 
// in standard locale-independent format.
Iterator iterOuter = params.iterator( );
ReportParameterConverter cfgConverter =
        new ReportParameterConverter( "", Locale.getDefault() );
while ( iterOuter.hasNext( ) ) {
IParameterDefnBase param = (IParameterDefnBase) iterOuter.next( );
String value = (String) inputValues.get( param.getName( ));
if ( value != null ) {
parameterValues.put( param.getName( ), 
cfgConverter.parse( value, param.getDataType( ) ) );
}
}
// Close the parameter definition task.
task.close( );



使用级联参数
级联参数参数是一组可供用户选择的参数值的集合。第一个参数的选择会影响到第二个参数中的值。参数使用一个或多个查询来从数据集把数据展示给用户。参数定义任务根据前面的选择以行为单位过滤参数组中的数据。
使用报表引擎实现级联参数,要进行如下工作:
■使用IGetParameterDefinitionTask.evaluateQuery( )方法为级联参数准备数据,它需要参数group的名字作为参数。
■调用IGetParameterDefinitionTask.getSelectionListForCascadingGroup( )获取参数组的第一个参数的值,它需要两个参数,参数名和对象数组,对第一个参数来说这个数组是空的。该方法返回一个 IParameterSelectionChoice集合。
■ 再次调用getSelectionListForCascadingGroup( )方法获取后面的参数,这次Object[ ]中放的是前面获取的参数值。

下面的代码展示了如何通过查询实现级联参数:

Java代码
  1. // Create a grouped collection of the design’s parameters.  
  2. Collection params = task.getParameterDefns( true );  
  3. // Iterate through the parameters to find the cascading group.  
  4. Iterator iter = params.iterator( );  
  5. while ( iter.hasNext( ) ) {  
  6. IParameterDefnBase param = (IParameterDefnBase) iter.next();  
  7. if ( param.getParameterType() ==   
  8. IParameterDefnBase.CASCADING_PARAMETER_GROUP ) {  
  9. ICascadingParameterGroup group = (ICascadingParameterGroup) param;  
  10. Iterator i2 = group.getContents( ).iterator( );  
  11. // Run the query for the cascading parameters.  
  12. task.evaluateQuery( group.getName() );  
  13. Object[ ] userValues = new Object[group.getContents( ).size( )];  
  14. // Get the report parameters in the cascading group.  
  15. int i = 0;  
  16. while ( i2.hasNext( ) ) {  
  17. IScalarParameterDefn member = (IScalarParameterDefn) i2.next( );  
  18. // Get the values for the parameter.  
  19. Object[ ] setValues = new Object[i];  
  20. if ( i > 0 )  System.arraycopy( userValues, 0, setValues, 0, i );  
  21. Collection c = task.getSelectionListForCascadingGroup(  
  22.    group.getName(),setValues );  
  23. // Iterate through the values for the parameter.  
  24. Iterator i3 = c.iterator();  
  25. while ( i3.hasNext( ) ) {  
  26. IParameterSelectionChoice s =   
  27. ( IParameterSelectionChoice ) i3.next( );  
  28. String choiceValue = s.getValue( );  
  29. String choiceLabel = s.getLabel( );  
  30. }  
  31. // Get the value for the parameter from the list of  
  32. // choices. This example does not provide the code for  
  33. // this task.  
  34. userValues[i] = inputChoiceValue;  
  35. i++;  
  36. }  
  37. }  
  38. }  

本文地址:http://birt.group.iteye.com/group/topic/11308

0
0
分享到:
评论

相关推荐

    PCS7 WINCC报表1.不需要第三方任何插件实现 2.采用数据库方式实现快速生成WINCC报表 3.提供脚本源码程序

    提供脚本源码程序,方便自定义和修改报表生成的逻辑。 报表生成的结果可以灵活地导出为可移植的格式,例如EXCEL文件。 这段话涉及到的知识点和领域范围是: PCS7:PCS7是西门子公司的一种过程控制系统,用于工业...

    Report多形式报表源码

    多形式报表源码 ... 同时,提供丰富的内建函数,包括文本函数、日期和时间函数、数学函数、检查函数、程序流函数、类型转换函数、聚合函数及各种特殊处理函数(如金额大写)等。 9.界面美观、大方。

    scr.Report 多形式报表源码

    scr.Report控件(广源报表控件)实现... 同时,提供丰富的内建函数,包括文本函数、日期和时间函数、数学函数、检查函数、程序流函数、类型转换函数、聚合函数及各种特殊处理函数(如金额大写)等。 9.界面美观、大方。

    多形式报表源码

    多形式报表源码 ...同时,提供丰富的内建函数,包括文本函数、日期和时间函数、数学函数、检查函数、程序流函数、类型转换函数、聚合函数及各种特殊处理函数(如金额大写)等。 9.界面美观、大方。

    报表源码V2.0DotNet(C#,VB)

    此源码包括CSharp、VB.net报表代码... 同时,提供丰富的内建函数,包括文本函数、日期和时间函数、数学函数、检查函数、程序流函数、类型转换函数、聚合函数及各种特殊处理函数(如金额大写)等。 9.界面美观、大方。

    Birt入门使用说明及详细资料

    A、报表参数  新加参数  参数邦定 B、数据排序分组过滤高亮显示  排序  分组  过滤  格式化指定的列显示 C、预览打印报表  在开发环境下点击preview即可。  在tomcat的环境下  集成的自己的运用...

    chef-handler-updated-resources:更新资源的简单报表处理程序

    厨师处理程序更新资源Chef报表处理程序,以显示Chef Run中更新的资源。安装该报告处理程序应安装在Chef使用的Ruby环境中。 这可以通过/opt/chef/embedded/bin/gem或c:\opscode\embedded\bin\gem 。 或者,可以使用...

    污水处理系统自控系统设计

    本文只介绍组态软件的开发部分:按照污水处理流程开发了污水处理设备的监控画面,建立了设备控制操作画面、设备状态监视画面、水质参数的实时曲线.开发了用于报警监控的报警界面完成了系统实时报警功能,实现了全厂...

    程序文件生产过程控制程序.docx

    交货准时率 生产计划达成率 物料报废率 交货准时率 生产计划达成率 物料报废率 用何指标衡量用何程序、方法 生产计划控制程序 生产过程控制程序 用何指标衡量 用何程序、方法 生产计划控制程序 生产过程控制程序 ...

    Excel报表服务器

    通过设置字段,参数等信息来设计报表。 BI智能报表,支持透视表。 提供存储过程接口,便于用户二次开发。 有用户管理,报表权限的管理。 支持多语种。 软件环境: 客户端: Windows 2000及以上版本 服务器端:...

    基于气压计法的矿井通风阻力测定数据处理系统的程序设计

    综合应用了矿井通风阻力测定技术与理论以及vb.net中数据录入、Excel Application对象、COM自动化等技术,实现了包含自然风压计算和误差统计在内矿井通风阻力测定数据的自动处理以及Excel报表的自动化,为矿井通风设计...

    Visual C++ 数据库系统开发完全手册.part1

    21.6.4 学生成绩报表程序设计 21.7 疑难问题分析解决 21.7.1 导入Excel相关类 21.7.2 在程序中操作Excel 21.7.3 导入Word相关类 21.7.4 在程序中操作Word 21.8 系统测试 21.9 程序设计清单 21.10 技术、经验总结 ...

    污水处理系统自控系统设计.doc

    本文只介绍组态软件的开发部分:按照污水处理流程开发了污水处理设备的监控画面,建立了设备控制操作画面、设备状态监视画面、水质参数的实时曲线.开发了用于报警监控的报警界面完成了系统实时报警功能,实现了全厂...

    Wincc和西门子PLC大型程序 包括西门子300PLC程序,Wincc界面程序 写法经典,结构清晰,真实甲醛生产项目 模拟量

    模拟量AI处理程序,报表,配方,模拟量报警,数字量报警 流量累加清零程序 根据PH值调节起停泵程序及参数设定画面 根据时间循环启停电机程序(时间可画面设定,启动时间停止时间可不一致) 根据温度调节蒸汽阀门开闭...

    多形式报表源码 Gscr.Report控件

    多形式报表源码 ... 同时,提供丰富的内建函数,包括文本函数、日期和时间函数、数学函数、检查函数、程序流函数、类型转换函数、聚合函数及各种特殊处理函数(如金额大写)等。 9.界面美观、大方。

    ABAP中文幫助文檔

    如果报表程序直接读取数据,而未使用逻辑数据库(关于此主题的详细信息,参见《用逻辑数据库访问数据库表》),则应该象通常一样指定应用程序,但将“逻辑数据库”字段置空。  选择屏幕版本(仅报表程序):如果没有...

    程序文件生产过程控制程序(1).docx

    交货准时率 生产计划达成率 物料报废率 交货准时率 生产计划达成率 物料报废率 用何指标衡量用何程序、方法 生产计划控制程序 生产过程控制程序 用何指标衡量 用何程序、方法 生产计划控制程序 生产过程控制程序 ...

    计算机专业毕业设计-微信小程序案例-微信小程序的高校餐厅食品留样管理系统-毕设源码+说明文档.rar

    前端使用WXML、WXSS、JavaScript等技术进行页面布局和逻辑处理;后端使用Node.js、MySQL数据库等技术进行数据处理和存储。 **四、二次开发定制** 本系统源码结构清晰,注释详细,便于二次开发定制。开发者可以根据...

    Fastreport手册

    运行时使用代码手工合成报表 76 打印可变栏数或未知栏数的报表 77 打印可变栏数和栏宽可变的报表 78 最终用户特性 80 介绍 81 对话框 81 对话框窗体控件 82 Label 83 Edit 83 Memo 84 Button 84 CheckBox 85 ...

Global site tag (gtag.js) - Google Analytics