/// <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()); }
/// <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); }