/// <summary> /// 构造方法 /// </summary> /// <param name="source"></param> public OguDataCollection(OguDataCollection <T> source) { for (int i = 0; i < source.Count; i++) { this.Add(source[i]); } }
/// <summary> /// 从矩阵中获得对象。这主要取决于上下文中的参数 /// </summary> /// <returns></returns> public OguDataCollection <IOguObject> GetObjectsFromMatrix() { OguDataCollection <IOguObject> result = new OguDataCollection <IOguObject>(); SOARoleContext context = SOARoleContext.Current; if (context != null && context.QueryParams.Count > 0) { SOARolePropertyRowCollection matchedRows = this.Rows.Query(context.QueryParams); matchedRows = matchedRows.ExtractMatrixRows(); foreach (SOARolePropertyRowUsers rowUsers in matchedRows.GenerateRowsUsers()) { foreach (IUser user in rowUsers.Users) { if (result.Contains(user) == false) { result.Add(user); } } } } return(result); }
private static void FillRoleUsers(string roleName, OguDataCollection <IUser> users) { SOARole role = new SOARole(roleName); WfRoleResourceDescriptor roleResource = new WfRoleResourceDescriptor(role); roleResource.FillUsers(users); }
private static void FillAURoleUsers(string roleFullCodeName, OguDataCollection <IUser> users) { WrappedAUSchemaRole role = WrappedAUSchemaRole.FromCodeName(roleFullCodeName); if (role != null) { role.FillUsers(SOARoleContext.CurrentProcess, users); } }
private bool ExtractDynamicRoleMatrixRows(string roleName, SOARolePropertyRowCollection extractedRows) { OguDataCollection <IUser> users = new OguDataCollection <IUser>(); FillInternalDynamicRoleUsers(roleName, users); extractedRows.CopyFrom(this.MergeActivityRowPropertiesByUsers(users)); return(users.Count > 0); }
/// <summary> /// 得到用户的所有兼职信息的TopOU /// </summary> /// <returns></returns> public OguDataCollection <IOrganization> GetCurrentAllTopOUs() { OguDataCollection <IOrganization> result = new OguDataCollection <IOrganization>(); foreach (IUser user in DeluxeIdentity.CurrentUser.AllRelativeUserInfo) { result.Add(user.TopOU); } return(result); }
/// <summary> /// 在SOARolePropertyRowUsersCollection中填充角色中的人员 /// </summary> /// <param name="existedRowsUsers"></param> /// <param name="getType"></param> /// <param name="getOp"></param> /// <param name="action"></param> private void FillRoleTypeUsers(SOARolePropertyRowUsersCollection existedRowsUsers, Func <SOARolePropertyRowUsers, SOARoleOperatorType> getType, Func <SOARolePropertyRowUsers, string> getOp, Action <SOARolePropertyRowUsers, IUser> action) { foreach (SOARolePropertyRowUsers rowUsers in existedRowsUsers) { OguDataCollection <IUser> users = new OguDataCollection <IUser>(); FillRoleTypeOperatorToUsers(getType(rowUsers), getOp(rowUsers), users); foreach (IUser userInRole in users) { action(rowUsers, userInRole); } } }
private OguDataCollection <IUser> GetEarliestMergedUsers(SOARolePropertyRowUsers rowUsers, int startIndex) { OguDataCollection <IUser> result = new OguDataCollection <IUser>(); foreach (IUser user in rowUsers.Users) { if (ExistsEarliestUser(user, startIndex) == false) { result.Add(user); } } return(result); }
//public void Remove(TTaskAssignee assignee) //{ // List.Remove(assignee); //} /// <summary> /// 根据类别来筛选出用户 /// </summary> /// <param name="type"></param> /// <returns></returns> public OguDataCollection <TOguObject> GetAssigneesByType(string type) { OguDataCollection <TOguObject> result = new OguDataCollection <TOguObject>(); this.ForEach(assingee => { if (string.Compare(assingee.Type, type, true) == 0) { result.Add(assingee.Assignee); } }); return(result); }
internal static void FillInternalDynamicRoleUsers(string roleName, OguDataCollection <IUser> users) { SOARoleContext context = SOARoleContext.Current; WfDynamicResourceDescriptor dynResource = new WfDynamicResourceDescriptor(); if (context != null) { dynResource.SetProcessInstance(context.Process); } dynResource.Condition.Expression = roleName; dynResource.FillUsers(users); }
public object ToType(Type conversionType, IFormatProvider provider) { object result = null; if (typeof(OguDataCollection <IUser>) == conversionType) { result = new OguDataCollection <IUser>(); this.ForEach(obj => { if (obj is IUser) { ((OguDataCollection <IUser>)result).Add((IUser)obj); } }); } else if (typeof(OguDataCollection <IOrganization>) == conversionType) { result = new OguDataCollection <IOrganization>(); this.ForEach(obj => { if (obj is IOrganization) { ((OguDataCollection <IOrganization>)result).Add((IOrganization)obj); } }); } else if (typeof(OguDataCollection <IGroup>) == conversionType) { result = new OguDataCollection <IGroup>(); this.ForEach(obj => { if (obj is IGroup) { ((OguDataCollection <IGroup>)result).Add((IGroup)obj); } }); } else if (typeof(OguDataCollection <IOguObject>) == conversionType) { result = new OguDataCollection <IOguObject>(); this.ForEach(obj => ((OguDataCollection <IOguObject>)result).Add(obj)); } return(result); }
private static OguDataCollection <IUser> CalculateRowOperators() { OguDataCollection <IUser> result = new OguDataCollection <IUser>(); if (ObjectContextCache.Instance.ContainsKey("RoleMatrixCurrentRow")) { SOARolePropertyRow row = (SOARolePropertyRow)ObjectContextCache.Instance["RoleMatrixCurrentRow"]; SOARolePropertyRowCollection rows = new SOARolePropertyRowCollection(); rows.Add(row); SOARolePropertyRowUsersCollection rowsUsers = rows.GenerateRowsUsers(); rowsUsers.ForEach(ru => result.CopyFrom(ru.Users)); } return(result); }
private void MergeEarliestRows() { List <SOARolePropertyRowUsers> tempList = new List <SOARolePropertyRowUsers>(); for (int i = this.Count - 1; i >= 0; i--) { SOARolePropertyRowUsers rowUsers = this[i]; //得到当前行中,在后续环节中不存在的用户 OguDataCollection <IUser> mergedUsers = GetEarliestMergedUsers(rowUsers, i - 1); if (rowUsers.Row.IsMergeable()) { //本行可合并,并且本行经过合并后,还有人存在... if (mergedUsers.Count > 0) { tempList.Add(rowUsers); //以合并后的人为准 if (mergedUsers.Count != rowUsers.Users.Count) { rowUsers.Users.Clear(); rowUsers.Users.CopyFrom(mergedUsers); } } //合并后没有人存在时,则舍弃该行 } else { tempList.Add(rowUsers); } } this.Clear(); this.CopyFrom(tempList); }
/// <summary> /// 将角色类型的操作人填充到用户集合中 /// </summary> /// <param name="users"></param> /// <param name="operatorType"></param> /// <param name="operatorDesp"></param> private static void FillRoleTypeOperatorToUsers(SOARoleOperatorType operatorType, string operatorDesp, OguDataCollection <IUser> users) { switch (operatorType) { case SOARoleOperatorType.Role: if (operatorDesp.IndexOf(":") < 0) { SOARolePropertyRow.FillInternalDynamicRoleUsers(operatorDesp, users); } else { FillRoleUsers(operatorDesp, users); } break; case SOARoleOperatorType.AURole: FillAURoleUsers(operatorDesp, users); break; } }
private static void FillMatchedUsers(IEnumerable <string> objectIDs, Dictionary <string, IUser> userDicts, OguDataCollection <IUser> target) { foreach (string id in objectIDs) { IUser user = null; if (userDicts.TryGetValue(id, out user)) { target.Add((IUser)OguUser.CreateWrapperObject(user)); } } }