Ejemplo n.º 1
0
        /// <summary>
        /// 将分析报表的output向前端输出
        /// </summary>
        /// <param name="pOutput"></param>
        protected virtual void ResponseAnalysisReportOutput(AnalysisReportOutput pOutput)
        {
            var script = new StringBuilder();

            script.Append(pOutput.GenerateUpdateDataScript(0));
            this.ResponseContent(script.ToString());
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 实现对分析报表的Ajax请求的处理
        /// </summary>
        /// <param name="pContext">HTTP上下文</param>
        protected override void ProcessAjaxRequest(HttpContext pContext)
        {
            this.InitParams(pContext);
            if (this.CurrentOperation.HasValue == false)
            {
                throw new ArgumentException("请求的QueryString中必须带有op项,以表明请求的是何操作.");
            }
            //
            var report = this.GetReportInstance();
            AnalysisReportOutput output = null;

            switch (this.CurrentOperation.Value)
            {
            case Operations.Query:
                #region 查询
            {
                var query = this.GetReportQuery();
                if (query != null)
                {
                    output = report.ProcessQuery(query.WhereCondtions, query.OrderBys, query.Language.HasValue?query.Language.Value: Languages.zh_CN);
                }
                else
                {
                    output = report.ProcessQuery(null, null, Languages.zh_CN);
                }
            }
                #endregion
                break;

            case Operations.Goto:
                #region 跳转
            {
                var para = this.DeserializeJSONContent <AnalysisReportClientPara>();
                if (para == null || string.IsNullOrWhiteSpace(para.SectionID))
                {
                    throw new Exception("缺少跳转到哪个钻取剖面参数.");
                }
                output = report.ProcessGoto(para.SectionID);
            }
                #endregion
                break;

            case Operations.DrillIn:
                #region 钻取
            {
                var para = this.DeserializeJSONContent <AnalysisReportClientPara>();
                if (para == null || string.IsNullOrWhiteSpace(para.DimColumnID) || string.IsNullOrWhiteSpace(para.DimValue))
                {
                    throw new Exception("缺少钻取的参数.");
                }
                output = report.ProcessDrillIn(para.DimColumnID, para.DimValue, para.DimText, null);
            }
                #endregion
                break;

            case Operations.ChangePivot:
                #region 改变数据透视
            {
                var para = this.DeserializeJSONContent <AnalysisReportClientPara>();
                if (para == null || string.IsNullOrWhiteSpace(para.PivotChangedColumnID) || para.IsPivoted.HasValue == false)
                {
                    throw new Exception("改变数据透视缺少参数.");
                }
                output = report.ProcessPivotChanged(para.PivotChangedColumnID, para.IsPivoted.Value);
            }
                #endregion
                break;

            case Operations.ChangeCRConversion:
                #region 改变行列转换
            {
                var para = this.DeserializeJSONContent <AnalysisReportClientPara>();
                if (para == null || string.IsNullOrWhiteSpace(para.CRConvertionChangedColumnID) || para.IsCRConverted.HasValue == false)
                {
                    throw new Exception("改变行列转换缺少参数.");
                }
                output = report.ProcessCRConversionChanged(para.CRConvertionChangedColumnID, para.IsCRConverted.Value);
            }
                #endregion
                break;

            case Operations.ExportToExcel:
                #region 导出到Excel
            {
                if (this.IsCacheAnalysisReportOutput)
                {
                    var sessionID = this.GetCachingSessionID();
                    output = this.CurrentContext.Session[sessionID] as AnalysisReportOutput;
                    if (output == null)
                    {
                        output = report.ProcessQueryAgain();
                    }
                }
                else
                {
                    output = report.ProcessQueryAgain();
                }

                this.CurrentContext.Response.Clear();
                this.CurrentContext.Response.ContentType = "application/vnd.ms-excel";
                this.CurrentContext.Response.AppendHeader("Content-Disposition", string.Format("attachment;filename={0}.xls", DateTime.Now.ToSerialString()));
                var excel = output.WriteXLS();
                using (var stream = excel.SaveToStream())
                {
                    var bytes = stream.ToArray();
                    this.CurrentContext.Response.OutputStream.Write(bytes, 0, bytes.Length);
                }
                this.CurrentContext.Response.End();
            }
                #endregion
                break;

            case Operations.CRExchange:
                #region 行列互换
            {
                output = report.ProcessCRExchange();
            }
                #endregion
                break;

            case Operations.ViewDetail:
                #region 查看明细
            {
                var           drillings = this.DeserializeJSONContent <MultiDrilling>();
                StringBuilder text      = new StringBuilder();
                text.Append(drillings.DimText);
                List <IWhereCondition> wheres = new List <IWhereCondition>();
                if (drillings.DrillingItems != null)
                {
                    //text.Append("[");
                    //bool hasAppend = false;
                    //
                    var columns = report.CurrentColumns;
                    foreach (var item in drillings.DrillingItems)
                    {
                        var col    = columns.FindBy(item.DimColumnID);
                        var dimCol = col as DimColumn;
                        wheres.Add(new EqualsCondition()
                            {
                                FieldName = dimCol.DataColumn.PropertyName, Value = item.DimValue
                            });
                        text.AppendFormat("【{0}】", item.DimText);
                    }
                    //text.Append("]");
                }
                output = report.ProcessDrillIn(drillings.DimColumnID, drillings.DimValue, text.ToString(), wheres.ToArray());
            }
                #endregion
                break;

            default:
                throw new NotImplementedException(string.Format("未实现的操作:{0}.", this.CurrentOperation.Value));
            }
            //缓存分析报表的输出
            if (this.IsCacheAnalysisReportOutput)
            {
                var sessionID = this.GetCachingSessionID();
                this.CurrentContext.Session[sessionID] = output;
            }
            //输出
            this.ResponseAnalysisReportOutput(output);
        }