f4edb572d433615f434083661abdca219a627333
FAQ/Questions/reusing-filter-values-for-stored-procedures.md
| ... | ... | @@ -0,0 +1,74 @@ |
| 1 | +#Reusing filter values for stored procedures |
|
| 2 | + |
|
| 3 | +[[_TOC_]] |
|
| 4 | + |
|
| 5 | +##Question |
|
| 6 | + |
|
| 7 | +How can I use the same value for multiple filters using the same field when using stored procedure parameters? |
|
| 8 | + |
|
| 9 | +##Answer |
|
| 10 | + |
|
| 11 | +Izenda does not natively support the ability to re-use filter values for multiple filters using the same stored procedure parameter. In order to emulate this behavior, custom code will be required in your Global.asax file where your CustomAdHocConfig class exists. Below is a code sample that demonstrates how to implement this behavior at a basic level. The sample may need to be modified for individual use-cases so be sure to test the code before publishing. |
|
| 12 | + |
|
| 13 | +###C♯ example |
|
| 14 | + |
|
| 15 | +```csharp |
|
| 16 | +public override void PreExecuteReportSet(ReportSet reportSet) |
|
| 17 | +{ |
|
| 18 | + // ----- |
|
| 19 | + // Copy filter value form the filled SP parameter to the hidden parameters with the same column name |
|
| 20 | + // ----- |
|
| 21 | + // Only process SP parameters |
|
| 22 | + // Collect values from the visible filters |
|
| 23 | + var filtersToCopy = new Dictionary<string, object>(); |
|
| 24 | + foreach (Filter filter in reportSet.Filters) |
|
| 25 | + { |
|
| 26 | + if (filter.Parameter |
|
| 27 | + && filter.dbColumn != null |
|
| 28 | + && filter.dbColumn.Table.Type == TableType.StoredProcedure |
|
| 29 | + && filter.dbColumn.Name.StartsWith("PARAM_") |
|
| 30 | + && !filtersToCopy.ContainsKey(filter.dbColumn.Name)) |
|
| 31 | + filtersToCopy.Add(filter.dbColumn.Name, filter.Value); |
|
| 32 | + } |
|
| 33 | + // Pass values from the visible filters to hidden filters |
|
| 34 | + foreach (Filter filter in reportSet.Filters) |
|
| 35 | + { |
|
| 36 | + if (!filter.Parameter |
|
| 37 | + && filter.dbColumn != null |
|
| 38 | + && filter.dbColumn.Table.Type == TableType.StoredProcedure |
|
| 39 | + && filtersToCopy.ContainsKey(filter.dbColumn.Name)) |
|
| 40 | + filter.Value = filtersToCopy[filter.dbColumn.Name]; |
|
| 41 | + } |
|
| 42 | +} |
|
| 43 | +``` |
|
| 44 | + |
|
| 45 | +#VB.NET example |
|
| 46 | + |
|
| 47 | +```visualbasic |
|
| 48 | +Public Overrides Sub PreExecuteReportSet(ByVal reportSet As ReportSet) |
|
| 49 | + ' ----- |
|
| 50 | + ' Copy filter value form the filled SP parameter to the hidden parameters with the same column name |
|
| 51 | + ' ----- |
|
| 52 | + ' Only process SP parameters |
|
| 53 | + ' Collect values from the visible filters |
|
| 54 | + Dim filtersToCopy As New Dictionary(Of String, Object)() |
|
| 55 | + For Each filter As Filter In reportSet.Filters |
|
| 56 | + If filter.Parameter _ |
|
| 57 | + And filter.dbColumn IsNot Nothing _ |
|
| 58 | + And filter.dbColumn.Table.Type = TableType.StoredProcedure _ |
|
| 59 | + And filter.dbColumn.Name.StartsWith("PARAM_") _ |
|
| 60 | + And Not filtersToCopy.ContainsKey(filter.dbColumn.Name) Then |
|
| 61 | + filtersToCopy.Add(filter.dbColumn.Name, filter.Value) |
|
| 62 | + End If |
|
| 63 | + Next |
|
| 64 | + ' Pass values from the visible filters to hidden filters |
|
| 65 | + For Each filter As Filter In reportSet.Filters |
|
| 66 | + If Not filter.Parameter _ |
|
| 67 | + And filter.dbColumn IsNot Nothing _ |
|
| 68 | + And filter.dbColumn.Table.Type = TableType.StoredProcedure _ |
|
| 69 | + And filtersToCopy.ContainsKey(filter.dbColumn.Name) Then |
|
| 70 | + filter.Value = filtersToCopy(filter.dbColumn.Name) |
|
| 71 | + End If |
|
| 72 | + Next |
|
| 73 | +End Sub |
|
| 74 | +``` |
|
| ... | ... | \ No newline at end of file |