/// <summary>
 /// Initializes a new instance of the <see cref="AnalysisExecutionContext"/> class.
 /// </summary>
 /// <param name="analysisConfiguration">Analysis configuration</param>
 /// <param name="filterParameters">Filter parameters</param>
 /// <param name="recordIdentification">Record identification</param>
 /// <param name="linkId">Link id</param>
 public AnalysisExecutionContext(UPConfigAnalysis analysisConfiguration, Dictionary <string, object> filterParameters, string recordIdentification = null, int linkId = 0)
 {
     this.AnalysisConfiguration    = analysisConfiguration;
     this.FilterParameters         = filterParameters;
     this.LinkRecordIdentification = recordIdentification;
     this.LinkId = linkId;
 }
        /// <summary>
        /// Continues with filter parameters
        /// </summary>
        /// <param name="filterParameters">Filter parameters</param>
        public void ContinueWithFilterParameters(Dictionary <string, object> filterParameters)
        {
            Dictionary <string, object> additionalParameters = this.ViewReference.ContextValueForKey("AdditionalParameters").JsonDictionaryFromString();

            if (additionalParameters == null)
            {
                this.FilterParameters = filterParameters;
            }
            else if (filterParameters == null || filterParameters.Count == 0)
            {
                this.FilterParameters = additionalParameters;
            }
            else
            {
                var dict = new Dictionary <string, object>(additionalParameters);
                dict.Append(filterParameters);
                this.FilterParameters = dict;
            }

            if (this.IsQuery)
            {
                this.ContinueWithQuery(this.FilterParameters);
                return;
            }

            UPConfigAnalysis configAnalysis = ConfigurationUnitStore.DefaultStore.AnalysisByName(this.AnalysisName);

            this.Analysis = null;
            if (configAnalysis != null)
            {
                AnalysisQueryExecutionContext queryExecutionContext;
                if (this.RecordIdentification?.Length > 0)
                {
                    queryExecutionContext = new AnalysisQueryExecutionContext(configAnalysis, this.FilterParameters, this.RecordIdentification, this.LinkId);
                }
                else
                {
                    queryExecutionContext = new AnalysisQueryExecutionContext(configAnalysis, this.FilterParameters);
                }

                if (queryExecutionContext != null)
                {
                    this.Analysis = new Analysis(queryExecutionContext, this.Options);
                }
            }

            if (this.Analysis == null)
            {
                var analysisNotFound = $"Analysis {this.AnalysisName} could not be loaded";
                this.ReportError(new Exception(analysisNotFound), false);
                return;
            }

            this.AnalysisSettings = this.Analysis.DefaultExecutionSettings;
            this.Analysis.ComputeResultWithSettingsRequestOption(this.AnalysisSettings, this.RequestOption, this);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="AnalysisQueryExecutionContext"/> class.
 /// </summary>
 /// <param name="analysisConfiguration">Analysis configuration</param>
 /// <param name="filterParameters">Filter parameters</param>
 /// <param name="recordIdentification">Record identification</param>
 /// <param name="linkId">Link id</param>
 public AnalysisQueryExecutionContext(UPConfigAnalysis analysisConfiguration, Dictionary <string, object> filterParameters, string recordIdentification = "", int linkId = 0)
     : base(analysisConfiguration, filterParameters, recordIdentification, linkId)
 {
     this.QueryConfiguration = ConfigurationUnitStore.DefaultStore.QueryByName(analysisConfiguration.QueryName);
 }