|
Report Application Server .NET SDK Developer Guide
|
|
To create and add a new filter
|
|
See Also
|
New filters are created as a CrystalDecisions.ReportAppServer.DataDefModel.Filter object and added to a report with a new record, saved data, or group selection formula. There are two main ways to set the filter formula:
- Use the Filter.FreeEditingText property.
This property accepts a string value for the formula.
- Use the Filter.FilterItems property.
This property accepts a FilterItems collection containing FieldRangeFilterItem and OperatorFilterItem objects that represent the individual expressions and operators of a selection formula. The FilterItems collection is the most flexible way to select and change the fields, values, and operators in a formula.
The CrystalDecisions.ReportAppServer.Controllers.FilterController.Modify method is used to apply the new filter.
In this example, you create a new filter that selects all customer records in a particular region and country. The record selection formula represented by the filter is {Customer.Region} = "CA" AND {Customer.Country} = "USA" and is created using a FilterItems collection.
- Retrieve the DatabaseController object.
|
Visual Basic
|
|
|
Dim databaseController As DatabaseController = rcd.DatabaseController
|
|
C#
|
|
|
DatabaseController databaseController = rcd.DatabaseController;
|
- Find the database fields to filter on.
This example assumes that the report has a table called Customer that contains Region and Country fields. However, you can iterate through all database fields in the report, display them to a user through a UI, and allow the user to select the fields to filter on.
|
Visual Basic
|
|
|
Dim tables As Tables = databaseController.Database.Tables Dim customerTable As Table = DirectCast(tables.FindTableByAlias("Customer"), Table) Dim fields As Fields = customerTable.DataFields Dim regionField As Field = DirectCast(fields.FindField("{Customer.Region}", CrFieldDisplayNameTypeEnum.crFieldDisplayNameFormula, CeLocale.ceLocaleEnglishUS), Field) Dim countryField As Field = DirectCast(fields.FindField("{Customer.Country}", CrFieldDisplayNameTypeEnum.crFieldDisplayNameFormula, CeLocale.ceLocaleEnglishUS), Field)
|
|
C#
|
|
|
Tables tables = databaseController.Database.Tables; Table customerTable = (Table)tables.FindTableByAlias("Customer"); Fields fields = customerTable.DataFields; Field regionField = (Field)fields.FindField("{Customer.Region}", CrFieldDisplayNameTypeEnum.crFieldDisplayNameFormula, CeLocale.ceLocaleEnglishUS); Field countryField = (Field)fields.FindField("{Customer.Country}", CrFieldDisplayNameTypeEnum.crFieldDisplayNameFormula, CeLocale.ceLocaleEnglishUS);
|
- Create a new FieldRangeFilterItem object that represents the primitive expression for filtering by customer region.
The filter expression to assemble is {Customer.Region} = "CA".
- Instantiate the new FieldRangeFilterItem object.
|
Visual Basic
|
|
|
Dim regionFieldFilterItem As FieldRangeFilterItem = New FieldRangeFilterItemClass()
|
|
C#
|
|
|
FieldRangeFilterItem regionFieldFilterItem = new FieldRangeFilterItemClass();
|
- Use the RangeField property to set the database field representing customer region as the field to filter on.
|
Visual Basic
|
|
|
regionFieldFilterItem.RangeField = regionField
|
|
C#
|
|
|
regionFieldFilterItem.RangeField = regionField;
|
- Use the Operation property to set an equality operator between the field and value of the expression.
|
Visual Basic
|
|
|
regionFieldFilterItem.Operation = CrSelectionOperationEnum.crSelectionOperationEqual
|
|
C#
|
|
|
regionFieldFilterItem.Operation = CrSelectionOperationEnum.crSelectionOperationEqual;
|
- Create a new Values collection, and add a constant value representing the country to filter on.
|
Visual Basic
|
|
|
Dim regionValues As Values = New ValuesClass() Dim regionValue As New ConstantValue() regionValue.Value = "CA" regionValues.Add(regionValue)
|
|
C#
|
|
|
Values regionValues = new ValuesClass(); ConstantValue regionValue = new ConstantValueClass(); regionValue.Value = "CA"; regionValues.Add(regionValue);
|
- Use the Values property to set the value of the region to filter on.
|
Visual Basic
|
|
|
regionFieldFilterItem.Values = regionValues
|
|
C#
|
|
|
regionFieldFilterItem.Values = regionValues;
|
- Create a new FieldRangeFilterItem object that represents the primitive expression for filtering by customer country.
The filter expression to assemble is {Customer.Country} = "USA".
|
Visual Basic
|
|
|
Dim countryFieldFilterItem As FieldRangeFilterItem = New FieldRangeFilterItemClass() countryFieldFilterItem.RangeField = countryField countryFieldFilterItem.Operation = CrSelectionOperationEnum.crSelectionOperationEqual Dim countryValues As Values = New ValuesClass() Dim countryValue As New ConstantValue() countryValue.Value = "USA" countryValues.Add(countryValue) countryFieldFilterItem.Values = countryValues
|
|
C#
|
|
|
FieldRangeFilterItem countryFieldFilterItem = new FieldRangeFilterItemClass(); countryFieldFilterItem.RangeField = countryField; countryFieldFilterItem.Operation = CrSelectionOperationEnum.crSelectionOperationEqual; Values countryValues = new ValuesClass(); ConstantValue countryValue = new ConstantValueClass(); countryValue.Value = "USA"; countryValues.Add(countryValue); countryFieldFilterItem.Values = countryValues;
|
- Create a new OperatorFilterItem object that represents an "AND" operator between the region and country field filters.
|
Visual Basic
|
|
|
Dim operatorFilterItem As OperatorFilterItem = New OperatorFilterItemClass() OperatorFilterItem.Operator = "AND"
|
|
C#
|
|
|
OperatorFilterItem operatorFilterItem = new OperatorFilterItemClass(); operatorFilterItem.Operator = "AND";
|
- Create a new FilterItems collection and add the FieldRangeItem and OperatorFilterItem objects in the correct order to represent the desired record selection formula.
The position of items in the FilterItems collection represents the order of operations in the formula. Therefore, you must add the region filter expression first, followed by the "AND" operator, and finally the country filter expression.
|
Visual Basic
|
|
|
Dim filterItems As FilterItems = New FilterItemsClass() FilterItems.Add(regionFieldFilterItem) FilterItems.Add(operatorFilterItem) FilterItems.Add(countryFieldFilterItem)
|
|
C#
|
|
|
FilterItems filterItems = new FilterItemsClass(); filterItems.Add(regionFieldFilterItem); filterItems.Add(operatorFilterItem); filterItems.Add(countryFieldFilterItem);
|
- Create a new Filter object to represent the record filter.
|
Visual Basic
|
|
|
Dim newRecordFilter As Filter = New FilterClass() newRecordFilter.Name = "Region and Country record selection filter"
|
|
C#
|
|
|
Filter newRecordFilter = new FilterClass(); newRecordFilter.Name = "Region and Country record selection filter"
|
- Use the FilterItems property to set the newly created FilterItems object to the filter.
|
Visual Basic
|
|
|
newRecordFilter.FilterItems = filterItems
|
|
C#
|
|
|
newRecordFilter.FilterItems = filterItems;
|
- Retrieve the DataDefController object.
|
Visual Basic
|
|
|
Dim dataDefController As DataDefController = rcd.DataDefController
|
|
C#
|
|
|
DataDefController dataDefController = rcd.DataDefController;
|
- Retrieve the FilterController object representing record selection.
|
Visual Basic
|
|
|
Dim recordFilterController As FilterController = dataDefController.RecordFilterController
|
|
C#
|
|
|
FilterController recordFilterController = dataDefController.RecordFilterController;
|
- Call the Modify method to apply the newly created record filter to the report.
|
Visual Basic
|
|
|
recordFilterController.Modify(newRecordFilter)
|
|
C#
|
|
|
recordFilterController.Modify(newRecordFilter);
|
The following code creates a new filter that selects all customer records in a particular region and country, and applies the filter to the report. The record selection formula represented by the filter is {Customer.Region} = "CA" AND {Customer.Country} = "USA"
|
Visual Basic
|
|
|
Private Sub CreateNewRecordFilter(ByVal rcd As ISCDReportClientDocument) Dim databaseController As DatabaseController = rcd.DatabaseController Dim tables As Tables = databaseController.Database.Tables Dim customerTable As Table = DirectCast(tables.FindTableByAlias("Customer"), Table) Dim fields As Fields = customerTable.DataFields Dim regionField As Field = DirectCast(fields.FindField("{Customer.Region}", CrFieldDisplayNameTypeEnum.crFieldDisplayNameFormula, CeLocale.ceLocaleEnglishUS), Field) Dim countryField As Field = DirectCast(fields.FindField("{Customer.Country}", CrFieldDisplayNameTypeEnum.crFieldDisplayNameFormula, CeLocale.ceLocaleEnglishUS), Field) Dim regionFieldFilterItem As FieldRangeFilterItem = New FieldRangeFilterItemClass() regionFieldFilterItem.RangeField = regionField regionFieldFilterItem.Operation = CrSelectionOperationEnum.crSelectionOperationEqual Dim regionValues As Values = New ValuesClass() Dim regionValue As New ConstantValue() regionValue.Value = "CA" regionValues.Add(regionValue) regionFieldFilterItem.Values = regionValues Dim countryFieldFilterItem As FieldRangeFilterItem = New FieldRangeFilterItemClass() countryFieldFilterItem.RangeField = countryField countryFieldFilterItem.Operation = CrSelectionOperationEnum.crSelectionOperationEqual Dim countryValues As Values = New ValuesClass() Dim countryValue As New ConstantValue() countryValue.Value = "USA" countryValues.Add(countryValue) countryFieldFilterItem.Values = countryValues Dim operatorFilterItem As New OperatorFilterItem() operatorFilterItem.[Operator] = "AND" Dim filterItems As FilterItems = New FilterItemsClass() filterItems.Add(regionFieldFilterItem) filterItems.Add(operatorFilterItem) filterItems.Add(countryFieldFilterItem) Dim newRecordFilter As Filter = New FilterClass() newRecordFilter.Name = "Region and Country record selection filter" newRecordFilter.FilterItems = filterItems Dim dataDefController As DataDefController = rcd.DataDefController Dim recordFilterController As FilterController = dataDefController.RecordFilterController recordFilterController.Modify(newRecordFilter) End Sub
|
|
C#
|
|
|
private void CreateNewRecordFilter(ISCDReportClientDocument rcd) { DatabaseController databaseController = rcd.DatabaseController; Tables tables = databaseController.Database.Tables; Table customerTable = (Table)tables.FindTableByAlias("Customer"); Fields fields = customerTable.DataFields; Field regionField = (Field)fields.FindField("{Customer.Region}", CrFieldDisplayNameTypeEnum.crFieldDisplayNameFormula, CeLocale.ceLocaleEnglishUS); Field countryField = (Field)fields.FindField("{Customer.Country}", CrFieldDisplayNameTypeEnum.crFieldDisplayNameFormula, CeLocale.ceLocaleEnglishUS); FieldRangeFilterItem regionFieldFilterItem = new FieldRangeFilterItemClass(); regionFieldFilterItem.RangeField = regionField; regionFieldFilterItem.Operation = CrSelectionOperationEnum.crSelectionOperationEqual; Values regionValues = new ValuesClass(); ConstantValue regionValue = new ConstantValue(); regionValue.Value = "CA"; regionValues.Add(regionValue); regionFieldFilterItem.Values = regionValues; FieldRangeFilterItem countryFieldFilterItem = new FieldRangeFilterItemClass(); countryFieldFilterItem.RangeField = countryField; countryFieldFilterItem.Operation = CrSelectionOperationEnum.crSelectionOperationEqual; Values countryValues = new ValuesClass(); ConstantValue countryValue = new ConstantValue(); countryValue.Value = "USA"; countryValues.Add(countryValue); countryFieldFilterItem.Values = countryValues; OperatorFilterItem operatorFilterItem = new OperatorFilterItem(); operatorFilterItem.Operator = "AND"; FilterItems filterItems = new FilterItemsClass(); filterItems.Add(regionFieldFilterItem); filterItems.Add(operatorFilterItem); filterItems.Add(countryFieldFilterItem); Filter newRecordFilter = new FilterClass(); newRecordFilter.Name = "Region and Country record selection filter"; newRecordFilter.FilterItems = filterItems; DataDefController dataDefController = rcd.DataDefController; FilterController recordFilterController = dataDefController.RecordFilterController; recordFilterController.Modify(newRecordFilter); }
|
This list includes the namespaces used by the sample code:
- CrystalDecisions.Enterprise
- CrystalDecisions.ReportAppServer.ClientDoc
- CrystalDecisions.ReportAppServer.Controllers
- CrystalDecisions.ReportAppServer.DataDefModel
See Also
© 2021 SAP AG. All rights reserved.
http://www.sap.com/sapbusinessobjects/
Support services
http://service.sap.com/bosap-support/
Created with the Personal Edition of HelpNDoc: Easy to use tool to create HTML Help files and Help web sites