Exemple #1
0
 /// <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
     });
 }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
        /// <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);
        }
Exemple #4
0
        /// <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);
        }
Exemple #5
0
        /// <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));
        }