Exemple #1
0
 private OneConnection CreateOneConnection(string connName)
 {
     foreach (ConnectionStringSettings connStr in ConfigurationManager.ConnectionStrings)
     {
         if (connStr.Name == connName)
         {
             return(OneConnectionFactories.GetConnection(connStr.ProviderName, connStr.ConnectionString));
         }
     }
     throw new Exception(connName + " 不是已知的连接字符串名称!");
 }
Exemple #2
0
        public object Get(int id, string context, JObject data)
        {
            var menuItems = new SysMenuServices().GetUserMenuList(User.Identity.Name, true);
            var menus     = new List <XtMenuItem>();
            var tables    = new List <XtTable>();
            var connStr   = ConfigurationManager.ConnectionStrings[context];

            using (var conn = OneConnectionFactories.GetConnection(connStr.ProviderName, connStr.ConnectionString))
            {
                // 加载菜单
                string sql = string.Format("select t.Code, f.ItemName, SourceTable = (select top 1 MasterTable from xt_djflowm where code = {0}), f.MasterTable, f.MenuCode from Xt_DjTransMain as t join xt_djflowm as f on f.Code = t.TargetTable where t.SourceTable = {0}", id);
                using (var reader = conn.QueryReader(sql))
                {
                    XtTable table;
                    while (reader.Read())
                    {
                        tables.Add(table = new XtTable
                        {
                            Code        = reader.GetInt32(0),
                            ItemName    = reader.GetString(1),
                            SourceTable = reader.GetString(2),
                            MasterTable = reader.GetString(3)
                        });
                        if (!reader.IsDBNull(4))
                        {
                            table.MenuCode = reader.GetString(4);
                        }
                    }
                }
                // 加载字段关联
                foreach (var table in tables)
                {
                    table.FieldMaps = new Dictionary <string, string>();
                    sql             = string.Format("select Sourcefield, Targetfield from Xt_djfield where mainCode = {0} and type='主表'", table.Code);
                    using (var reader = conn.QueryReader(sql))
                    {
                        while (reader.Read())
                        {
                            table.FieldMaps.Add(reader.GetString(0), reader.GetString(1));
                        }
                    }
                }

                //检查当前用户权限 & 启用菜单
                var        userServices = new SysUserService();
                XtMenuItem menuItem     = null;
                for (var i = 0; i < tables.Count; i++)
                {
                    if (IsUrl(tables[i].MenuCode))
                    {
                        menus.Add(menuItem = new XtMenuItem
                        {
                            Enabled = true,
                            Title   = tables[i].ItemName,
                            Url     = UrlFormat(tables[i].MenuCode, data),
                            Blank   = true
                        });
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(tables[i].MenuCode))
                        {
                            var menuCodes = tables[i].MenuCode.Split(',');
                            // 测试用户是否有访问权限
                            if (menuItems.Any(mi => mi.MenuCode == menuCodes[0]))
                            {
                                var sysMenuItem = menuItems.FirstOrDefault(mi => mi.MenuCode == tables[i].MenuCode);
                                menus.Add(menuItem = new XtMenuItem
                                {
                                    Enabled = true,
                                    Title   = tables[i].ItemName
                                });
                                if (sysMenuItem != null)
                                {
                                    if (!string.IsNullOrEmpty(sysMenuItem.IconClass))
                                    {
                                        menuItem.IconClass = sysMenuItem.IconClass;
                                    }
                                    var dataKey = menuCodes.Length > 1 ? menuCodes[1] : tables[i].FieldMaps.First().Key;
                                    menuItem.Url = sysMenuItem.URL + "/" + data[dataKey];
                                }
                                // 测试数据是否存在
                                var ex = conn.ExecuteScalar(string.Format(
                                                                "select 1 where EXISTS(select * from {0} where {1})",
                                                                tables[i].MasterTable,
                                                                string.Join(" AND ", tables[i].FieldMaps.Select(kv => string.Format("{0}='{1}'", kv.Value, data[kv.Key])))
                                                                ));
                                if (ex == null)
                                {
                                    menuItem.Enabled = false;
                                }
                            }
                        }
                    }
                }
            }
            return(menus);
        }