コード例 #1
0
ファイル: OGUReader.cs プロジェクト: jerryshi2007/AK47Source
		/// <summary>
		/// 获取指定部门下的所有子对象
		/// </summary>
		/// <param name="strOrgValues">要求查询的部门对象(父部门标识,多个之间采用","分隔)</param>
		/// <param name="soc">查询要求的查询列名称
		/// (GUID、USER_GUID、LOGON_NAME、ORIGINAL_SORT、GLOBAL_SORT、ALL_PATH_NAME)</param>
		/// <param name="iLot">要求查询的数据对象类型(机构、组、人员、兼职对象)</param>
		/// <param name="iLod">是否包含被逻辑删除的成员</param>
		/// <param name="iDepth">要求查询的层次(最少一层)(0代表全部子对象)</param>
		/// <param name="strOrgRankCodeName">查询中要求的机构对象级别</param>
		/// <param name="strUserRankCodeName">查询中要求的人员对象级别</param>
		/// <param name="strHideType">查询中要求屏蔽的数据(对应于配置文件HideTypes.xml中的配置)</param>
		/// <param name="strAttrs">查询中要求获取数据对象的属性类型</param>
		/// <param name="iOrgClass">要求展现机构的类型</param>
		/// <param name="iOrgType">要求展现机构的属性</param>
		/// <returns>获取指定部门下的所有子对象的查询结果</returns>
		public static DataSet GetOrganizationChildren(string strOrgValues,
			SearchObjectColumn soc,
			int iLot,
			int iLod,
			int iDepth,
			string strOrgRankCodeName,
			string strUserRankCodeName,
			string strHideType,
			string strAttrs,
			int iOrgClass,
			int iOrgType)
		{
			strAttrs = OGUCommonDefine.CombinateAttr(strAttrs);

			SearchOrgChildrenCondition scc = new SearchOrgChildrenCondition(strOrgValues, soc, strAttrs);
			scc.ListObjDelete = (ListObjectDelete)iLod;
			scc.ListObjType = (ListObjectType)iLot;
			scc.Depth = iDepth;
			scc.OrgRankCN = strOrgRankCodeName;
			scc.UserRankCN = strUserRankCodeName;
			scc.HideType = strHideType;
			scc.OrgClass = iOrgClass;
			scc.OrgType = iOrgType;

			return GetOrganizationChildren(scc);
		}
コード例 #2
0
ファイル: OGUReader.cs プロジェクト: jerryshi2007/AK47Source
		/// <summary>
		/// 根据指定的查询条件类,生成系统中对于“人员”的查询SQL语句
		/// </summary>
		/// <param name="scc">查询条件类对象</param>
		/// <param name="rootPath">传入的ORIGINAL_SORT</param>
		/// <returns>针对于“人员”的查询SQL语</returns>
		/// 
		//2009-05-07删除RANK_DEFINE约束,修改ORIGINAL_SORT约束
		private static string GetUsersSqlByScc2(SearchOrgChildrenCondition scc, string rootPath)
		{
			StringBuilder strB = new StringBuilder(1024);
			strB.Append(@"	SELECT 'USERS' AS OBJECTCLASS, "
				+ DatabaseSchema.Instence.GetTableColumns(scc.ObjAttrs, "USERS", "OU_USERS") + @"
							FROM USERS , OU_USERS
							WHERE USERS.GUID = OU_USERS.USER_GUID 
								AND ( " + GetSqlSearchParOriginal2("OU_USERS", scc.Depth, rootPath) + " )");

			string strListDelete = GetSqlSearchStatus("OU_USERS", scc.ListObjDelete);
			if (strListDelete.Length > 0)
				strB.Append(" \n AND ( " + strListDelete + " ) ");

			if (scc.HideType != string.Empty)
			{
				string strHideType = GetHideTypeFromXml(scc.HideType, "OU_USERS");
				if (strHideType.Length > 0)
					strB.Append(" \n AND OU_USERS.ALL_PATH_NAME NOT IN ( " + strHideType + " ) ");
			}
			if ((scc.ListObjType & ListObjectType.SIDELINE) == 0)
				strB.Append(" \n AND OU_USERS.SIDELINE = 0 ");

			return strB.ToString();
		}
コード例 #3
0
ファイル: OGUReader.cs プロジェクト: jerryshi2007/AK47Source
		/// <summary>
		/// 根据指定的查询条件类,生成系统中对于“人员”的查询SQL语句
		/// </summary>
		/// <param name="scc">查询条件类对象</param>
		/// <param name="rootPath">传入的ORIGINAL_SORT</param>
		/// <returns>针对于“人员”的查询SQL语</returns>
		/// 
		//2009-05-11
		private static string GetUsersSqlByScc(SearchOrgChildrenCondition scc, string rootPath)
		{
			StringBuilder strB = new StringBuilder(1024);
			strB.Append(@"	SELECT 'USERS' AS OBJECTCLASS, "
				+ DatabaseSchema.Instence.GetTableColumns(scc.ObjAttrs, "USERS", "OU_USERS", "RANK_DEFINE") + @"
							FROM USERS JOIN RANK_DEFINE 
								ON RANK_DEFINE.CODE_NAME = USERS.RANK_CODE
									{0}, OU_USERS 
							WHERE USERS.GUID = OU_USERS.USER_GUID 
								AND ( " + GetSqlSearchParOriginal2("OU_USERS", scc.Depth, rootPath) + " )");

			string strListDelete = GetSqlSearchStatus("OU_USERS", scc.ListObjDelete);
			if (strListDelete.Length > 0)
				strB.Append(" \n AND ( " + strListDelete + " ) ");

			string strRankLimit = string.Empty;
			if (scc.UserRankCN.Length > 0)
				strRankLimit = " AND RANK_DEFINE.SORT_ID <= (SELECT SORT_ID FROM RANK_DEFINE WHERE CODE_NAME = " + TSqlBuilder.Instance.CheckQuotationMark(scc.UserRankCN, true) + " ) ";

			if (scc.HideType != string.Empty)
			{
				string strHideType = GetHideTypeFromXml(scc.HideType, "OU_USERS");
				if (strHideType.Length > 0)
					strB.Append(" \n AND OU_USERS.ALL_PATH_NAME NOT IN ( " + strHideType + " ) ");
			}
			if ((scc.ListObjType & ListObjectType.SIDELINE) == 0)
				strB.Append(" \n AND OU_USERS.SIDELINE = 0 ");

			return string.Format(strB.ToString(), strRankLimit);
		}
コード例 #4
0
ファイル: OGUReader.cs プロジェクト: jerryshi2007/AK47Source
		/// <summary>
		/// 根据指定的查询条件类,生成系统中对于“人员组”的查询SQL语句
		/// </summary>
		/// <param name="scc">查询条件类对象</param>
		/// <param name="rootPath">传入的ORIGINAL_SORT</param>
		/// <returns>针对于“人员组”的查询SQL语句</returns>
		/// 
		//2009-05-07删除RANK_DEFINE约束,修改ORIGINAL_SORT约束
		private static string GetGroupsSqlByScc2(SearchOrgChildrenCondition scc, string rootPath)
		{
			StringBuilder strB = new StringBuilder(1024);
			strB.Append(@" SELECT 'GROUPS' AS OBJECTCLASS, " + DatabaseSchema.Instence.GetTableColumns(scc.ObjAttrs, "GROUPS") + @"
							FROM GROUPS 
							WHERE ( " + GetSqlSearchParOriginal2("GROUPS", scc.Depth, rootPath) + " )");

			string strListDelete = GetSqlSearchStatus("GROUPS", scc.ListObjDelete);
			if (strListDelete.Length > 0)
				strB.Append(" \n AND ( " + strListDelete + " ) ");

			if (scc.HideType != string.Empty)
			{
				string strHideType = GetHideTypeFromXml(scc.HideType, "GROUPS");
				if (strHideType.Length > 0)
					strB.Append(" \n AND GROUPS.ALL_PATH_NAME NOT IN ( " + strHideType + " ) ");
			}

			return strB.ToString();
		}
コード例 #5
0
ファイル: OGUReader.cs プロジェクト: jerryshi2007/AK47Source
		//2009-05-07删除RANK_DEFINE约束,修改ORIGINAL_SORT约束
		private static string GetOrganizationsSqlByScc2(SearchOrgChildrenCondition scc, string rootPath)
		{
			StringBuilder strB = new StringBuilder(1024);
			string strRootGuids = TransHashToSqlString(scc.RootGuids);

			strB.Append(@"	SELECT 'ORGANIZATIONS' AS OBJECTCLASS, "
				+ DatabaseSchema.Instence.GetTableColumns(scc.ObjAttrs, "ORGANIZATIONS") + @"
							FROM ORGANIZATIONS							
							WHERE(	GUID IN(" + strRootGuids + @") 
									OR	
									(
											( " + GetSqlSearchParOriginal2("ORGANIZATIONS", scc.Depth, rootPath) + @" ) 
											{0}
									)
								)");

			string strListDelete = GetSqlSearchStatus("ORGANIZATIONS", scc.ListObjDelete);
			if (strListDelete.Length > 0)
				strListDelete = " AND (" + strListDelete + ")";

			if (scc.HideType != string.Empty)
			{
				string strHideType = GetHideTypeFromXml(scc.HideType, "ORGANIZATIONS");
				if (strHideType.Length > 0)
					strB.Append(" \n AND ORGANIZATIONS.ALL_PATH_NAME NOT IN ( " + strHideType + " ) ");
			}

			if (scc.OrgClass != 1024 * 1024 - 1)
				strB.Append(" \n AND (ORGANIZATIONS.ORG_CLASS = 0 OR ORGANIZATIONS.ORG_CLASS & " + scc.OrgClass + " <> 0 ) ");

			if (scc.OrgType != 1024 * 1024 - 1)
				strB.Append(" \n AND (ORGANIZATIONS.ORG_TYPE = 0 OR ORGANIZATIONS.ORG_TYPE & " + scc.OrgType + " <> 0 ) ");

			return string.Format(strB.ToString(), strListDelete);
		}
コード例 #6
0
ファイル: OGUReader.cs プロジェクト: jerryshi2007/AK47Source
		///// <summary>
		///// 根据数据表名称以及要求获取的数据表中的数据列名称组合成为核数据表相关的数据查询语言
		///// </summary>
		///// <param name="strAttrs">数据表中的数据列名称组合</param>
		///// <param name="da">数据库操作对象</param>
		///// <param name="strTables">指定的数据表名称</param>
		///// <returns>数据查询语言SQL</returns>
		//private static string GetTableColumns(string strAttrs, params string[] strTables)
		//{
		//    StringBuilder strB = new StringBuilder(1024);
		//    ExceptionHelper.TrueThrow(strAttrs.Length == 0, "对不起,程序没有指定要求查询的列名称!请验证!");
		//    ExceptionHelper.TrueThrow(strTables.Length == 0, "对不起,没有确定的数据表名称!");

		//    if (strAttrs.Trim() == "*")
		//        strB.Append(strTables[0] + "." + strAttrs.Trim());
		//    else
		//    {
		//        string[] strAttrArr = strAttrs.Split(',');
		//        InitHashTable(da);
		//        for (int i = 0; i < strAttrArr.Length; i++)
		//        {
		//            strAttrArr[i] = strAttrArr[i].Trim();

		//            if (strB.Length > 0)
		//                strB.Append(", ");

		//            bool bComplicated = false;

		//            for (int j = 0; j < strTables.Length; j++)
		//            {
		//                DataTable table = _DataSet_Schema.Tables[strTables[j]];

		//                DataRow[] drs = table.Select("CNAME=" + TSqlBuilder.Instance.CheckQuotationMark(strAttrArr[i]));
		//                if (drs.Length > 0)
		//                {
		//                    strB.Append(XmlHelper.DBValueToString(drs[0]["TNAME"]) + "." + strAttrArr[i]);
		//                    bComplicated = true;
		//                    break;
		//                }
		//            }

		//            if (false==bComplicated)
		//                strB.Append(" NULL AS " + strAttrArr[i]);
		//        }
		//    }

		//    return strB.ToString();
		//}

		/// <summary>
		/// 根据指定的查询条件类,生成系统中对于“机构”的查询SQL语句
		/// </summary>
		/// <param name="scc">查询条件类对象</param>
		/// <param name="rootPath">传入的ORIGINAL_SORT</param>
		/// <returns>针对于“机构”的查询SQL语句</returns>
		/// 
		//2009-05-11
		private static string GetOrganizationsSqlByScc(SearchOrgChildrenCondition scc, string rootPath)
		{
			StringBuilder strB = new StringBuilder(1024);
			string strRootGuids = TransHashToSqlString(scc.RootGuids);

			strB.Append(@"	SELECT 'ORGANIZATIONS' AS OBJECTCLASS, "
				+ DatabaseSchema.Instence.GetTableColumns(scc.ObjAttrs, "ORGANIZATIONS", "RANK_DEFINE") + @"
							FROM ORGANIZATIONS JOIN RANK_DEFINE 
								ON ORGANIZATIONS.RANK_CODE = RANK_DEFINE.CODE_NAME
									{1} 
							WHERE(	GUID IN(" + strRootGuids + @") 
									OR	
									(
											( " + GetSqlSearchParOriginal2("ORGANIZATIONS", scc.Depth, rootPath) + @" ) 
											{0}
									)
								)");

			string strListDelete = GetSqlSearchStatus("ORGANIZATIONS", scc.ListObjDelete);
			if (strListDelete.Length > 0)
				strListDelete = " AND (" + strListDelete + ")";

			string strRankLimit = string.Empty;
			if (scc.OrgRankCN.Length > 0)
				strRankLimit = " AND RANK_DEFINE.SORT_ID <= (SELECT SORT_ID FROM RANK_DEFINE WHERE CODE_NAME = "
					+ TSqlBuilder.Instance.CheckQuotationMark(scc.OrgRankCN, true) + " ) ";

			if (scc.HideType != string.Empty)
			{
				string strHideType = GetHideTypeFromXml(scc.HideType, "ORGANIZATIONS");
				if (strHideType.Length > 0)
					strB.Append(" \n AND ORGANIZATIONS.ALL_PATH_NAME NOT IN ( " + strHideType + " ) ");
			}

			if (scc.OrgClass != 1024 * 1024 - 1)
				strB.Append(" \n AND (ORGANIZATIONS.ORG_CLASS = 0 OR ORGANIZATIONS.ORG_CLASS & " + scc.OrgClass + " <> 0 ) ");

			if (scc.OrgType != 1024 * 1024 - 1)
				strB.Append(" \n AND (ORGANIZATIONS.ORG_TYPE = 0 OR ORGANIZATIONS.ORG_TYPE & " + scc.OrgType + " <> 0 ) ");

			return string.Format(strB.ToString(), strListDelete, strRankLimit);
		}
コード例 #7
0
ファイル: OGUReader.cs プロジェクト: jerryshi2007/AK47Source
		/// <summary>
		/// 按照一定的查询条件查询系统中的数据对象
		/// </summary>
		/// <param name="scc">系统的查询条件对象</param>
		/// <returns>按照一定的查询条件查询系统中的数据对象</returns>
		/// 
		//2009-05-07
		public static DataSet GetOrganizationChildren2(SearchOrgChildrenCondition scc)
		{
			string searchKey = scc.GetHashString();
#if DEBUG
			long cast = DateTime.Now.Ticks;
			Trace.WriteLine(searchKey);
#endif
			DataSet result;

			string strRootGuids = TransHashToSqlString(scc.RootGuids).Trim('\'');
			//得到All_Path_Name
			DataSet dsRootOrg = OGUReader.GetObjectsDetail("ORGANIZATIONS",
						strRootGuids,
						SearchObjectColumn.SEARCH_GUID,
						string.Empty,
						SearchObjectColumn.SEARCH_GUID);

			ExceptionHelper.FalseThrow(dsRootOrg.Tables[0].Rows.Count > 0, "不能找到ID为{0}的机构", strRootGuids);
			string rootPath = dsRootOrg.Tables[0].Rows[0]["ORIGINAL_SORT"].ToString();


			if (false == Caching.GetOrganizationChildrenQueue.Instance.TryGetValue(searchKey, out result))
			{
				using (DbContext context = DbContext.GetContext(CommonResource.AccreditConnAlias))
				{
					Database database = DatabaseFactory.Create(context);
					StringBuilder strB = new StringBuilder(1024);
					if ((scc.ListObjType & ListObjectType.ORGANIZATIONS) != ListObjectType.None)
					{
						strB.Append(" ( " + GetOrganizationsSqlByScc2(scc, rootPath) + " \n )");
					}

					if ((scc.ListObjType & ListObjectType.GROUPS) != ListObjectType.None)
					{
						if (strB.Length > 0)
							strB.Append(" \n UNION \n ");
						strB.Append(" ( " + GetGroupsSqlByScc2(scc, rootPath) + " \n )");
					}

					if ((scc.ListObjType & ListObjectType.USERS) != ListObjectType.None)
					{
						if (strB.Length > 0)
							strB.Append(" \n UNION \n ");

						strB.Append(" ( " + GetUsersSqlByScc2(scc, rootPath) + " \n )");
					}

					string strSql = "SELECT * FROM ( " + strB.ToString() + " ) RESULT ORDER BY GLOBAL_SORT";

					result = database.ExecuteDataSet(CommandType.Text, strSql);
				}
				Caching.GetOrganizationChildrenQueue.Instance.Add(searchKey, result, InnerCacheHelper.PrepareDependency());
			}
			//    }
			//}
#if DEBUG
			cast = DateTime.Now.Ticks - cast;
			Trace.WriteLine(cast.ToString(), "Cast Time");
#endif
			return result;
		}