/// <summary> /// 为钻入生成where条件 /// </summary> /// <param name="pDrilledColumn">用户选择钻入的维度列</param> /// <param name="pDimValue">钻入的维度项的值</param> /// <returns></returns> protected virtual IWhereCondition GenerateWhereCondition4DrillIn(DimColumn pDrilledColumn, string pDimValue) { return(new EqualsCondition() { FieldName = pDrilledColumn.DataColumn.PropertyName, Value = pDimValue }); }
/// <summary> /// 创建分析报表中维度列的呈现器函数 /// </summary> /// <param name="pDimColumn">需要创建呈现器函数的维度列</param> /// <param name="pDrillingFunctionName">报表的Drilling的JS函数的函数名</param> /// <returns></returns> public static JSFunction CreateDimColumnRenderer(DimColumn pDimColumn, string pDrillingFunctionName) { JSFunction script = new JSFunction(); script.Type = JSFunctionTypes.Variable; script.FunctionName = string.Format("fn{0}Renderer", pDimColumn.ColumnID); //定义函数的参数列表 script.Params = new List <string>(); script.Params.Add("pVal"); script.Params.Add("pMetaData"); script.Params.Add("pRecord"); script.Params.Add("pRowIndex"); script.Params.Add("pColIndex"); script.Params.Add("pStore"); script.Params.Add("pView"); //定义函数体 script.AddSentence("var dimID = pRecord.get('{0}');", pDimColumn.ColumnID); script.AddSentence("var text = '';"); script.AddSentence("if(pVal!=null){"); script.AddSentence("{0}text =pVal.toString();", Keyboard.TAB); script.AddSentence("}"); script.AddSentence("var html = '';"); //script.AddSentence("html += '<a href=\"javascript:{0}('+'\\'{1}\\''+',\\''+dimID+'\\''+');\">' + text + '</a>';", pDrillingFunctionName,pDimColumn.ColumnID); script.AddSentence("html += '<a style=\"color:#666;text-decoration:underline;\" href=\"javascript:{0}('+'\\'{1}\\''+',\\''+dimID+'\\''+',\\''+text+'\\''+');\">' + text + '</a>';", pDrillingFunctionName, pDimColumn.ColumnID); script.AddSentence("return html;"); // return(script); }
/// <summary> /// 创建分析报表中维度列的呈现器函数 /// </summary> /// <param name="pDrilledColumn">钻取的列</param> /// <param name="pOtherColumns">其他作为筛选条件的维度列</param> /// <param name="pMultiDrillJSFunctionName">多维度钻取的函数名</param> /// <param name="pLoadingMessage">执行Ajax请求时的加载中的信息</param> /// <returns></returns> public static JSFunction CreateDimColumnRenderer(DimColumn pDrilledColumn, DimColumn[] pOtherColumns, string pMultiDrillJSFunctionName = "__fnAnalysisReportMultiDrill", string pLoadingMessage = "数据加载中,请稍后...") { JSFunction script = new JSFunction(); script.Type = JSFunctionTypes.Variable; script.FunctionName = string.Format("fn{0}Renderer", pDrilledColumn.ColumnID); //定义函数的参数列表 script.Params = new List <string>(); script.Params.Add("pVal"); script.Params.Add("pMetaData"); script.Params.Add("pRecord"); script.Params.Add("pRowIndex"); script.Params.Add("pColIndex"); script.Params.Add("pStore"); script.Params.Add("pView"); //定义函数体 script.AddSentence("//设置多维度钻取的参数"); script.AddSentence("var params={};"); script.AddSentence("params.DimColumnID ={0}{1}{0};", JSONConst.STRING_WRAPPER, pDrilledColumn.ColumnID); script.AddSentence("params.DimValue=pRecord.get({0}{1}{0});", JSONConst.STRING_WRAPPER, pDrilledColumn.ColumnID); script.AddSentence("params.DimText=pRecord.get({0}{1}{0});", JSONConst.STRING_WRAPPER, pDrilledColumn.GetTextColumnID()); if (pOtherColumns != null) { script.AddSentence("params.DrillingItems=new Array();"); int i = 0; foreach (var dim in pOtherColumns) { script.AddSentence("var item{0}={{}};", i.ToString()); script.AddSentence("item{2}.DimColumnID={0}{1}{0};", JSONConst.STRING_WRAPPER, dim.ColumnID, i.ToString()); script.AddSentence("item{2}.DimValue=pRecord.get({0}{1}{0});", JSONConst.STRING_WRAPPER, dim.ColumnID, i.ToString()); script.AddSentence("item{2}.DimText=pRecord.get({0}{1}{0});", JSONConst.STRING_WRAPPER, dim.GetTextColumnID(), i.ToString()); script.AddSentence("params.DrillingItems.push(item{0});", i.ToString()); i++; } } script.AddSentence("if (window.___MultiDrillingParams == null)"); script.AddSentence(" window.___MultiDrillingParams = {};"); script.AddSentence("window.___MultiDrillingParams[pRowIndex.toString()] = params;"); script.AddSentence("//生成链接"); script.AddSentence("var html = '';"); script.AddSentence("html += '<a style=\"color:#666;text-decoration:underline;\" href=\"javascript:{0}(window.___MultiDrillingParams['+pRowIndex.toString()+']);\">' + params.DimText + '</a>';", pMultiDrillJSFunctionName); script.AddSentence("return html;"); // return(script); }
/// <summary> /// 创建查看明细的JS函数 /// </summary> /// <param name="pAjaxHandlerUrl">Ajax请求的url</param> /// <param name="pDrilledDim">需要钻取的维度列</param> /// <param name="pOtherDim">其他的维度列</param> /// <param name="pMultiDrillJSFunctionName">多维度钻取的函数名</param> /// <param name="pFunctionName">函数的名称</param> /// <param name="pLoadingMessage">执行Ajax请求时的加载中的信息</param> /// <returns></returns> public static JSFunction CreateViewDetail(string pAjaxHandlerUrl, DimColumn pDrilledDim, DimColumn[] pOtherDim, string pMultiDrillJSFunctionName = "__fnAnalysisReportMultiDrill", string pFunctionName = "__fnAnalysisReportViewDetail", string pLoadingMessage = "数据加载中,请稍后...") { JSFunction script = new JSFunction(); script.Type = JSFunctionTypes.Common; script.FunctionName = pFunctionName; //定义函数的参数列表 script.Params = new List <string>(); script.Params.Add("item"); script.Params.Add("e"); // script.AddSentence("var menu =item.parentMenu;"); script.AddSentence("var clickRecord =menu.___current_record;"); script.AddSentence("if(clickRecord){"); script.AddSentence(" var params={};"); script.AddSentence(" params.DimColumnID ={0}{1}{0};", JSONConst.STRING_WRAPPER, pDrilledDim.ColumnID); script.AddSentence(" params.DimValue=clickRecord.get({0}{1}{0});", JSONConst.STRING_WRAPPER, pDrilledDim.ColumnID); script.AddSentence(" params.DimText=clickRecord.get({0}{1}{0});", JSONConst.STRING_WRAPPER, pDrilledDim.GetTextColumnID()); if (pOtherDim != null) { script.AddSentence(" params.DrillingItems=new Array();"); int i = 0; foreach (var dim in pOtherDim) { script.AddSentence(" var item{0}={{}};", i.ToString()); script.AddSentence(" item{2}.DimColumnID={0}{1}{0};", JSONConst.STRING_WRAPPER, dim.ColumnID, i.ToString()); script.AddSentence(" item{2}.DimValue=clickRecord.get({0}{1}{0});", JSONConst.STRING_WRAPPER, dim.ColumnID, i.ToString()); script.AddSentence(" item{2}.DimText=clickRecord.get({0}{1}{0});", JSONConst.STRING_WRAPPER, dim.GetTextColumnID(), i.ToString()); script.AddSentence(" params.DrillingItems.push(item{0});", i.ToString()); i++; } } script.AddSentence(" {0}(params);", pMultiDrillJSFunctionName); script.AddSentence("}"); // return(script); }
/// <summary> /// 执行钻取后的分组计算,钻取只是多一个过滤条件 /// </summary> /// <param name="pWheres">报表数据的过滤条件</param> /// <param name="pOrderBys">报表数据的排序条件</param> /// <param name="pDrilledColumn">用户选择钻入的维度列</param> /// <param name="pDimValue">用户选择钻入的维度项的值</param> /// <param name="pBringFromDrilling">从用户的钻取带入的其他查询条件</param> /// <returns>分组聚合后的数据</returns> protected override DataTable ProcessGroupingCalculationByDrilled(IWhereCondition[] pWheres, OrderBy[] pOrderBys, DimColumn pDrilledColumn, string pDimValue, IWhereCondition[] pBringFromDrilling) { //钻取带来的筛选条件的处理 var where = this.GenerateWhereCondition4DrillIn(pDrilledColumn, pDimValue); List <IWhereCondition> wheresByDrilling = new List <IWhereCondition>(); //由于钻取带入的条件 wheresByDrilling.Add(where); if (pBringFromDrilling != null) { wheresByDrilling.AddRange(pBringFromDrilling); } //获取当前的筛选条件 List <IWhereCondition> wheres = new List <IWhereCondition>(); if (wheresByDrilling != null) { wheres.AddRange(wheresByDrilling.ToArray()); } if (pWheres != null) { wheres.AddRange(pWheres); } if (this.ConditionsByDrilling != null) { wheres.AddRange(this.ConditionsByDrilling.SelectMany(item => item.Value).ToArray()); } //将钻取带来的筛选条件保存 if (this.ConditionsByDrilling == null) { this.ConditionsByDrilling = new Dictionary <string, IWhereCondition[]>(); } this.ConditionsByDrilling.Add(this.CurrentAnalysisMode.DrillRouting.CurrentSection.SectionID, wheresByDrilling.ToArray()); //执行分组计算 return(this.ProcessGroupingCalculation(wheres.ToArray(), pOrderBys)); }
/// <summary> /// 执行钻取后的分组计算 /// </summary> /// <param name="pWheres">报表数据的过滤条件</param> /// <param name="pOrderBys">报表数据的排序条件</param> /// <param name="pDrilledColumn">用户选择钻入的维度列</param> /// <param name="pDimValue">用户选择钻入的维度项的值</param> /// <returns>分组聚合后的数据</returns> protected override DataTable ProcessGroupingCalculationByDrilled(IWhereCondition[] pWheres, OrderBy[] pOrderBys, DimColumn pDrilledColumn, string pDimValue, IWhereCondition[] pBringFromDrilling) { //根据缓存策略判断是否读取缓存还是重新查询数据库 var dataes = this.DetailDataes.Where(item => { var temp = item.GetData(pDrilledColumn.DataColumn.PropertyName); var val = string.Empty; if (temp != null) { val = temp.ToString(); } return(val == pDimValue); }).ToArray(); // return(this.ProcessGroupingInMemory(dataes)); }