示例#1
0
		///// <summary>
		///// 判断一个用户是否存在于指定的多个部门之中
		///// </summary>
		///// <param name="strUserValue">用户的属性数据值</param>
		///// 
		///// <param name="socu">用户的属性名称
		///// (GUID、USER_GUID、LOGON_NAME、ORIGINAL_SORT、GLOBAL_SORT、ALL_PATH_NAME)
		///// </param>
		///// <param name="strUserParentGuid">指定用户所在的父部门标识(可空)</param>
		///// <param name="objectXmlDoc">判断对象的属性数据值</param>
		///// <param name="soco">机构的属性名称
		///// (GUID、ORIGINAL_SORT、GLOBAL_SORT、ALL_PATH_NAME)
		///// </param>
		///// <param name="lod">是否包含被逻辑删除的成员</param>
		///// <param name="strHideType">查询中要求屏蔽的数据(对应于配置文件HideTypes.xml中的配置)</param>
		///// <param name="bDirect">是否直接从属(无中间部门)</param>
		///// <param name="bFitAll">是否要求完全匹配(存在于指定的每一个部门中)</param>
		///// <returns>判断一个用户是否存在于指定的多个部门之中</returns>
		//public static bool IsUserInObjects(string strUserValue, SearchObjectColumn socu, string strUserParentGuid, XmlDocument objectXmlDoc, SearchObjectColumn soco, ListObjectDelete lod, string strHideType, bool bDirect, bool bFitAll)
		//{
		//    using (DbContext context = DbContext.GetContext(AccreditResource.ConnAlias))
		//    {
		//        return IsUserInObjects(strUserValue, socu, strUserParentGuid, objectXmlDoc, soco, lod, strHideType, bDirect, bFitAll, da);
		//    }
		//}

		/// <summary>
		/// 判断一个用户是否存在于指定的多个部门之中
		/// </summary>
		/// <param name="strUserValue">用户的属性数据值</param>
		/// 
		/// <param name="socu">用户的属性名称
		/// (GUID、USER_GUID、LOGON_NAME、ORIGINAL_SORT、GLOBAL_SORT、ALL_PATH_NAME)
		/// </param>
		/// <param name="strUserParentGuid">指定用户所在的父部门标识(可空)</param>
		/// <param name="objectXmlDoc">判断对象的属性数据值</param>
		/// <param name="soco">机构的属性名称
		/// (GUID、ORIGINAL_SORT、GLOBAL_SORT、ALL_PATH_NAME)
		/// </param>
		/// <param name="lod">是否包含被逻辑删除的成员</param>
		/// <param name="bDirect">是否直接从属(无中间部门)</param>
		/// <param name="bFitAll">是否要求完全匹配(存在于指定的每一个部门中)</param>
		/// <returns>判断一个用户是否存在于指定的多个部门之中</returns>
		public static bool IsUserInObjects(string strUserValue,
			SearchObjectColumn socu,
			string strUserParentGuid,
			XmlDocument objectXmlDoc,
			SearchObjectColumn soco,
			ListObjectDelete lod,
			bool bDirect,
			bool bFitAll)
		{
			return IsUserInObjects(strUserValue, socu, strUserParentGuid, objectXmlDoc, soco, lod, string.Empty, bDirect, bFitAll);
		}
示例#2
0
		/// <summary>
		/// 判断用户群是否存在于指定的多个部门之中
		/// </summary>
		/// <param name="xmlUserDoc">用户群标识(多个之间采用","分隔)</param>
		/// <param name="socu">用户的属性名称
		/// (GUID、USER_GUID、LOGON_NAME、ORIGINAL_SORT、GLOBAL_SORT、ALL_PATH_NAME)</param>
		/// <param name="xmlObjDoc">机构群(采用XML方式)</param>
		/// <param name="soc">机构的属性名称
		/// (GUID、ORIGINAL_SORT、GLOBAL_SORT、ALL_PATH_NAME)</param>
		/// <param name="lod">是否包含被逻辑删除的成员</param>
		/// <param name="strHideType">查询中要求屏蔽的数据(对应于配置文件HideTypes.xml中的配置)</param>
		/// <param name="bDirect">是否直接从属(无中间部门)</param>
		/// <remarks>
		/// <code>
		/// xmlUserDoc的结构如下(说明oValue必填,与socu配合使用;parentGuid可不填):
		///		<USERS>
		///			<USERS oValue="" parentGuid="" />
		///			<USERS oValue="" parentGuid="" />
		///		</USERS>
		/// xmlObjDoc的结构如下(说明oValue必填,与soc配合使用;parentGuid可不填;rankCode可不填):
		///		<OBJECTS>
		///			<ORGANIZATIONS oValue="" rankCode="" />
		///			<GROUPS oValue="" rankCode="" />
		///			<USERS oValue="" parentGuid="" />
		///		</OBJECTS>
		/// </code>
		/// xmlObjDoc的返回结果(字节点方式嵌入返回):
		///		<OBJECTS>
		///			<ORGANIZATIONS oValue="" rankCode="" >
		///				<USERS oValue="" parentGuid=""/>
		///				<USERS oValue="" parentGuid=""/>
		///			</ORGANIZATIONS>
		///			<GROUPS oValue="" rankCode="" >
		///				<USERS oValue="" parentGuid=""/>
		///				<USERS oValue="" parentGuid=""/>
		///			</GROUPS>
		///			<USERS oValue="" parentGuid="" >
		///				<USERS oValue="" parentGuid=""/>
		///			</USERS>
		///		</OBJECTS>
		/// </remarks>
		public static void CheckUserInObjects(XmlDocument xmlUserDoc,
			SearchObjectColumn socu,
			XmlDocument xmlObjDoc,
			SearchObjectColumn soc,
			ListObjectDelete lod,
			string strHideType,
			bool bDirect)
		{
			string cacheKey = InnerCacheHelper.BuildCacheKey(xmlUserDoc.DocumentElement.OuterXml,
				socu,
				xmlObjDoc.DocumentElement.OuterXml,
				soc,
				lod,
				strHideType,
				bDirect);
			XmlDocument result;
#if DEBUG
			Debug.WriteLine(xmlObjDoc.OuterXml, "begin");
#endif
			//if (false == CheckUserInObjectsQueue.Instance.TryGetValue(cacheKey, out result))
			//{
			//    lock (typeof(CheckUserInObjectsQueue))
			//    {
			if (false == CheckUserInObjectsQueue.Instance.TryGetValue(cacheKey, out result))
			{
				string strUserColName = OGUCommonDefine.GetSearchObjectColumn(socu);
				string strObjColName = OGUCommonDefine.GetSearchObjectColumn(soc);

				strHideType = OGUCommonDefine.GetHideType(strHideType);
				string strHideList = GetHideTypeFromXmlForLike(strHideType, "OU_USERS");

				string strDelUser = GetSqlSearchStatus("OU_USERS", lod);

				string strDirect = "%";
				if (bDirect)
					strDirect = "______";
				#region Db control
				using (DbContext context = DbContext.GetContext(CommonResource.AccreditConnAlias))
				{
					string strUserLimit = GetUserLimitInCheckUserInOrganizations(xmlUserDoc, strUserColName);
					/*****************************************************************************************************************/
					string strExtraWhere = @"
								AND (" + strDelUser + @") 
								AND " + strUserLimit + strHideList;
					StringBuilder strB = GetSqlSearchForCheckUserInObjects(xmlObjDoc, strUserColName, strObjColName, strDirect, strExtraWhere);

					if (strB.Length > 0)
					{
						Database database = DatabaseFactory.Create(context);
						DataSet ds = database.ExecuteDataSet(CommandType.Text, strB.ToString());
						foreach (DataTable oTable in ds.Tables)
						{
							foreach (DataRow row in oTable.Rows)
							{
								XmlNode uNode = xmlUserDoc.DocumentElement.SelectSingleNode("USERS[@oValue=\"" + OGUCommonDefine.DBValueToString(row["USER_VALUE"]) + "\"]");
								if (uNode != null)
								{
									XmlElement oRoot = xmlObjDoc.DocumentElement;
									string oClass = OGUCommonDefine.DBValueToString(row["OBJECTCLASS"]);
									string oValue = OGUCommonDefine.DBValueToString(row["OBJ_VALUE"]);

									foreach (XmlElement oElem in oRoot.SelectNodes(oClass + "[@oValue=\"" + oValue + "\"]"))
									{
										if (row["RANK_CODE"] is DBNull)
										{
											if (oElem.GetAttribute("rankCode") == string.Empty)
											{
												XmlElement uElem = (XmlElement)XmlHelper.AppendNode(oElem, uNode.LocalName);
												foreach (XmlAttribute xAttr in uNode.Attributes)
													uElem.SetAttribute(xAttr.LocalName, xAttr.InnerText);
											}
										}
										else
										{
											if (oElem.GetAttribute("rankCode") == OGUCommonDefine.DBValueToString(row["RANK_CODE"]))
											{
												XmlElement uElem = (XmlElement)XmlHelper.AppendNode(oElem, uNode.LocalName);
												foreach (XmlAttribute xAttr in uNode.Attributes)
													uElem.SetAttribute(xAttr.LocalName, xAttr.InnerText);
											}
										}
									}
								}
							}
						}
					}
				}
				#endregion

				#region Deleted
				/*****************************************************************************************************************/
				/*******下面一段程序并没有错误,但是性能上有差异。以下程序针对每个OBJ对象产生一条SQL查询语句,********************/
				/*******在对象多的情况下导致SQL查询语句的庞大,修改参阅GetSqlSearchForCheckUserInObjects**************************/
				/*****************************************************************************************************************/
				//			foreach (XmlElement elem in xmlObjDoc.DocumentElement.ChildNodes)
				//			{
				//				string strRankLimit = elem.GetAttribute("rankCode");
				//				if (strRankLimit != null && strRankLimit.Length > 0)
				//					strRankLimit = " AND RANK_DEFINE.SORT_ID <= (SELECT SORT_ID FROM RANK_DEFINE WHERE CODE_NAME = " + TSqlBuilder.Instance.CheckQuotationMark(elem.GetAttribute("rankCode")) + ") ";
				//				else
				//					strRankLimit = string.Empty;
				//
				//				string strSql = string.Empty;
				//				switch (elem.LocalName)
				//				{
				//					case "ORGANIZATIONS":
				//						strSql = @"
				//							SELECT DISTINCT " + GetTableColumns(strUserColName, da, "USERS", "OU_USERS") + " AS USER_VALUE, " + GetTableColumns(strObjColName, da, "ORGANIZATIONS") + @" AS OBJ_VALUE
				//							FROM ORGANIZATIONS, OU_USERS, USERS JOIN RANK_DEFINE ON USERS.RANK_CODE = RANK_DEFINE.CODE_NAME
				//							WHERE OU_USERS.USER_GUID = USERS.GUID
				//								AND OU_USERS.ORIGINAL_SORT LIKE ORGANIZATIONS.ORIGINAL_SORT + " + TSqlBuilder.Instance.CheckQuotationMark(strDirect) + @"
				//								AND (" + strDelUser + @")
				//								AND " + GetTableColumns(strObjColName, da, "ORGANIZATIONS") + " = " + TSqlBuilder.Instance.CheckQuotationMark(elem.GetAttribute("oValue")) + @"
				//								AND " + strUserLimit + @"
				//								" + strRankLimit + strHideList + @"
				//							ORDER BY OBJ_VALUE";
				//						break;
				//					case "GROUPS":
				//						strSql = @"
				//							SELECT DISTINCT " + GetTableColumns(strUserColName, da, "USERS", "OU_USERS") + " AS USER_VALUE, " + GetTableColumns(strObjColName, da, "GROUPS") + @" AS OBJ_VALUE
				//							FROM GROUPS, GROUP_USERS, OU_USERS, USERS JOIN RANK_DEFINE ON USERS.RANK_CODE = RANK_DEFINE.CODE_NAME
				//							WHERE GROUPS.GUID = GROUP_USERS.GROUP_GUID
				//								AND GROUP_USERS.USER_GUID = OU_USERS.USER_GUID
				//								AND GROUP_USERS.USER_PARENT_GUID = OU_USERS.PARENT_GUID
				//								AND OU_USERS.USER_GUID = USERS.GUID
				//								AND GROUPS." + strObjColName + " = " + TSqlBuilder.Instance.CheckQuotationMark(elem.GetAttribute("oValue")) + @"
				//								AND ( " + strDelUser + @" ) 
				//								AND " + strUserLimit + strHideList + @"
				//								" + strRankLimit + @"
				//							ORDER BY OBJ_VALUE";
				//						break;
				//					case "USERS":
				//						strSql = @"
				//							SELECT DISTINCT " + GetTableColumns(strUserColName, da, "USERS", "OU_USERS") + " AS USER_VALUE, " + GetTableColumns(strObjColName, da, "USERS", "OU_USERS") + @" AS OBJ_VALUE
				//							FROM OU_USERS, USERS
				//							WHERE OU_USERS.USER_GUID = USERS.GUID
				//								AND " + GetTableColumns(strObjColName, da, "USERS", "OU_USERS") + " = " + TSqlBuilder.Instance.CheckQuotationMark(elem.GetAttribute("oValue")) + @"
				//								AND ( " + strDelUser + @" ) 
				//								AND " + strUserLimit + strHideList + @"
				//							ORDER BY OBJ_VALUE ";
				//						break;
				//					default :	ExceptionHelper.TrueThrow(true, "对不起,系统没有对应处理“" + elem.LocalName + "”的相应程序!");
				//						break;
				//				}
				//
				//				strB.Append(strSql + ";\n");
				//			}
				//			if (strB.Length > 0)
				//			{
				//				DataSet ds = OGUCommonDefine.ExecuteDataset(strB.ToString(), da);
				//				for (int iTable = 0; iTable < ds.Tables.Count; iTable++)
				//				{
				//					foreach (DataRow row in ds.Tables[iTable].Rows)
				//					{
				//						XmlNode uNode = xmlUserDoc.DocumentElement.SelectSingleNode("USERS[@oValue=\"" + XmlHelper.DBValueToString(row["USER_VALUE"]) + "\"]");
				//						if (uNode != null)
				//						{						
				//							XmlElement oElem = (XmlElement)XmlHelper.AppendNode(xmlObjDoc, xmlObjDoc.DocumentElement.ChildNodes[iTable], uNode.LocalName);
				//							foreach (XmlAttribute xAttr in uNode.Attributes)
				//								oElem.SetAttribute(xAttr.LocalName, xAttr.InnerText);
				//						}
				//					}
				//				}
				//			}
				/*****************************************************************************************************************/
				#endregion

				result = xmlObjDoc;
				CheckUserInObjectsQueue.Instance.Add(cacheKey, result, InnerCacheHelper.PrepareDependency());
			}
			//    }
			//}
			xmlObjDoc = result;
#if DEBUG
			Debug.WriteLine(xmlObjDoc.OuterXml, "result");
#endif
		}
示例#3
0
		/// <summary>
		/// 根据要求查询对象中是否展现被(逻辑)删除的对象生成数据查询条件
		/// </summary>
		/// <param name="strTableName">要求查询的数据表</param>
		/// <param name="lod">要求展现的数据删除类型(默认都是数据删除上的普通对象)</param>
		/// <returns>SQL中与数据删除相关的</returns>
		private static string GetSqlSearchStatus(string strTableName, ListObjectDelete lod)
		{
			string strListDelete = string.Empty;
			if ((lod & ListObjectDelete.COMMON) != ListObjectDelete.None)
				strListDelete = " (" + strTableName + ".STATUS = " + ((int)ListObjectDelete.COMMON).ToString() + ") ";
			if ((lod & ListObjectDelete.DIRECT_LOGIC) != ListObjectDelete.None)
			{
				if (strListDelete.Length > 0)
					strListDelete += " OR ";
				strListDelete += " (" + strTableName + ".STATUS & " + ((int)ListObjectDelete.DIRECT_LOGIC).ToString() + ") <> 0 ";
			}
			if ((lod & ListObjectDelete.CONJUNCT_ORG_LOGIC) != ListObjectDelete.None)
			{
				if (strListDelete.Length > 0)
					strListDelete += " OR ";
				strListDelete += " (" + strTableName + ".STATUS & " + ((int)ListObjectDelete.CONJUNCT_ORG_LOGIC).ToString() + ") <> 0 ";
			}
			if ((lod & ListObjectDelete.CONJUNCT_USER_LOGIC) != ListObjectDelete.None)
			{
				if (strListDelete.Length > 0)
					strListDelete += " OR ";
				strListDelete += " (" + strTableName + ".STATUS & " + ((int)ListObjectDelete.CONJUNCT_USER_LOGIC).ToString() + ") <> 0 ";
			}
			return strListDelete;
		}
示例#4
0
		///// <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>
		///// <param name="da">数据库操作对象</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, DataAccess da)
		//{
		//    strAttrs = OGUCommonDefine.CombinateAttr(strAttrs);

		//    SearchOrgChildrenCondition scc = new SearchOrgChildrenCondition(strOrgValues, soc, strAttrs, da);
		//    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, da);
		//}

		///// <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="da">数据库操作对象</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, DataAccess da)
		//{
		//    return GetOrganizationChildren(strOrgValues, soc, iLot, iLod, iDepth, strOrgRankCodeName, strUserRankCodeName, strHideType, strAttrs, 0, 0, da);
		//}

		///// <summary>
		///// 按照一定的查询条件查询系统中的数据对象
		///// </summary>
		///// <param name="scc">系统的查询条件对象</param>
		///// <param name="da">数据库操作对象</param>
		///// <returns>按照一定的查询条件查询系统中的数据对象</returns>
		//public static DataSet GetOrganizationChildren(SearchOrgChildrenCondition scc, DataAccess da)
		//{
		//    StringBuilder strB = new StringBuilder(1024);
		//    if ((scc.ListObjType & ListObjectType.ORGANIZATIONS) != 0)
		//    {
		//        strB.Append(" ( " + GetOrganizationsSqlByScc(scc, da) + " \n )");
		//    }

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

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

		//        strB.Append(" ( " + GetUsersSqlByScc(scc, da) + " \n )");
		//    }

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

		//    return OGUCommonDefine.ExecuteDataset(strSql, da);
		//}

		/// <summary>
		/// 判断一个用户是否存在于指定的多个部门之中
		/// </summary>
		/// <param name="strUserValue">用户的属性数据值</param>
		/// <param name="socu">用户的属性名称
		/// (GUID、USER_GUID、LOGON_NAME、ORIGINAL_SORT、GLOBAL_SORT、ALL_PATH_NAME)
		/// </param>
		/// <param name="strUserParentGuid">指定用户所在的父部门标识(可空)</param>
		/// <param name="objectXmlDoc">判断对象的属性数据值</param>
		/// <param name="soc">机构的属性名称
		/// (GUID、ORIGINAL_SORT、GLOBAL_SORT、ALL_PATH_NAME)
		/// </param>
		/// <param name="lod">是否包含被逻辑删除的成员</param>
		/// <param name="strHideType">查询中要求屏蔽的数据(对应于配置文件HideTypes.xml中的配置)</param>
		/// <param name="bDirect">是否直接从属(无中间部门)</param>
		/// <param name="bFitAll">是否要求完全匹配(存在于指定的每一个部门中)</param>
		/// <returns>判断一个用户是否存在于指定的多个部门之中</returns>
		/// <remarks>
		/// objectXmlDoc的结构如下:
		/// <code>
		///		<OBJECTS>
		///			<ORGANIZATIONS oValue="" rankCode="" />
		///			<GROUPS oValue="" rankCode="" />
		///			<USERS oValue="" parentGuid="" />
		///		</OBJECTS>
		/// </code>
		/// </remarks>
		public static bool IsUserInObjects(string strUserValue,
			SearchObjectColumn socu,
			string strUserParentGuid,
			XmlDocument objectXmlDoc,
			SearchObjectColumn soc,
			ListObjectDelete lod,
			string strHideType,
			bool bDirect,
			bool bFitAll)
		{
			string cacheKey = Common.InnerCacheHelper.BuildCacheKey(strUserValue,
				socu,
				strUserParentGuid,
				objectXmlDoc,
				soc,
				lod,
				strHideType,
				bDirect,
				bFitAll);

			bool result;
			//if (false == IsUserInObjectsQueue.Instance.TryGetValue(cacheKey, out result))
			//{
			//    lock (typeof(IsUserInObjectsQueue))
			//    {
			if (false == IsUserInObjectsQueue.Instance.TryGetValue(cacheKey, out result))
			{
				string strUserColName = OGUCommonDefine.GetSearchObjectColumn(socu);
				string strObjColName = OGUCommonDefine.GetSearchObjectColumn(soc);

				strHideType = OGUCommonDefine.GetHideType(strHideType);
				string strHideList = GetHideTypeFromXmlForLike(strHideType, "OU_USERS");

				string strDirect = "%";
				if (bDirect)
					strDirect = "______";

				string strUserLimit = " AND " + DatabaseSchema.Instence.GetTableColumns(strUserColName, "OU_USERS", "USERS")
					+ " = " + TSqlBuilder.Instance.CheckQuotationMark(strUserValue, true);
				if (strUserParentGuid.Length > 0)
					strUserLimit += "	AND OU_USERS.PARENT_GUID = " + TSqlBuilder.Instance.CheckQuotationMark(strUserParentGuid, true);

				string strDelUser = GetSqlSearchStatus("OU_USERS", lod);
				StringBuilder strB = new StringBuilder(1024);
				#region 内部实现
				XmlElement root = objectXmlDoc.DocumentElement;
				foreach (XmlElement elem in root.ChildNodes)
				{
					string strRankLimit = string.Empty;
					if (elem.GetAttribute("rankCode") != null && elem.GetAttribute("rankCode").Length > 0)
						strRankLimit = " AND RANK_DEFINE.SORT_ID <= (SELECT SORT_ID FROM RANK_DEFINE WHERE CODE_NAME = "
							+ TSqlBuilder.Instance.CheckQuotationMark(elem.GetAttribute("rankCode"), true) + ") ";

					switch (elem.LocalName)
					{
						case "ORGANIZATIONS":
							strB.Append(@"
							SELECT DISTINCT ORGANIZATIONS.GUID, OU_USERS.USER_GUID 
							FROM OU_USERS, ORGANIZATIONS, USERS JOIN RANK_DEFINE 
								ON USERS.RANK_CODE = RANK_DEFINE.CODE_NAME
								" + strRankLimit + @"
							WHERE OU_USERS.USER_GUID = USERS.GUID
								AND OU_USERS.ORIGINAL_SORT LIKE ORGANIZATIONS.ORIGINAL_SORT + "
									  + TSqlBuilder.Instance.CheckQuotationMark(strDirect, true) + @" 
								AND " + DatabaseSchema.Instence.GetTableColumns(strObjColName, "ORGANIZATIONS") + @" = "
										  + TSqlBuilder.Instance.CheckQuotationMark(elem.GetAttribute("oValue"), true) + @"
								AND (" + strDelUser + @") 
								" + strUserLimit + strHideList + @";");
							break;
						case "GROUPS":
							strB.Append(@"
							SELECT DISTINCT GROUPS.GUID, OU_USERS.USER_GUID
							FROM GROUPS, GROUP_USERS, OU_USERS, USERS JOIN RANK_DEFINE 
								ON USERS.RANK_CODE = RANK_DEFINE.CODE_NAME
								" + strRankLimit + @"
							WHERE GROUPS.GUID = GROUP_USERS.GROUP_GUID
								AND OU_USERS.USER_GUID = GROUP_USERS.USER_GUID
								AND OU_USERS.PARENT_GUID = GROUP_USERS.USER_PARENT_GUID
								AND OU_USERS.USER_GUID = USERS.GUID
								AND " + DatabaseSchema.Instence.GetTableColumns(strObjColName, "GROUPS") + @" = "
										  + TSqlBuilder.Instance.CheckQuotationMark(elem.GetAttribute("oValue"), true) + @"
								AND (" + strDelUser + @") 
								" + strUserLimit + strHideList + @";");
							break;
						case "USERS":
							strB.Append(@"
							SELECT DISTINCT USERS.GUID, OU_USERS.USER_GUID
							FROM OU_USERS, USERS
							WHERE OU_USERS.USER_GUID = USERS.GUID
								AND " + DatabaseSchema.Instence.GetTableColumns(strObjColName, "OU_USERS", "USERS") + " =  "
										  + TSqlBuilder.Instance.CheckQuotationMark(elem.GetAttribute("oValue"), true) + @"
								AND (" + strDelUser + @")" + strUserLimit + strHideList + @";");
							break;
						default: ExceptionHelper.TrueThrow(true, "对不起,系统没有对应处理“" + elem.LocalName + "”的相应程序!");
							break;
					}
				}
				#endregion
				result = CheckIsUserInOrganizations(strB, bFitAll);

				IsUserInObjectsQueue.Instance.Add(cacheKey, result, InnerCacheHelper.PrepareDependency());
			}
			//    }
			//}

			return result;
		}
示例#5
0
		/// <summary>
		/// 形成根据指定条件查询“人员组”的SQL语句
		/// </summary>
		/// <param name="strOrgValues">指定的范围机构标识(多个之间采用","分隔)</param>
		/// <param name="soc">用户的属性名称
		/// (GUID、USER_GUID、LOGON_NAME、ORIGINAL_SORT、GLOBAL_SORT、ALL_PATH_NAME)</param>
		/// <param name="strLikeName">“人员组”上的名称模糊匹配对象</param>
		/// <param name="bLike">是否采用模糊匹配</param>
		/// <param name="strAttr">要求获取的字段属性</param>
		/// <param name="iLod">查询删除的对象策略</param>
		/// <param name="iDep">要求查询的深度</param>
		/// <param name="strHideType">要求屏蔽的类型设置</param>
		/// <param name="rootPath">传入的ORIGINAL_SORT</param>
		/// <returns>形成根据指定条件查询“人员组”的SQL语句</returns>
		/// 
		//2009-05-06 删除 RANK_DEFINE 约束,调整ORIGINAL_SORT约束
		private static string QueryGroupsByCondition2(string strOrgValues,
			SearchObjectColumn soc,
			string strLikeName,
			bool bLike,
			string strAttr,
			ListObjectDelete iLod,
			int iDep,
			string strHideType,
			string rootPath)
		{
			string strColName = OGUCommonDefine.GetSearchObjectColumn(soc);

			StringBuilder strB = new StringBuilder(1024);
			strB.Append(@"	SELECT 'GROUPS' AS OBJECTCLASS, " + DatabaseSchema.Instence.GetTableColumns(strAttr, "GROUPS") + @"
							FROM GROUPS
							WHERE ( " + GetSqlSearchParOriginal2("GROUPS", iDep, rootPath) + " )");

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

			strB.Append(BuildSearchCondition("GROUPS.SEARCH_NAME", strLikeName, bLike));

			if (strHideType.Length > 0)
				strB.Append(GetHideTypeFromXmlForLike(strHideType, "GROUPS"));

			return strB.ToString();
		}
示例#6
0
		/// <summary>
		/// 形成根据指定条件查询“人员”的SQL语句
		/// </summary>
		/// <param name="strOrgValues">指定的范围机构标识(多个之间采用","分隔)</param>
		/// <param name="soc">用户的属性名称
		/// (GUID、USER_GUID、LOGON_NAME、ORIGINAL_SORT、GLOBAL_SORT、ALL_PATH_NAME)</param>
		/// <param name="strLikeName">“人员”上的名称模糊匹配对象</param>
		/// <param name="bLike">是否采用模糊匹配</param> 
		/// <param name="strAttr">要求获取的字段属性</param>
		/// <param name="iListObjType">用于是否查询兼职问题</param>
		/// <param name="iLod">查询删除的对象策略</param>
		/// <param name="iDep">要求查询的深度</param>
		/// <param name="strHideType">要求屏蔽的类型设置</param>
		/// <param name="rootPath">传入的ORIGINAL_SORT</param>
		/// <returns>形成根据指定条件查询“人员”的SQL语句</returns>
		/// 
		//2009-05-06 删除 RANK_DEFINE 约束,调整ORIGINAL_SORT约束
		private static string QueryUsersByCondition2(string strOrgValues,
			SearchObjectColumn soc,
			string strLikeName,
			bool bLike,
			string strAttr,
			int iListObjType,
			ListObjectDelete iLod,
			int iDep,
			string strHideType,
			string rootPath)
		{
			string strColName = OGUCommonDefine.GetSearchObjectColumn(soc);

			StringBuilder strB = new StringBuilder(1024);
			strB.Append(@"	SELECT 'USERS' AS OBJECTCLASS, "
							+ DatabaseSchema.Instence.GetTableColumns(strAttr, "USERS", "OU_USERS") + @"
							FROM USERS , OU_USERS
							WHERE USERS.GUID = OU_USERS.USER_GUID 
								AND ( " + GetSqlSearchParOriginal2("OU_USERS", iDep, rootPath) + " )");

			string strListDelete = GetSqlSearchStatus("OU_USERS", iLod);

			if (strListDelete.Length > 0)
				strB.Append(" \n AND ( " + strListDelete + " ) ");

			if ((iListObjType & (int)ListObjectType.SIDELINE) == 0)
				strB.Append(" \n AND OU_USERS.SIDELINE = 0 ");

			if (strLikeName != SearchAllTerm)
				strB.Append(string.Format(@" AND (OU_USERS.SEARCH_NAME  like '%{0}%')", strLikeName));
			else
				strB.Append(BuildSearchCondition("OU_USERS.SEARCH_NAME", strLikeName, bLike));

			//strB.Append(BuildSearchCondition("OU_USERS.SEARCH_NAME", strLikeName, bLike));

			if (strHideType.Length > 0)
				strB.Append(GetHideTypeFromXmlForLike(strHideType, "OU_USERS"));

			return strB.ToString();
		}
示例#7
0
		/// <summary>
		/// 
		/// </summary>
		/// <param name="strGroupValues"></param>
		/// <param name="socg"></param>
		/// <param name="strNameLike"></param>
		/// <param name="strSortColumn"></param>
		/// <param name="strAttrs"></param>
		/// <param name="strOrgValues"></param>
		/// <param name="soco"></param>
		/// <param name="strUserRankCodeName"></param>
		/// <param name="lod"></param>
		/// <param name="iPageNo"></param>
		/// <param name="iPageSize"></param>
		/// <returns></returns>
		public static DataSet GetUsersInGroups(string strGroupValues,
			SearchObjectColumn socg,
			string strNameLike,
			string strSortColumn,
			string strAttrs,
			string strOrgValues,
			SearchObjectColumn soco,
			string strUserRankCodeName,
			ListObjectDelete lod,
			int iPageNo,
			int iPageSize)
		{
			string cacheKey = InnerCacheHelper.BuildCacheKey(strGroupValues,
				socg,
				strNameLike,
				strSortColumn,
				strAttrs,
				strOrgValues,
				soco,
				strUserRankCodeName,
				lod,
				iPageNo,
				iPageSize);
			DataSet result;
			//if (false == GetUsersInGroupsQueue.Instance.TryGetValue(cacheKey, out result))
			//{
			//    lock (typeof(GetUsersInGroupsQueue))
			//    {
			if (false == GetUsersInGroupsQueue.Instance.TryGetValue(cacheKey, out result))
			{
				using (DbContext context = DbContext.GetContext(CommonResource.AccreditConnAlias))
				{
					Database database = DatabaseFactory.Create(context);
					strAttrs = OGUCommonDefine.CombinateAttr(strAttrs);
					#region SQL Prepare
					string strSql = @"
				SELECT 'USERS' AS OBJECTCLASS, GROUP_USERS.GROUP_GUID, "
						+ DatabaseSchema.Instence.GetTableColumns(strAttrs, "USERS", "OU_USERS", "RANK_DEFINE") + @"
				FROM ORGANIZATIONS, GROUPS, GROUP_USERS, OU_USERS, USERS LEFT JOIN RANK_DEFINE 
					ON RANK_DEFINE.CODE_NAME = USERS.RANK_CODE
					{2}
				WHERE " + DatabaseSchema.Instence.GetTableColumns(OGUCommonDefine.GetSearchObjectColumn(socg), "GROUPS") + @" IN ({0})
					AND GROUP_USERS.GROUP_GUID = GROUPS.GUID
					AND GROUP_USERS.USER_GUID = OU_USERS.USER_GUID
					AND GROUP_USERS.USER_PARENT_GUID = OU_USERS.PARENT_GUID
					AND ({1})
					AND USERS.GUID = GROUP_USERS.USER_GUID
					AND OU_USERS.ORIGINAL_SORT LIKE ORGANIZATIONS.ORIGINAL_SORT + '%'
					{3}
					{4}
				ORDER BY GROUPS.GLOBAL_SORT, "
							+ TSqlBuilder.Instance.CheckQuotationMark(strSortColumn == string.Empty ? "GROUP_USERS.INNER_SORT" : strSortColumn, false);

					string strOrgLimit = string.Empty;
					if (strOrgValues.Length > 0)
						strOrgLimit = " AND " + DatabaseSchema.Instence.GetTableColumns(OGUCommonDefine.GetSearchObjectColumn(soco), "ORGANIZATIONS")
							+ " IN (" + OGUCommonDefine.AddMulitStrWithQuotationMark(strOrgValues) + ") ";
					else
						strOrgLimit = " AND ORGANIZATIONS.GUID = "
							+ TSqlBuilder.Instance.CheckQuotationMark(OGUCommonDefine.DBValueToString(OGUReader.GetRootDSE().Tables[0].Rows[0]["GUID"]), true);

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

					string strNameLikeWhere = string.Empty;
					if (strNameLike != string.Empty)
					{
						strNameLike = strNameLike.Replace("*", "");
						strNameLikeWhere = " AND (USERS.LOGON_NAME LIKE '%' + " + TSqlBuilder.Instance.CheckQuotationMark(strNameLike, true) + @" + '%' 
						OR OU_USERS.OBJ_NAME LIKE '%' + " + TSqlBuilder.Instance.CheckQuotationMark(strNameLike, true) + @" + '%' 
						OR OU_USERS.DISPLAY_NAME LIKE '%' + " + TSqlBuilder.Instance.CheckQuotationMark(strNameLike, true) + @" + '%') ";
					}
					#endregion
					strSql = string.Format(strSql, OGUCommonDefine.AddMulitStrWithQuotationMark(strGroupValues), GetSqlSearchStatus("OU_USERS", lod), strRankLimit, strOrgLimit, strNameLikeWhere);
					//if (iPageNo >= 0 && iPageSize > 0)
					//    result = database.ExecuteDataSet(Com, strSql, "GROUPS", iPageNo, iPageSize);
					//else
					result = database.ExecuteDataSet(CommandType.Text, strSql, iPageNo, iPageSize, "USERS");
				}
				GetUsersInGroupsQueue.Instance.Add(cacheKey, result, InnerCacheHelper.PrepareDependency());
			}
			//    }
			//}
			return result;
		}
示例#8
0
		/// <summary>
		/// 按照不同的要求查询系统中的所有符合条件的数据
		/// </summary>
		/// <param name="strOrgValues">指定父机构(多个之间采用","分隔,空就采用默认)</param>
		/// <param name="soc">查询要求的查询列名称
		/// (GUID、USER_GUID、LOGON_NAME、ORIGINAL_SORT、GLOBAL_SORT、ALL_PATH_NAME)
		/// </param>
		/// <param name="strLikeName">名称中的(模糊匹配对象)</param>
		/// <param name="bLike">是否采用模糊匹配</param>      
		/// <param name="strAttr">要求获取的字段</param>
		/// <param name="iListObjType">要求查询的对象类型</param>
		/// <param name="iLod">查询删除的对象策略</param>
		/// <param name="iDep">查询深度</param>
		/// <param name="strHideType">要求屏蔽的类型设置</param>
		/// <param name="rtnRowLimit">返回行数限制</param>
		/// <returns>按照不同的要求查询系统中的所有符合条件的数据</returns>
		/// 
		//2009-05-06 删除 RANK_DEFINE 约束,调整ORIGINAL_SORT约束,增加返回行数限制:-1(全部)
		public static DataSet QueryOGUByCondition2(string strOrgValues,
								SearchObjectColumn soc,
								string strLikeName,
								bool bLike,
								string strAttr,
								int iListObjType,
								ListObjectDelete iLod,
								int iDep,
								string strHideType,
								int rtnRowLimit)
		{
			string cacheKey = InnerCacheHelper.BuildCacheKey(strOrgValues,
				soc,
				strLikeName,
				bLike,
				strAttr,
				iListObjType,
				iDep,
				strHideType,
				rtnRowLimit);

			DataSet result;

			//得到All_Path_Name
			DataSet dsRootOrg = OGUReader.GetObjectsDetail("ORGANIZATIONS",
						strOrgValues,
						SearchObjectColumn.SEARCH_GUID,
						string.Empty,
						SearchObjectColumn.SEARCH_GUID);

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

			if (false == QueryOGUByConditionQueue.Instance.TryGetValue(cacheKey, out result))
			{
				using (DbContext context = DbContext.GetContext(CommonResource.AccreditConnAlias))
				{
					if (strOrgValues.Length == 0)
					{
						strOrgValues = OGUCommonDefine.DBValueToString(OGUReader.GetRootDSE().Tables[0].Rows[0]["GUID"]);
						soc = SearchObjectColumn.SEARCH_GUID;
					}

					strAttr = OGUCommonDefine.CombinateAttr(strAttr);

					strHideType = OGUCommonDefine.GetHideType(strHideType);

					strLikeName = strLikeName.Replace("*", "%");

					StringBuilder strB = new StringBuilder(1024);
					if ((iListObjType & (int)ListObjectType.ORGANIZATIONS) != 0)
						strB.Append(" ( " + QueryOrganizationsByCondition2(strOrgValues, soc, strLikeName, bLike, strAttr, iLod, iDep, strHideType, rootPath) + " \n )");

					if ((iListObjType & (int)ListObjectType.GROUPS) != 0)
					{
						if (strB.Length > 0)
							strB.Append(" \n UNION \n ");
						strB.Append(" ( " + QueryGroupsByCondition2(strOrgValues, soc, strLikeName, bLike, strAttr, iLod, iDep, strHideType, rootPath) + " \n )");
					}

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

						strB.Append(" ( " + QueryUsersByCondition2(strOrgValues, soc, strLikeName, bLike, strAttr, iListObjType, iLod, iDep, strHideType, rootPath) + " \n )");
					}

					string strSql = string.Empty;
					if (rtnRowLimit >= 0)
					{
						strSql = "SELECT top " + rtnRowLimit + " * FROM ( " + strB.ToString() + " ) RESULT ORDER BY GLOBAL_SORT";
					}
					else
					{
						strSql = "SELECT * FROM ( " + strB.ToString() + " ) RESULT ORDER BY GLOBAL_SORT";
					}

					Database database = DatabaseFactory.Create(context);
					result = database.ExecuteDataSet(CommandType.Text, strSql);
				}
				QueryOGUByConditionQueue.Instance.Add(cacheKey, result, InnerCacheHelper.PrepareDependency());
			}

			return result;
		}
示例#9
0
		/// <summary>
		/// 获取指定对象中的所有用户对象
		/// </summary>
		/// <param name="xmlObjDoc">要求被查询的数据对象</param>
		/// <param name="soc">查询要求的查询列名称
		/// (GUID、USER_GUID、LOGON_NAME、ORIGINAL_SORT、GLOBAL_SORT、ALL_PATH_NAME)
		/// </param>
		/// <param name="strOrgLimitValues">要求对象所在机构的范围内(如果没有将采用系统配置数据,可空)</param>
		/// <param name="soco">要求所在机构的范围的查询列名称
		/// (GUID、USER_GUID、LOGON_NAME、ORIGINAL_SORT、GLOBAL_SORT、ALL_PATH_NAME)</param>
		/// <param name="lod">系统中被逻辑删除对象是否查询取出</param>
		/// <param name="strAttrs">要求获得的数据属性</param>
		/// <returns>获取指定对象中的所有用户对象</returns>
		/// <remarks>
		/// <code>
		/// xmlObjDoc的结构:
		///		<OBJECTS>
		///			<ORGANIZATIONS oValue="" rankCode="" />
		///			<GROUPS oValue="" rankCode="" />
		///			<USERS oValue="" parentGuid="" />
		///		</OBJECTS>
		/// </code>
		/// </remarks>
		public static DataSet GetAllUsersInAllObjects(XmlDocument xmlObjDoc,
			SearchObjectColumn soc,
			string strOrgLimitValues,
			SearchObjectColumn soco,
			ListObjectDelete lod,
			string strAttrs)
		{
			return GetAllUsersInAllObjects(xmlObjDoc, soc, strOrgLimitValues, soco, ListObjectType.ALL_TYPE, lod, strAttrs);
		}
示例#10
0
		/// <summary>
		/// 获取指定对象中的所有用户对象
		/// </summary>
		/// <param name="xmlObjDoc">要求被查询的数据对象</param>
		/// <param name="soc">查询要求的查询列名称
		/// (GUID、USER_GUID、LOGON_NAME、ORIGINAL_SORT、GLOBAL_SORT、ALL_PATH_NAME)</param>
		/// <param name="strOrgLimitValues">要求对象所在机构的范围内(如果没有将采用系统配置数据,可空)</param>
		/// <param name="soco">要求所在机构的范围的查询列名称
		/// (GUID、USER_GUID、LOGON_NAME、ORIGINAL_SORT、GLOBAL_SORT、ALL_PATH_NAME)</param>
		/// <param name="lot">要求被查询的数据对象类型(主要是用于辨别是否要求查询兼职人员)</param>
		/// <param name="lod">系统中被逻辑删除对象是否查询取出</param>
		/// <param name="strHideType">要求隐藏的设置类型</param>
		/// <param name="strAttrs">要求获得的数据属性</param>
		/// <returns>获取指定对象中的所有用户对象</returns>
		/// <remarks>
		/// <code>
		/// xmlObjDoc的结构:
		///		<OBJECTS>
		///			<ORGANIZATIONS oValue="" rankCode="" />
		///			<GROUPS oValue="" rankCode="" />
		///			<USERS oValue="" parentGuid="" />
		///		</OBJECTS>
		/// </code>
		/// </remarks>
		public static DataSet GetAllUsersInAllObjects(XmlDocument xmlObjDoc,
			SearchObjectColumn soc,
			string strOrgLimitValues,
			SearchObjectColumn soco,
			ListObjectType lot,
			ListObjectDelete lod,
			string strHideType,
			string strAttrs)
		{
			string cacheKey = InnerCacheHelper.BuildCacheKey(xmlObjDoc.DocumentElement.OuterXml,
				soc,
				strOrgLimitValues,
				soco,
				lot,
				lod,
				strHideType,
				strAttrs);
			DataSet result;
			//if (false == GetAllUsersInAllObjectsQueue.Instance.TryGetValue(cacheKey, out result))
			//{
			//    lock (typeof(GetAllUsersInAllObjectsQueue))
			//    {
			if (false == GetAllUsersInAllObjectsQueue.Instance.TryGetValue(cacheKey, out result))
			{
				#region Prepare Db
				ExceptionHelper.TrueThrow(xmlObjDoc.DocumentElement.ChildNodes.Count <= 0, "对不起,系统没有给定要求查询的数据对象!");
				strAttrs = OGUCommonDefine.CombinateAttr(strAttrs);
				string strObjColName = OGUCommonDefine.GetSearchObjectColumn(soc);

				string strDelUser = GetSqlSearchStatus("OU_USERS", lod);

				strHideType = OGUCommonDefine.GetHideType(strHideType);
				string strHideList = GetHideTypeFromXmlForLike(strHideType, "OU_USERS");

				string strListObjectType = string.Empty;
				if ((lot & ListObjectType.SIDELINE) == 0)
					strListObjectType = " AND OU_USERS.SIDELINE = 0 ";

				if (strOrgLimitValues.Length == 0)
				{
					strOrgLimitValues = AccreditSection.GetConfig().AccreditSettings.OguRootName;// (new SysConfig()).GetDataFromConfig("OGURootName", string.Empty);
					ExceptionHelper.TrueThrow<ApplicationException>(string.IsNullOrEmpty(strOrgLimitValues),
						"对不起,您没有配置好系统默认指定的初始机构!请检查web.config中的configuration\\appSettings\\<add key=\"OGURootName\" value=\"\" />");
					soco = SearchObjectColumn.SEARCH_ALL_PATH_NAME;
				}
				#endregion
				StringBuilder strB = new StringBuilder(1024);

				foreach (XmlElement elem in xmlObjDoc.DocumentElement.ChildNodes)
				{
					string strRankLimit = elem.GetAttribute("rankCode");
					if (strRankLimit != null && strRankLimit.Length > 0)
						strRankLimit = " AND RANK_DEFINE.SORT_ID <= (SELECT SORT_ID FROM RANK_DEFINE WHERE CODE_NAME = "
							+ TSqlBuilder.Instance.CheckQuotationMark(strRankLimit, true) + " ) ";
					else
						strRankLimit = string.Empty;

					string strSql = string.Empty;
					switch (elem.LocalName)
					{
						case "ORGANIZATIONS":
							#region ORGANIZATIONS
							strSql = @"
							SELECT 'USERS' AS OBJECTCLASS, " + DatabaseSchema.Instence.GetTableColumns(strAttrs, "USERS", "OU_USERS", "RANK_DEFINE") + @"
							FROM ORGANIZATIONS, OU_USERS, USERS JOIN RANK_DEFINE 
								ON RANK_DEFINE.CODE_NAME = USERS.RANK_CODE
								" + strRankLimit + @",
								(
									SELECT ORIGINAL_SORT
									FROM ORGANIZATIONS
									WHERE " + OGUCommonDefine.GetSearchObjectColumn(soco) + " IN ("
												+ OGUCommonDefine.AddMulitStrWithQuotationMark(strOrgLimitValues) + @" )
								) ORG_LIMIT
							WHERE USERS.GUID = OU_USERS.USER_GUID 
								AND " + DatabaseSchema.Instence.GetTableColumns(strObjColName, "ORGANIZATIONS") + " = "
										  + TSqlBuilder.Instance.CheckQuotationMark(elem.GetAttribute("oValue"), true) + @"
								AND OU_USERS.ORIGINAL_SORT LIKE ORGANIZATIONS.ORIGINAL_SORT + '%'
								AND OU_USERS.ORIGINAL_SORT LIKE ORG_LIMIT.ORIGINAL_SORT + '%'
								AND (" + strDelUser + @") 
								" + strHideList + strListObjectType;
							break;
							#endregion
						case "GROUPS":
							#region GROUPS
							strSql = @"
							SELECT 'USERS' AS OBJECTCLASS, " + DatabaseSchema.Instence.GetTableColumns(strAttrs, "USERS", "OU_USERS", "RANK_DEFINE") + @"
							FROM GROUPS, GROUP_USERS, OU_USERS, USERS JOIN RANK_DEFINE 
								ON RANK_DEFINE.CODE_NAME = USERS.RANK_CODE
								" + strRankLimit + @",
								(
									SELECT ORIGINAL_SORT
									FROM ORGANIZATIONS
									WHERE " + OGUCommonDefine.GetSearchObjectColumn(soco) + " IN ("
												+ OGUCommonDefine.AddMulitStrWithQuotationMark(strOrgLimitValues) + @" )
								) ORG_LIMIT
							WHERE GROUPS.GUID = GROUP_USERS.GROUP_GUID
								AND GROUP_USERS.USER_PARENT_GUID = OU_USERS.PARENT_GUID
								AND GROUP_USERS.USER_GUID = OU_USERS.USER_GUID
								AND USERS.GUID = OU_USERS.USER_GUID 
								AND OU_USERS.ORIGINAL_SORT LIKE ORG_LIMIT.ORIGINAL_SORT + '%'
								AND " + DatabaseSchema.Instence.GetTableColumns(strObjColName, "GROUPS") + " = "
										  + TSqlBuilder.Instance.CheckQuotationMark(elem.GetAttribute("oValue"), true) + @"
								AND (" + strDelUser + @") 
								" + strHideList + strListObjectType;
							break;
							#endregion
						case "USERS":
							#region USERS
							strSql = @"
							SELECT 'USERS' AS OBJECTCLASS, "
								+ DatabaseSchema.Instence.GetTableColumns(strAttrs, "USERS", "OU_USERS", "RANK_DEFINE") + @"
							FROM OU_USERS, USERS JOIN RANK_DEFINE 
								ON RANK_DEFINE.CODE_NAME = USERS.RANK_CODE
								" + strRankLimit + @",
								(
									SELECT ORIGINAL_SORT
									FROM ORGANIZATIONS
									WHERE " + OGUCommonDefine.GetSearchObjectColumn(soco) + " IN ("
												+ OGUCommonDefine.AddMulitStrWithQuotationMark(strOrgLimitValues) + @" )
								) ORG_LIMIT
							WHERE OU_USERS.USER_GUID = USERS.GUID
								AND OU_USERS.ORIGINAL_SORT LIKE ORG_LIMIT.ORIGINAL_SORT + '%'
								AND " + DatabaseSchema.Instence.GetTableColumns(strObjColName, "OU_USERS", "USERS") + " = "
										  + TSqlBuilder.Instance.CheckQuotationMark(elem.GetAttribute("oValue"), true) + @"
								AND (" + strDelUser + @") 
								" + strHideList + strListObjectType;
							break;
							#endregion
						default: ExceptionHelper.TrueThrow(true, "对不起,系统没有对应处理“" + elem.LocalName + "”的相应程序!");
							break;
					}

					if (strB.Length > 0)
						strB.Append(Environment.NewLine + " UNION " + Environment.NewLine);

					strB.Append("(" + strSql + ")");
				}

				using (DbContext context = DbContext.GetContext(CommonResource.AccreditConnAlias))
				{
					Database database = DatabaseFactory.Create(context);
					string sql = "SELECT * FROM (" + strB.ToString() + ") A ORDER BY GLOBAL_SORT";
					result = database.ExecuteDataSet(CommandType.Text, sql);
				}

				GetAllUsersInAllObjectsQueue.Instance.Add(cacheKey, result, InnerCacheHelper.PrepareDependency());
			}
			//    }
			//}
			return result;
		}
示例#11
0
		///// <summary>
		///// 判断用户群是否存在于指定的多个部门之中
		///// </summary>
		///// <param name="xmlUserDoc">用户群标识(采用XML方式)</param>
		///// <param name="socu">用户的属性名称
		///// (GUID、USER_GUID、LOGON_NAME、ORIGINAL_SORT、GLOBAL_SORT、ALL_PATH_NAME)</param>
		///// <param name="xmlObjDoc">机构群(采用XML方式)</param>
		///// <param name="soc">机构的属性名称
		///// (GUID、ORIGINAL_SORT、GLOBAL_SORT、ALL_PATH_NAME)</param>
		///// <param name="lod">是否包含被逻辑删除的成员</param>
		///// <param name="strHideType">查询中要求屏蔽的数据(对应于配置文件HideTypes.xml中的配置)</param>
		///// <param name="bDirect">是否直接从属(无中间部门)</param>
		///// <remarks>
		///// <code>
		///// xmlUserDoc的结构如下(说明oValue必填,与socu配合使用;parentGuid可不填):
		/////		<USERS>
		/////			<USERS oValue="" parentGuid="" />
		/////			<USERS oValue="" parentGuid="" />
		/////		</USERS>
		///// xmlObjDoc的结构如下(说明oValue必填,与soc配合使用;parentGuid可不填;rankCode可不填):
		/////		<OBJECTS>
		/////			<ORGANIZATIONS oValue="" rankCode="" />
		/////			<GROUPS oValue="" rankCode="" />
		/////			<USERS oValue="" parentGuid="" />
		/////		</OBJECTS>
		///// </code>
		///// xmlObjDoc的返回结果(字节点方式嵌入返回):
		///// <OBJECTS>
		/////			<ORGANIZATIONS oValue="" rankCode="" >
		/////				<USERS oValue="" parentGuid=""/>
		/////				<USERS oValue="" parentGuid=""/>
		/////			</ORGANIZATIONS>
		/////			<GROUPS oValue="" rankCode="" >
		/////				<USERS oValue="" parentGuid=""/>
		/////				<USERS oValue="" parentGuid=""/>
		/////			</GROUPS>
		/////			<USERS oValue="" parentGuid="" >
		/////				<USERS oValue="" parentGuid=""/>
		/////			</USERS>
		/////		</OBJECTS>
		///// </remarks>
		//public static void CheckUserInObjects(XmlDocument xmlUserDoc, SearchObjectColumn socu, XmlDocument xmlObjDoc, SearchObjectColumn soc, ListObjectDelete lod, string strHideType, bool bDirect)
		//{
		//    DataAccess da = new DataAccess(OGUCommonDefine.STR_CONN);

		//    using (da.dBContextInfo)
		//    {
		//        da.dBContextInfo.OpenConnection();

		//        CheckUserInObjects(xmlUserDoc, socu, xmlObjDoc, soc, lod, strHideType, bDirect, da);
		//    }
		//}

		/// <summary>
		/// 判断用户群是否存在于指定的多个部门之中
		/// </summary>
		/// <param name="xmlUserDoc">用户群标识(采用XML方式)</param>
		/// <param name="socu">用户的属性名称
		/// (GUID、USER_GUID、LOGON_NAME、ORIGINAL_SORT、GLOBAL_SORT、ALL_PATH_NAME)</param>
		/// <param name="xmlObjDoc">机构群(采用XML方式)</param>
		/// <param name="soc">机构的属性名称
		/// (GUID、ORIGINAL_SORT、GLOBAL_SORT、ALL_PATH_NAME)</param>
		/// <param name="lod">是否包含被逻辑删除的成员</param>
		/// <param name="bDirect">是否直接从属(无中间部门)</param>
		/// <remarks>
		/// <code>
		/// xmlUserDoc的结构如下(说明oValue必填,与socu配合使用;parentGuid可不填):
		///		<USERS>
		///			<USERS oValue="" parentGuid="" />
		///			<USERS oValue="" parentGuid="" />
		///		</USERS>
		/// xmlObjDoc的结构如下(说明oValue必填,与soc配合使用;parentGuid可不填;rankCode可不填):
		///		<OBJECTS>
		///			<ORGANIZATIONS oValue="" rankCode="" />
		///			<GROUPS oValue="" rankCode="" />
		///			<USERS oValue="" parentGuid="" />
		///		</OBJECTS>
		/// </code>
		/// xmlObjDoc的返回结果(字节点方式嵌入返回):
		/// <OBJECTS>
		///			<ORGANIZATIONS oValue="" rankCode="" >
		///				<USERS oValue="" parentGuid=""/>
		///				<USERS oValue="" parentGuid=""/>
		///			</ORGANIZATIONS>
		///			<GROUPS oValue="" rankCode="" >
		///				<USERS oValue="" parentGuid=""/>
		///				<USERS oValue="" parentGuid=""/>
		///			</GROUPS>
		///			<USERS oValue="" parentGuid="" >
		///				<USERS oValue="" parentGuid=""/>
		///			</USERS>
		///		</OBJECTS>
		/// </remarks>
		public static void CheckUserInObjects(XmlDocument xmlUserDoc,
			SearchObjectColumn socu,
			XmlDocument xmlObjDoc,
			SearchObjectColumn soc,
			ListObjectDelete lod,
			bool bDirect)
		{
			CheckUserInObjects(xmlUserDoc, socu, xmlObjDoc, soc, lod, string.Empty, bDirect);
		}