コード例 #1
0
        public static TableFilterSort TableFilterSort(int pageTemplateId)
        {
            if (SessionService.IsLocal)
            {
                HttpContext.Current.Session["sec.TableFilterSort" + pageTemplateId] = null;                          //xxx
            }
            if (HttpContext.Current.Session["sec.TableFilterSort" + pageTemplateId] == null)
            {
                StringBuilder GridColumns    = new StringBuilder();
                StringBuilder SortColumns    = new StringBuilder();
                StringBuilder InnerSelect    = new StringBuilder();
                StringBuilder OuterSelect    = new StringBuilder();
                StringBuilder InnerJoin      = new StringBuilder();
                StringBuilder StandardSelect = new StringBuilder();

                Dictionary <string, string> FilterMap = new Dictionary <string, string>();
                Dictionary <string, string> Sort1Map  = new Dictionary <string, string>();
                Dictionary <string, string> Sort2Map  = new Dictionary <string, string>();

                TableFilterSort tfs = new TableFilterSort();

                var tableName = TableName(pageTemplateId);
                if (tableName.Length == 0)
                {
                    return(tfs);
                }
                var primaryKey = PrimaryKey(pageTemplateId);


                GridColumns.Append(tableName + "." + primaryKey);
                InnerSelect.Append(tableName + "." + primaryKey);
                OuterSelect.Append(tableName + "." + primaryKey);

                var columnDefs = SessionService.ColumnDefs(pageTemplateId);

                var referenceIndex = 0;
                using (SourceControlEntities Db = new SourceControlEntities())
                {
                    var pageTemplate = SessionService.PageTemplate(pageTemplateId);

                    // get GridColumns
                    var   gridColumns  = Db.GridColumns.Where(w => w.PageTemplateId == pageTemplateId).OrderBy(o => o.SortOrder);
                    int[] columnDefIds = gridColumns.Select(s => s.ColumnDefId).ToArray();

                    var gridColumnDefs = columnDefs.Where(w => columnDefIds.Contains(w.ColumnDefId) && !(bool)w.IsPrimary);
                    foreach (var columnDef in gridColumnDefs)
                    {
                        referenceIndex++;

                        if (columnDef.ElementType == "DropdownCustomOption")
                        {
                            FilterMap.Add(columnDef.ColumnName + "_lco", "CustomOption" + referenceIndex + ".OptionText");

                            GridColumns.Append(string.Format(",{0}_lco", columnDef.ColumnName));

                            InnerSelect.Append(string.Format(", {0} AS {1}_lco ", "CustomOption" + referenceIndex + ".OptionText", columnDef.ColumnName));
                            InnerJoin.Append(string.Format(" LEFT JOIN {0} ON {1}.{2} = {3}.{4} AND {5}.ColumnDefId = {6}", "CustomOption CustomOption" + referenceIndex, tableName, columnDef.ColumnName, "CustomOption" + referenceIndex, "OptionValue", "CustomOption" + referenceIndex, columnDef.ColumnDefId));

                            OuterSelect.Append(string.Format(",MAIN.{0}_lco", columnDef.ColumnName));

                            // set sort
                            Sort1Map.Add(columnDef.ColumnName + "_lco", "CustomOption" + referenceIndex + ".OptionText");
                            Sort2Map.Add(columnDef.ColumnName + "_lco", "MAIN." + columnDef.ColumnName + "_lco");
                        }
                        else if (columnDef.LookupTable.Length > 0 && columnDef.TextField.Length > 0 && columnDef.ValueField.Length > 0 && columnDef.ElementType == "DropdownSimple")
                        {
                            string lookUpField  = "";
                            string lookUpField_ = "";
                            string fieldOnly    = "";
                            if (columnDef.TextField.Contains(","))
                            {
                                string[] fields = columnDef.TextField.Split(new char[] { ',' });
                                lookUpField  = "ISNULL(" + columnDef.LookupTable + "." + fields[0] + ",'') ";
                                lookUpField_ = columnDef.LookupTable + "." + fields[0];
                                fieldOnly    = fields[0];
                            }
                            else
                            {
                                lookUpField  = "ISNULL(" + columnDef.LookupTable + "." + columnDef.TextField + ",'') ";
                                lookUpField_ = columnDef.LookupTable + "." + columnDef.TextField;
                                fieldOnly    = columnDef.TextField;
                            }

                            var filterCondition = "CAST(" + tableName + "." + columnDef.ColumnName + " AS varchar(250)) IN (SELECT " + columnDef.ValueField + " FROM " + columnDef.LookupTable + " WHERE " + lookUpField_ + " [PARAM]) ";
                            FilterMap.Add(columnDef.ColumnName + "_tbl", filterCondition);

                            GridColumns.Append(string.Format(",{0}_tbl", columnDef.ColumnName));


                            InnerSelect.Append(string.Format(", {0} AS {1}_tbl, {2}.{3} ", lookUpField, columnDef.ColumnName, tableName, columnDef.ColumnName));
                            InnerJoin.Append(string.Format(" LEFT JOIN {0} ON {1}.{2} = {3}.{4} ", columnDef.LookupTable, tableName, columnDef.ColumnName, columnDef.LookupTable, columnDef.ValueField));

                            OuterSelect.Append(string.Format(",MAIN.{0}_tbl, MAIN.{1}", columnDef.ColumnName, columnDef.ColumnName));


                            // set sort
                            Sort1Map.Add(columnDef.ColumnName + "_tbl", columnDef.LookupTable + "." + fieldOnly);
                            Sort2Map.Add(columnDef.ColumnName + "_tbl", "MAIN." + columnDef.ColumnName + "_tbl");
                        }
                        else
                        {
                            GridColumns.Append("," + columnDef.ColumnName);

                            //OuterSelect.Append(string.Format(",{0}.{1}", tableName, columnDef.ColumnName));

                            if (columnDef.DataType == "DATE")
                            {
                                OuterSelect.Append(string.Format(",{0}.{1}", tableName, columnDef.ColumnName));
                                //OuterSelect.Append(",ISNULL(" + tableName + "." + columnDef.ColumnName + ",null) AS " + columnDef.ColumnName);
                            }
                            else if (columnDef.DataType == "DATETIME")
                            {
                                OuterSelect.Append(string.Format(",{0}.{1}", tableName, columnDef.ColumnName));
                                //OuterSelect.Append(",ISNULL(" + tableName + "." + columnDef.ColumnName + ",null) AS " + columnDef.ColumnName);
                            }
                            else
                            {
                                OuterSelect.Append(string.Format(",{0}.{1}", tableName, columnDef.ColumnName));
                            }
                        }
                    }

                    // get SortColumns
                    var sortColumns = Db.SortColumns.Where(w => w.PageTemplateId == pageTemplateId).OrderBy(o => o.SortOrder);

                    foreach (var sortColumn in sortColumns)
                    {
                        var columnDef = columnDefs.Where(w => w.ColumnDefId == sortColumn.ColumnDefId).FirstOrDefault();

                        string ascDesc = sortColumn.SortDir;
                        if (columnDef.LookupTable.Length > 0 && columnDef.TextField.Length > 0 && columnDef.ValueField.Length > 0)
                        {
                            if (SortColumns.Length == 0)
                            {
                                SortColumns.Append(string.Format("{0}_ {1}", tableName + "." + columnDef.ColumnName, ascDesc));
                            }
                            else
                            {
                                SortColumns.Append(string.Format(", {0}_ {1}", tableName + "." + columnDef.ColumnName, ascDesc));
                            }

                            if (!InnerJoin.ToString().Contains("LEFT JOIN " + columnDef.LookupTable))
                            {
                                InnerJoin.Append(string.Format(" LEFT JOIN {0} ON {1}.{2} = {3}.{4} ", columnDef.LookupTable, tableName, columnDef.ColumnName, columnDef.LookupTable, columnDef.ValueField));
                            }
                        }
                        else
                        {
                            if (SortColumns.Length == 0)
                            {
                                SortColumns.Append(string.Format("{0} {1}", tableName + "." + columnDef.ColumnName, ascDesc));
                            }
                            else
                            {
                                SortColumns.Append(string.Format(", {0} {1}", tableName + "." + columnDef.ColumnName, ascDesc));
                            }
                        }
                    }
                }


                tfs.GridColumns = GridColumns.ToString();
                tfs.SortColumns = SortColumns.ToString();;
                tfs.InnerSelect = InnerSelect.ToString();
                tfs.OuterSelect = OuterSelect.ToString();
                tfs.InnerJoin   = InnerJoin.ToString();
                tfs.FilterMap   = FilterMap;
                tfs.Sort1Map    = Sort1Map;
                tfs.Sort2Map    = Sort2Map;

                HttpContext.Current.Session["sec.TableFilterSort" + pageTemplateId] = tfs;
            }
            return((TableFilterSort)(HttpContext.Current.Session["sec.TableFilterSort" + pageTemplateId]));
        }
コード例 #2
0
        public static string GetServerSideRecords(int skip, int take, int page, int pageSize, List <GridSort> gridSorts = null, GridFilters filter = null, int pageTemplateId = 0)
        {
            //try
            //{
            var pageTemplate = SessionService.PageTemplate(pageTemplateId);

            string tableName   = "";
            string primaryKey  = "";
            string innerSelect = "";
            string innerJoin   = "";
            string outerSelect = "";
            string sortColumns = "";
            Dictionary <string, string> filterMap = new Dictionary <string, string>();
            Dictionary <string, string> sort1Map  = new Dictionary <string, string>();
            Dictionary <string, string> sort2Map  = new Dictionary <string, string>();

            tableName  = pageTemplate.TableName;
            primaryKey = pageTemplate.PrimaryKey;

            TableFilterSort tfs = SessionService.TableFilterSort(pageTemplateId);

            innerSelect = tfs.InnerSelect;
            innerJoin   = tfs.InnerJoin;
            outerSelect = tfs.OuterSelect;
            sortColumns = tfs.SortColumns;
            filterMap   = tfs.FilterMap;
            sort1Map    = tfs.Sort1Map;
            sort2Map    = tfs.Sort2Map;


            // WHERE
            string whereFilter = (HttpContext.Current.Session["WhereFilter" + pageTemplateId] != null) ? HttpContext.Current.Session["WhereFilter" + pageTemplateId].ToString() : "";

            if ((filter != null && filter.Filters != null))
            {
                string buildFilter  = "";
                string buildFilter2 = "";
                string fldName      = "";
                string oper         = "";
                string fldValue     = "";

                if ((filter != null && (filter.Filters != null && filter.Filters.Count > 0)))
                {
                    HttpContext.Current.Session["totalCount" + pageTemplateId] = null;

                    var filters = filter.Filters;

                    string logic = filter.Logic;

                    for (var i = 0; i < filters.Count; i++)
                    {
                        if (filters[i].Field == null && filters[i].Filters != null)
                        {
                            if (buildFilter2.Length > 0)
                            {
                                buildFilter2 += " AND  ";
                            }

                            buildFilter2 += "(";

                            var andOr = filters[i].Logic;
                            for (var x = 0; x < filters[i].Filters.Count; x++)
                            {
                                fldName       = filters[i].Filters[x].Field;
                                oper          = filters[i].Filters[x].Operator.ToLower();
                                fldValue      = filters[i].Filters[x].Value;
                                buildFilter2 += BuildFilter(fldName, oper, fldValue, filterMap) + " " + andOr + " ";
                            }
                            buildFilter2  = buildFilter2.Substring(0, buildFilter2.Length - 4);
                            buildFilter2 += ") ";

                            continue;
                        }


                        fldName  = filters[i].Field;
                        oper     = filters[i].Operator.ToLower();
                        fldValue = filters[i].Value;

                        buildFilter += BuildFilter(fldName, oper, fldValue, filterMap) + " " + logic + " ";
                    }
                }

                if (buildFilter.Length > 0 || buildFilter2.Length > 0)
                {
                    if (buildFilter.Length > 0)
                    {
                        buildFilter = buildFilter.Substring(0, buildFilter.Length - 4);

                        buildFilter = " (" + buildFilter + ") ";
                    }



                    if (buildFilter2.Length > 0)
                    {
                        if (buildFilter.Length > 0)
                        {
                            buildFilter += " AND  ";
                        }

                        buildFilter += " (" + buildFilter2 + ") ";
                    }
                }

                HttpContext.Current.Session["WhereFilter" + pageTemplateId] = buildFilter;
            }

            //--------- ORDER BY
            if (gridSorts != null && gridSorts.Count > 0)
            {
                HttpContext.Current.Session["SortField2" + pageTemplateId] = null;
                foreach (var gridSort in gridSorts)
                {
                    if ((gridSort.Field.Contains("_lco") || gridSort.Field.Contains("_tbl")) && sort1Map.ContainsKey(gridSort.Field))
                    {
                        HttpContext.Current.Session["SortField1" + pageTemplateId] = sort1Map[gridSort.Field];
                        HttpContext.Current.Session["SortField2" + pageTemplateId] = sort2Map[gridSort.Field];
                        HttpContext.Current.Session["SortDir" + pageTemplateId]    = gridSort.Dir;
                        break;
                    }
                    else
                    {
                        HttpContext.Current.Session["SortField1" + pageTemplateId] = tableName + "." + gridSort.Field;
                        HttpContext.Current.Session["SortDir" + pageTemplateId]    = gridSort.Dir;
                        break;
                    }
                }
            }

            // set default sort
            if (HttpContext.Current.Session["SortField1" + pageTemplateId] == null && sortColumns.Length > 0)
            {
                HttpContext.Current.Session["SortDir" + pageTemplateId]    = "ASC";
                HttpContext.Current.Session["SortField1" + pageTemplateId] = sortColumns;
                HttpContext.Current.Session["SortDir" + pageTemplateId]    = "";
            }

            string orderBy1 = " ORDER BY " + HttpContext.Current.Session["SortField1" + pageTemplateId].ToString() + " " + HttpContext.Current.Session["SortDir" + pageTemplateId].ToString() + " ";

            if (HttpContext.Current.Session["SortField2" + pageTemplateId] == null)
            {
                HttpContext.Current.Session["SortField2" + pageTemplateId] = HttpContext.Current.Session["SortField1" + pageTemplateId].ToString();
            }
            string orderBy2 = " ORDER BY " + HttpContext.Current.Session["SortField2" + pageTemplateId].ToString() + " " + HttpContext.Current.Session["SortDir" + pageTemplateId].ToString() + " ";

            if (orderBy1.Length < 14)
            {
                orderBy1 = "";
                orderBy2 = "";
            }

            // where clase
            string whereClause = "";

            if (HttpContext.Current.Session["WhereFilter" + pageTemplateId] != null && HttpContext.Current.Session["WhereFilter" + pageTemplateId].ToString().Length > 2)
            {
                whereClause = " WHERE " + HttpContext.Current.Session["WhereFilter" + pageTemplateId].ToString() + " ";
            }


            //--------- COUNT()
            var totalCount = 0;

            if (HttpContext.Current.Session["totalCount" + pageTemplateId] == null)
            {
                StringBuilder sbCount = new StringBuilder();
                sbCount.Append("SELECT COUNT(1) ");
                sbCount.Append("FROM " + tableName + " ");
                sbCount.Append(innerJoin + " ");
                sbCount.Append(whereClause + " ");

                var dbEntity = SessionService.DbEntity(pageTemplate.DbEntityId);
                using (TargetEntities Db = new TargetEntities())
                {
                    Db.Database.Connection.ConnectionString = dbEntity.ConnectionString;
                    totalCount = Db.Database.SqlQuery <int>(sbCount.ToString()).FirstOrDefault();
                }
            }
            else
            {
                totalCount = Convert.ToInt32(HttpContext.Current.Session["totalCount" + pageTemplateId]);
            }

            //--------- Build SQL
            string pk = tableName + "." + primaryKey;

            StringBuilder sb = new StringBuilder();

            sb.Append("WITH MAIN AS (");

            // inner query
            sb.Append("SELECT " + innerSelect + " ");
            sb.Append("FROM " + tableName + " ");
            sb.Append(innerJoin + " ");
            sb.Append(whereClause + " ");
            sb.Append(orderBy1 + " ");


            if (take > 0)
            {
                sb.Append("OFFSET " + skip + " ROWS FETCH NEXT " + take + " ROWS ONLY ");
            }
            else
            {
                sb.Append("OFFSET 0 ROWS FETCH NEXT 1000000 ROWS ONLY ");
            }

            sb.Append(") ");

            // outer query
            sb.Append("SELECT " + outerSelect + " FROM " + tableName + " INNER JOIN MAIN ON " + pk + " = MAIN." + primaryKey + " ");
            sb.Append(orderBy2 + " ");

            string sql = sb.ToString();

            if (totalCount == 0)
            {
                return("{\"total\":0,\"data\":[] }");
            }

            var json = "";

            if (take > 0)
            {
                json = "{\"total\":" + totalCount + ",\"data\":" + DataService.GetJsonFromSQL(pageTemplate.DbEntityId, sql) + "}";
            }
            else
            {
                json = DataService.GetJsonFromSQL(pageTemplate.DbEntityId, sql);
            }

            json = json.Replace("\r", "").Replace("\n", "");
            return(json);
            //}
            //catch (Exception ex)
            //{
            //    Helper.LogError(ex.StackTrace);
            //    return "";
            //}
        }