/// <summary>
            /// The request to get report configuration from data layer.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>The report data set.</returns>
            private static GetReportDataServiceResponse GetReportData(GetReportDataServiceRequest request)
            {
                ReportDataSet outputData;

                var dataRequest = new GetReportConfigurationDataRequest(request.ReportId, request.QueryResultSettings);
                ReportConfiguration reportDefinition = request.RequestContext.Runtime.Execute <SingleEntityDataServiceResponse <ReportConfiguration> >(dataRequest, request.RequestContext).Entity;

                // If reportDefinition is null, throw error.
                ThrowIf.Null(reportDefinition, "This report is either not configured in database or not allowed for this role.");
                reportDefinition.SetReportParameters(request.ReportParameters);

                // Get report data based on its type.
                if (reportDefinition.DataSourceType.Equals("OLTP", StringComparison.OrdinalIgnoreCase))
                {
                    var dataReportRequest = new GetOLTPReportDataRequest(reportDefinition, request.QueryResultSettings);
                    outputData = request.RequestContext.Runtime.Execute <SingleEntityDataServiceResponse <ReportDataSet> >(dataReportRequest, request.RequestContext).Entity;
                }
                else
                {
                    throw new NotSupportedException("The report type of the requested report is not supported.");
                }

                return(new GetReportDataServiceResponse(outputData));
            }
            /// <summary>
            /// Gets OLTP report data.
            /// </summary>
            /// <param name="request">The request with report configuration, locale and settings.</param>
            /// <returns><see cref="ReportDataSet"/> object.</returns>
            private SingleEntityDataServiceResponse <ReportDataSet> GetOLTPReportData(GetOLTPReportDataRequest request)
            {
                ThrowIf.Null(request.ReportConfiguration, "Parameters are empty.");

                ReportConfiguration config        = request.ReportConfiguration;
                ParameterSet        sqlParameters = new ParameterSet();

                // Add channel id and user id to report parameters.
                if (config.Parameters != null && config.Parameters.Any())
                {
                    foreach (CommerceProperty parameter in config.Parameters)
                    {
                        sqlParameters[parameter.Key] = parameter.Value.GetPropertyValue();
                    }
                }

                sqlParameters[ParamChannelId] = request.RequestContext.GetPrincipal().ChannelId;
                if (config.IsUserBasedReport)
                {
                    sqlParameters[ParamUserId] = request.RequestContext.GetPrincipal().UserId;
                }

                DataSet outputDataSet;

                using (SqlServerDatabaseContext sqlServerDatabaseContext = new SqlServerDatabaseContext(request))
                {
                    outputDataSet = sqlServerDatabaseContext.ExecuteQueryDataSet(config.Query, sqlParameters);
                }

                ReportDataSet reportDataSet = null;

                if (outputDataSet != null && outputDataSet.Tables.Count == 1)
                {
                    // Get localized strings for the report.
                    if (this.LocalizedStrings == null)
                    {
                        this.LocalizedStrings = this.GetLocalizedReportsStrings(request.RequestContext, request.QueryResultSettings);
                    }

                    outputDataSet.Tables[0].TableName = OutputTableName;
                    if (outputDataSet.Tables[0].Columns.Count > 0)
                    {
                        foreach (DataColumn column in outputDataSet.Tables[0].Columns)
                        {
                            column.ColumnName = this.GetLocalizedLabel(column.ColumnName);
                        }
                    }

                    reportDataSet = new ReportDataSet
                    {
                        ReportId      = config.ReportId,
                        Locale        = request.RequestContext.LanguageId,
                        Parameters    = config.Parameters,
                        HasTotalRow   = config.HasTotalRow,
                        HasDisclaimer = config.HasDisclaimer,
                        Output        = this.ConvertDataTableToCollection(outputDataSet.Tables[0])
                    };
                }

                return(new SingleEntityDataServiceResponse <ReportDataSet>(reportDataSet));
            }