private void ProcessParameter(ParameterInfoCollection aParameters, int aParamIndex) { ParameterInfo parameterInfo = aParameters[aParamIndex]; parameterInfo.MissingUpstreamDataSourcePrompt = false; IParameterDef parameterDef = null; bool flag = aParameters.UserProfileState != UserProfileState.None; if (this.m_processingContext.SnapshotProcessing && parameterInfo.UsedInQuery) { parameterInfo.State = ReportParameterState.HasValidValue; parameterInfo.StoreLabels(); } else { if (parameterInfo.DynamicDefaultValue || parameterInfo.DynamicValidValues || parameterInfo.DynamicPrompt) { this.UpdateParametersContext(aParameters, this.m_lastDynamicParam, aParamIndex); this.m_lastDynamicParam = aParamIndex; parameterDef = this.GetParameterDef(aParamIndex); Global.Tracer.Assert(null != parameterDef, "null != paramDef, parameter {0}", parameterInfo.Name.MarkAsPrivate()); Global.Tracer.Assert(parameterInfo.DataType == parameterDef.DataType, "paramInfo.DataType == paramDef.DataType, parameter {0}", parameterInfo.Name.MarkAsPrivate()); this.AssertAreSameParameterByName(parameterInfo, parameterDef); } bool flag2 = this.m_dependenciesSubmitted.ContainsKey(parameterInfo.Name); if (parameterInfo.DynamicPrompt && (flag2 || !parameterInfo.IsUserSupplied || flag)) { this.SetupExprHost(parameterDef); string text = this.EvaluatePromptExpr(parameterInfo, parameterDef); if (text == null || text.Equals(string.Empty)) { text = parameterInfo.Name; } parameterInfo.Prompt = text; } switch (parameterInfo.CalculateDependencyStatus()) { case ReportParameterDependencyState.HasOutstandingDependencies: parameterInfo.State = ReportParameterState.HasOutstandingDependencies; parameterInfo.Values = null; if (parameterInfo.DynamicDefaultValue) { parameterInfo.DefaultValues = null; } if (parameterInfo.DynamicValidValues) { parameterInfo.ValidValues = null; } return; case ReportParameterDependencyState.MissingUpstreamDataSourcePrompt: parameterInfo.MissingUpstreamDataSourcePrompt = true; parameterInfo.State = ReportParameterState.DynamicValuesUnavailable; return; default: Global.Tracer.Assert(false, "Unexpected dependency state."); break; case ReportParameterDependencyState.AllDependenciesSpecified: break; } bool flag3 = parameterInfo.DynamicDefaultValue && (parameterInfo.Values == null || (parameterInfo.Values != null && !parameterInfo.IsUserSupplied)) && ((this.m_processingContext.SnapshotProcessing && parameterDef.HasDefaultValuesExpressions() && (flag || (parameterInfo.DependencyList != null && (parameterInfo.Values == null || (!parameterInfo.IsUserSupplied && flag2))))) || (!this.m_processingContext.SnapshotProcessing && (flag2 || parameterInfo.Values == null))); if (parameterInfo.DynamicValidValues && ((this.m_processingContext.SnapshotProcessing && parameterDef.HasValidValuesValueExpressions() && (parameterInfo.DependencyList != null || (flag && flag3))) || (!this.m_processingContext.SnapshotProcessing && ((parameterInfo.ValidValues != null && flag2) || parameterInfo.ValidValues == null))) && !this.ProcessValidValues(parameterInfo, parameterDef, flag3)) { parameterInfo.State = ReportParameterState.DynamicValuesUnavailable; } else if (!flag3 && parameterInfo.Values != null) { if (parameterInfo.ValueIsValid()) { parameterInfo.State = ReportParameterState.HasValidValue; parameterInfo.StoreLabels(); } else { parameterInfo.State = ReportParameterState.InvalidValueProvided; parameterInfo.Values = null; parameterInfo.EnsureLabelsAreGenerated(); } } else { parameterInfo.Values = null; parameterInfo.State = ReportParameterState.MissingValidValue; if (flag3 && !this.ProcessDefaultValue(parameterInfo, parameterDef)) { parameterInfo.State = ReportParameterState.DynamicValuesUnavailable; } else { if (parameterInfo.DefaultValues != null) { parameterInfo.Values = parameterInfo.DefaultValues; if (!parameterInfo.ValueIsValid()) { parameterInfo.Values = null; parameterInfo.State = ReportParameterState.DefaultValueInvalid; parameterInfo.EnsureLabelsAreGenerated(); } else { parameterInfo.State = ReportParameterState.HasValidValue; parameterInfo.StoreLabels(); } } this.m_paramDataSetCache = null; } } } }
public bool ProcessValidValues(ParameterInfo parameter, IParameterDef paramDef, bool aEvaluateDefaultValues) { if (parameter != null && paramDef != null) { IParameterDataSource validValuesDataSource = paramDef.ValidValuesDataSource; if (paramDef.HasValidValuesDataSource()) { if (this.m_processingContext.EnableDataBackedParameters) { if (this.NeedPrompt(validValuesDataSource)) { parameter.MissingUpstreamDataSourcePrompt = true; return(false); } IParameterDataSource defaultDataSource = paramDef.DefaultDataSource; bool aRetrievalDefaultValues = aEvaluateDefaultValues && defaultDataSource != null && defaultDataSource.DataSourceIndex == validValuesDataSource.DataSourceIndex && defaultDataSource.DataSetIndex == validValuesDataSource.DataSetIndex; this.m_paramDataSetCache = this.ProcessReportParameterDataSet(parameter, paramDef, validValuesDataSource, true, aRetrievalDefaultValues); if (Global.Tracer.TraceVerbose && parameter.ValidValues != null && parameter.ValidValues.Count == 0) { Global.Tracer.Trace(TraceLevel.Verbose, "Parameter '{0}' dynamic valid value list does not contain any values.", parameter.Name.MarkAsPrivate()); } } } else if (paramDef.HasValidValuesValueExpressions()) { int validValuesValueExpressionCount = paramDef.ValidValuesValueExpressionCount; Global.Tracer.Assert(0 != validValuesValueExpressionCount, "(0 != count)"); Global.Tracer.Assert(paramDef.HasValidValuesLabelExpressions() && validValuesValueExpressionCount == paramDef.ValidValuesLabelExpressionCount); this.SetupExprHost(paramDef); parameter.ValidValues = new ValidValueList(validValuesValueExpressionCount); for (int i = 0; i < validValuesValueExpressionCount; i++) { object obj = this.EvaluateValidValueExpr(paramDef, i); object obj2 = this.EvaluateValidValueLabelExpr(paramDef, i); bool flag = obj is object[]; bool flag2 = obj2 is object[]; if (flag && (flag2 || obj2 == null)) { object[] array = obj as object[]; object[] array2 = obj2 as object[]; if (array2 != null && array.Length != array2.Length) { this.m_processingContext.ErrorContext.Register(ProcessingErrorCode.rsInvalidValidValueList, Severity.Error, ObjectType.ReportParameter, paramDef.Name, "ValidValues"); throw new ReportProcessingException(this.m_processingContext.ErrorContext.Messages); } int num = array.Length; for (int j = 0; j < num; j++) { obj2 = ((array2 == null) ? null : array2[j]); this.ConvertAndAddValidValue(parameter, paramDef, array[j], obj2); } continue; } if (!flag && (!flag2 || obj2 == null)) { this.ConvertAndAddValidValue(parameter, paramDef, obj, obj2); continue; } this.m_processingContext.ErrorContext.Register(ProcessingErrorCode.rsInvalidValidValueList, Severity.Error, ObjectType.ReportParameter, paramDef.Name, "ValidValues"); throw new ReportProcessingException(this.m_processingContext.ErrorContext.Messages); } } return(true); } return(true); }