public ActionResult ExecuteSubReport(SubReportParams subReportParams) { var subReport = GetUserReport(subReportParams.SubReportId, GetLoggedUserId()); var arguments = GetSubReportArguments(subReport, subReportParams); subReport.ExtraArguments = arguments; //Updating the last applied range date in case it comes from a SubReport Column Values SaveLastDateRangeInSession(subReportParams.BeginDate, subReportParams.EndDate); //Saving the reportID and args associated with it so they can be retrieved further on SaveObjectInSession(subReportParams.SubReportId, arguments); ViewBag.Reports = GetStandAloneUserReports(GetLoggedUserId()); IEnumerable<ExpandoObject> data; subReport.FiltersData = GetFiltersData(subReportParams.SubReportId, out data, arguments); subReport.Data = data; //Defining numeric columns var numericColumns = GetNumericColumnsForReport(subReportParams.SubReportId); subReport.Columns.ForEach(col => col.IsNumeric = numericColumns.Contains(col.Name)); //Saving last date range saved by the user var currentDateRange = GetLastDateRangeInSession(); if (!currentDateRange.IsNull()) { subReport.StartDate = currentDateRange.StartDate; subReport.EndDate = currentDateRange.EndDate; } return View("ReportViewer", subReport); }
private List<Argument> GetSubReportArguments(UserReportViewModel subReport, SubReportParams subReportParams) { var predefinedFilters = subReport.PredefinedFilters; var argsResult = predefinedFilters.Where(pref => pref.Type == FilterType.Value).Select(predefinedFilter => new Argument(predefinedFilter.ParameterName, predefinedFilter.Value)).ToList(); var indexArg = new Argument(subReportParams.IndexParamName, subReportParams.IndexParamValue); var columnNameFilter = predefinedFilters.FirstOrDefault(filter => filter.ColumnName == subReportParams.ColumnName); var columnNameArg = !columnNameFilter.IsNull() ? new Argument(columnNameFilter.ParameterName, subReportParams.ColumnValue) : null; argsResult.AddRange(new List<Argument> { indexArg, columnNameArg }); return argsResult; }