`
Openhearted
  • 浏览: 29692 次
  • 性别: 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
分享到:
评论

相关推荐

    WPF程序中RDLC报表的使用及参数传递

    在VS2010的报表设计器中,可以创建报表参数,并在数据源查询中使用它们。在WPF应用中,通过`ReportViewer`的`SetParameters`方法,我们可以传入一个`ReportParameter`对象数组来设置这些参数的值。例如: ```csharp...

    如何使用离散值参数筛选水晶报表源程序实例,C#.net源代码编写,

    在开发基于C#.NET的应用程序时,我们常常需要与数据打交道,其中水晶报表(Crystal Reports)是一个常用的报表设计工具,能够帮助我们创建复杂的报表并进行数据筛选。本实例将介绍如何在C#.NET环境中,利用离散值...

    abap报表程序事例,学习报表

    在ABAP(Advanced Business Application Programming)中,报表程序是用于生成和展示数据的重要工具,尤其在SAP系统中,它们是数据分析和业务处理的核心部分。本篇将通过两个简单的报表程序示例,深入探讨ABAP报表的...

    C#写的报表程序.zip

    在报表程序中,C#用于编写后台逻辑,处理数据查询、计算和报表生成。 2. **ASP.NET平台**: ASP.NET是.NET框架的一部分,提供了一整套用于构建Web应用程序的工具和服务。它可以使用Web Forms、MVC或Blazor等不同的...

    水晶报表例子程序源代码

    通过学习和分析这个源代码,开发者可以了解如何在实际项目中集成水晶报表,处理数据,以及创建交互式的参数化报表,提升报表设计和数据展现的能力。同时,这也是一个很好的实践案例,可以帮助理解ASP.NET Web应用...

    创建动态报表子程序创建动态报表子程序

    根据提供的标题、描述、标签及部分内容,我们可以了解到这段内容主要涉及的是如何创建一个动态报表子程序。虽然描述部分出现了重复,但可以明确看出是关于创建动态报表子程序的主题。接下来,我们将深入分析并总结出...

    制作报表程序

    通过这个“制作报表程序”的实践,你会对Delphi的控件使用有更深入的理解,掌握报表设计、数据处理、用户交互等多个方面的技能。不断学习和实践,你将能够开发出功能强大、界面友好的报表应用,满足各种业务需求。

    labview 报表程序

    在“labview 报表程序”这个主题中,我们将深入探讨如何使用LabVIEW来创建标准的报表,这些报表可以是Excel、Word或HTML格式。这涉及到LabVIEW的文件I/O操作、数据处理以及与外部应用程序接口(API)的交互。 1. **...

    如何使用时间段参数筛选水晶报表源程序实例,C#.net源代码编写

    - 在报表设计界面,右键单击报表,选择“报表参数”菜单,创建两个参数,分别表示开始时间和结束时间,类型设置为日期/时间。 3. **设置查询条件**: - 在报表数据源的SQL查询或存储过程中,添加参数化条件,例如...

    自定义报表程序源代码

    本资源提供的"自定义报表程序源代码"是一个学习工具,可以帮助开发者深入了解报表生成的底层逻辑,增强数据分析处理能力。 1. 报表系统基础: 自定义报表系统通常包括数据获取、数据处理、报表设计、展示和交互等...

    Birt报表工具使用说明

    - **报表参数**:添加新的参数并绑定到数据集的参数。 - **数据排序、分组、过滤和高亮显示**:设置报表数据的排序方式、分组逻辑、过滤条件以及特定列的格式化显示。 - **预览和打印**:在开发环境中点击Preview...

    如何使用命令方式创建水晶报表源程序实例,C#.net源代码编写,

    这个过程涉及到C#编程、水晶报表API的使用、数据绑定以及命令行参数处理等多个技术层面,是提升开发效率和灵活性的有效途径。记得在实际操作时,根据具体的业务需求调整和优化代码,确保程序的稳定性和性能。

    c# winform实例 锐浪报表动态传值创建明细表格 demo

    在控件的代码-behind文件中,我们需要初始化报表引擎,加载报表模板,然后动态设置报表参数,最后将报表呈现到GridControl上。 以下是一个基本的步骤概述: 1. **初始化报表引擎**: ```csharp var reportEngine...

    水晶报表安装程序有帮助文件

    6. **参数化报表**:允许用户在运行时输入参数,以动态过滤和展示数据。 7. **导出与打印**:支持多种格式的导出,如PDF、Excel、HTML等,便于分享和打印。 8. **交互性**:报表可设置交互式元素,如超链接、按钮,...

    iReport-中父报表给子报表传参数.docx

    2. **父报表传参数给子报表**:要实现这一点,首先需要确保父报表中有查询出与子报表参数对应的字段。这个字段不一定需要与报表参数名称相同,但必须确保数据的一致性和准确性。 #### 三、配置父报表与子报表之间的...

    如何构建Birt报表应用程序

    构建Birt报表应用程序涉及到多个步骤和技术要点,这里将详细解释Birt报表引擎的基本概念、安装过程以及初步使用方法。 Birt全称为Business Intelligence and Reporting Tools,是一个由Eclipse基金会维护的开源报表...

    统计报表程序设计思路文档

    1. **表报样式的动态调整**:设计时应采用模块化、参数化的方法,使得样式调整只需改动部分配置,而非重构整个报表。 2. **统计规则的适应性**:建立规则引擎,将统计逻辑与报表呈现分离,便于规则的独立更新与管理...

    如何使用水晶报表向导创建报表源程序实例,C#.net源代码编写,

    本实例将详细讲解如何使用水晶报表向导在Visual Studio .NET环境下创建报表源程序,以及相关的C#.NET源代码编写技巧。 首先,我们需要了解水晶报表向导的基本步骤: 1. **创建新项目**:在Visual Studio中,选择...

    MASTERCAM9.1加工报表

    加工报表是编程和生产过程中的一个重要环节,它能够详细记录和展示整个数控加工过程中的各种参数和设定,帮助用户进行精确的工艺规划、优化刀具路径并确保加工精度。 在MasterCAM 9.1中,用户可以根据具体需求设置...

    实时报表程序代码,很经典的啊

    4. 用户界面:用户界面设计应简洁易用,允许用户自定义报表参数,如时间范围、筛选条件等。React、Vue.js等前端框架可以用于构建交互式的Web界面。 5. 性能优化:由于实时报表需要频繁地访问数据库和处理大量数据,...

Global site tag (gtag.js) - Google Analytics