public override IList <IReportParameterValue> GetReportParameterValues(ResolveParameterValue resolver) { List <Type> argumentTypes = new List <Type>(); List <object> arguments = new List <object>(); foreach (MethodArgumentEntry argument in _methodArguments) { // also gets moved into get Type targetType = argument.type; object value = null; argumentTypes.Add(targetType); switch (argument.source) { case MethodArgumentSource.Callback: value = resolver(argument.name); break; case MethodArgumentSource.Constant: value = argument.value; break; } arguments.Add(ConversionHelper.Convert(value, targetType)); } object classInstance = _type.GetConstructor(Type.EmptyTypes).Invoke(new object[0]); MethodInfo methodInfo = _type.GetMethod( _methodName, BindingFlags.Public | BindingFlags.FlattenHierarchy | BindingFlags.Instance, null, argumentTypes.ToArray(), new ParameterModifier[0]); object result = methodInfo.Invoke(classInstance, arguments.ToArray()); object[] items = null; if (result.GetType().IsArray) { items = (object[])result; } else { foreach (Type t in result.GetType().GetInterfaces()) { if (t.Equals(typeof(System.Collections.ICollection))) { System.Collections.ICollection c = (System.Collections.ICollection)result; items = new object[c.Count]; c.CopyTo(items, 0); } if (t.Equals(typeof(ICollection <object>))) { ICollection <object> c = (ICollection <object>)result; items = new object[c.Count]; c.CopyTo(items, 0); } } if (items == null) { items = new object[] { result }; } } foreach (object item in items) { ReportParameterValue reportParameterValue = new ReportParameterValue(); reportParameterValue.Label = GetPropertyValue(item, _parameterLabelValuePair["Label"]).ToString(); reportParameterValue.Value = GetPropertyValue(item, _parameterLabelValuePair["Value"]).ToString(); reportParameterValues.Add(reportParameterValue); } return(reportParameterValues); }
private static IList <IReportParameter> GetReportParameters(Serialization.Report xmlReport) { IList <IReportParameter> reportParameters = new List <IReportParameter>(); if (xmlReport.Parameters != null && xmlReport.Parameters.Length > 0) { foreach (Serialization.Parameter xmlParameter in xmlReport.Parameters) { ReportParameter reportParameter = new ReportParameter(); reportParameter.AllowBlank = xmlParameter.AllowBlank; reportParameter.IsNullable = xmlParameter.AllowNull; reportParameter.Label = xmlParameter.Label; reportParameter.Name = xmlParameter.Name; reportParameter.DbType = ToDbType((ReportParameterDataType)Enum.Parse(typeof(ReportParameterDataType), xmlParameter.ParameterDataType.ToString())); reportParameter.ReportParameterInputType = (ReportParameterInputType)Enum.Parse(typeof(ReportParameterInputType), xmlParameter.ParameterInputType.ToString()); AbstractReportParameterValues reportParameterValues = new ReportParameterValuesConstant(); if (xmlParameter.ValidValues != null) { if (xmlParameter.ValidValues.Item is Serialization.ParameterRange) { Serialization.ParameterRange xmlParameterRange = (Serialization.ParameterRange)xmlParameter.ValidValues.Item; if (xmlParameterRange.Item is Serialization.DateRange) { Serialization.DateRange xmlDateRange = xmlParameterRange.Item; DateRange dateRange = new DateRange(); dateRange.InitialUnit = (TimeUnit)Enum.Parse(typeof(TimeUnit), xmlDateRange.InitialUnit.ToString()); dateRange.InitialDistance = Int32.Parse(xmlDateRange.InitialDistance, CultureInfo.InvariantCulture); dateRange.DistanceUnit = (TimeUnit)Enum.Parse(typeof(TimeUnit), xmlDateRange.DistanceUnit.ToString()); dateRange.Distance = Int32.Parse(xmlDateRange.Distance, CultureInfo.InvariantCulture); dateRange.NumberOfItems = Int32.Parse(xmlDateRange.NumberOfItems, CultureInfo.InvariantCulture); dateRange.Direction = (TimeDirection)Enum.Parse(typeof(TimeDirection), xmlDateRange.Direction.ToString()); Serialization.DateTimeFormatInfo xmlDtfi = xmlDateRange.DateTimeFormatInfo; DateTimeFormatInfo dtfi = new DateTimeFormatInfo(); if (!string.IsNullOrEmpty(xmlDtfi.FullDateTimePattern)) { dtfi.FullDateTimePattern = xmlDtfi.FullDateTimePattern; } if (!string.IsNullOrEmpty(xmlDtfi.LongDatePattern)) { dtfi.LongDatePattern = xmlDtfi.LongDatePattern; } if (!string.IsNullOrEmpty(xmlDtfi.LongTimePattern)) { dtfi.LongTimePattern = xmlDtfi.LongTimePattern; } if (!string.IsNullOrEmpty(xmlDtfi.MonthDayPattern)) { dtfi.MonthDayPattern = xmlDtfi.MonthDayPattern; } if (!string.IsNullOrEmpty(xmlDtfi.ShortDatePattern)) { dtfi.ShortDatePattern = xmlDtfi.ShortDatePattern; } if (!string.IsNullOrEmpty(xmlDtfi.ShortTimePattern)) { dtfi.ShortTimePattern = xmlDtfi.ShortTimePattern; } if (!string.IsNullOrEmpty(xmlDtfi.YearMonthPattern)) { dtfi.YearMonthPattern = xmlDtfi.YearMonthPattern; } int index = 0, selectedIndex = Int32.Parse(xmlDateRange.SelectedIndex, CultureInfo.InvariantCulture); foreach (DateTime value in dateRange.Items()) { ReportParameterValue reportParameterValue = new ReportParameterValue(); reportParameterValue.Label = value.ToString(xmlDateRange.LabelDateTimeFormatSpecifier.ToString(), dtfi); reportParameterValue.Value = value.ToString(xmlDateRange.ValueDateTimeFormatSpecifier.ToString(), dtfi); reportParameterValue.Selected = (index++ == selectedIndex); reportParameterValues.AddReportParameterValue(reportParameterValue); } } else { // ADD NEW RANGE ELEMENT CODE HERE } } else if (xmlParameter.ValidValues.Item is Serialization.DomainModel) { Serialization.DomainModel xmlDomainModel = (Serialization.DomainModel)xmlParameter.ValidValues.Item; IDictionary <string, string> parameterLabelValuePair = new Dictionary <string, string>(); parameterLabelValuePair.Add("Label", xmlDomainModel.Label.Name); parameterLabelValuePair.Add("Value", xmlDomainModel.Value.Name); reportParameterValues = new ReportParameterValuesDynamic(Type.GetType(xmlDomainModel.DomainModelName), xmlDomainModel.InvokeMethod.MethodName, parameterLabelValuePair); foreach (Serialization.MethodArgument argument in xmlDomainModel.InvokeMethod.Arguments) { ((ReportParameterValuesDynamic)reportParameterValues).AddMethodArgumentEntry(argument.Name, Type.GetType(argument.Type), argument.Value, argument.Source.ToString()); } IList <IReportParameterValue> staticParameterValues = new List <IReportParameterValue>(); if (xmlDomainModel.CustomValues != null) { foreach (Serialization.ParameterValue parameterValue in xmlDomainModel.CustomValues.Insert.ParameterValue) { ReportParameterValue reportParameterValue = new ReportParameterValue(); reportParameterValue.Label = parameterValue.Label; reportParameterValue.Value = parameterValue.Value; reportParameterValue.Selected = parameterValue.Selected; staticParameterValues.Add(reportParameterValue); } } bool itemSelected = false; // this logic is build on the assumption you can only preselect custom fields - is this a safe assumption? if (xmlDomainModel.Selected != null) { if (xmlDomainModel.Selected.Index != null) { ((ReportParameterValue)staticParameterValues[Int32.Parse(xmlDomainModel.Selected.Index, CultureInfo.InvariantCulture)]).Selected = true; itemSelected = true; } if (xmlDomainModel.Selected.Value != null) { foreach (ReportParameterValue x in staticParameterValues) { if (x.Value.Equals(xmlDomainModel.Selected.Value)) { x.Selected = true; itemSelected = true; break; } } } } if (!itemSelected) { if (staticParameterValues.Count > 0) { ((ReportParameterValue)staticParameterValues[0]).Selected = true; } } reportParameterValues.AddReportParameterValues(staticParameterValues); } else // ReportDefinitionLibrary.Xml.ParameterValues { Serialization.ParameterValue[] xmlParameterValues = (Serialization.ParameterValue[])xmlParameter.ValidValues.Item; foreach (Serialization.ParameterValue parameterValue in xmlParameterValues) { ReportParameterValue reportParameterValue = new ReportParameterValue(); reportParameterValue.Label = parameterValue.Label; reportParameterValue.Value = parameterValue.Value; reportParameterValue.Selected = parameterValue.Selected; reportParameterValues.AddReportParameterValue(reportParameterValue); } } } reportParameter.ReportParameterValues = reportParameterValues; reportParameters.Add(reportParameter); } } return(reportParameters); }