報表參數的獲取與配置詳解
報表是有參數的,通過報表參數可以使用程序進行獲取和配置。參數是報表生成之前想報表設計文件輸入的報表元素。報表的應用程序可以訪問報表的參數的屬性,最常用的屬性是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包含了已經設置的所有參數。
報表參數設置實例
下面的代碼展示了如何設置一個已知參數名的參數值:
- // 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( );
- // 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將字符串轉化成用戶接口接受的參數格式。
- // 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( );
- // 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[ ]中放的是前面獲取的參數值。
下面的代碼展示了如何通過查詢實現級聯參數:
- // Create a grouped collection of the design’s parameters.
- Collection params = task.getParameterDefns( true );
- // Iterate through the parameters to find the cascading group.
- Iterator iter = params.iterator( );
- while ( iter.hasNext( ) ) {
- IParameterDefnBase param = (IParameterDefnBase) iter.next();
- if ( param.getParameterType() ==
- IParameterDefnBase.CASCADING_PARAMETER_GROUP ) {
- ICascadingParameterGroup group = (ICascadingParameterGroup) param;
- Iterator i2 = group.getContents( ).iterator( );
- // Run the query for the cascading parameters.
- task.evaluateQuery( group.getName() );
- Object[ ] userValues = new Object[group.getContents( ).size( )];
- // Get the report parameters in the cascading group.
- int i = 0;
- while ( i2.hasNext( ) ) {
- IScalarParameterDefn member = (IScalarParameterDefn) i2.next( );
- // Get the values for the parameter.
- Object[ ] setValues = new Object[i];
- if ( i > 0 ) System.arraycopy( userValues, 0, setValues, 0, i );
- Collection c = task.getSelectionListForCascadingGroup(
- group.getName(),setValues );
- // Iterate through the values for the parameter.
- Iterator i3 = c.iterator();
- while ( i3.hasNext( ) ) {
- IParameterSelectionChoice s =
- ( IParameterSelectionChoice ) i3.next( );
- String choiceValue = s.getValue( );
- String choiceLabel = s.getLabel( );
- }
- // Get the value for the parameter from the list of
- // choices. This example does not provide the code for
- // this task.
- userValues[i] = inputChoiceValue;
- i++;
- }
- }
- }
以上就是用程序處理報表參數的配置方法。
【編輯推薦】