///// <summary> ///// 在SOARolePropertyRowUsersCollection中填充人员 ///// </summary> ///// <param name="existedRowsUsers"></param> //private static void FillPersonTypeUsers(SOARolePropertyRowUsersCollection existedRowsUsers) //{ // List<string> userLogonNames = new List<string>(); // foreach (SOARolePropertyRowUsers rowUsers in existedRowsUsers) // rowUsers.ObjectIDs.ForEach(logonName => userLogonNames.Add(logonName)); // Dictionary<string, IUser> userDicts = GetUsersDictionary(userLogonNames); // foreach (SOARolePropertyRowUsers rowUsers in existedRowsUsers) // { // if (rowUsers.Row.OperatorType == SOARoleOperatorType.User) // { // foreach (string id in rowUsers.ObjectIDs) // { // IUser user = null; // if (userDicts.TryGetValue(id, out user)) // rowUsers.Users.Add((IUser)OguUser.CreateWrapperObject(user)); // } // } // } //} /// <summary> /// 在SOARolePropertyRowUsersCollection中填充人员 /// </summary> /// <param name="existedRowsUsers"></param> /// <param name="getLogonNames"></param> /// <param name="predicate"></param> /// <param name="action"></param> private static void FillPersonTypeUsers(SOARolePropertyRowUsersCollection existedRowsUsers, Func <SOARolePropertyRowUsers, IEnumerable <string> > getLogonNames, Func <SOARolePropertyRowUsers, SOARoleOperatorType> predicate, Action <SOARolePropertyRowUsers, Dictionary <string, IUser> > action) { List <string> userLogonNames = new List <string>(); //foreach (SOARolePropertyRowUsers rowUsers in existedRowsUsers) // rowUsers.ObjectIDs.ForEach(logonName => userLogonNames.Add(logonName)); foreach (SOARolePropertyRowUsers rowUsers in existedRowsUsers) { getLogonNames(rowUsers).ForEach(logonName => userLogonNames.Add(logonName)); } Dictionary <string, IUser> userDicts = GetUsersDictionary(userLogonNames); foreach (SOARolePropertyRowUsers rowUsers in existedRowsUsers) { if (predicate(rowUsers) == SOARoleOperatorType.User) { action(rowUsers, userDicts); } } }
public SOARolePropertyRowUsersCollection GenerateRowsUsers() { SOARolePropertyRowUsersCollection result = new SOARolePropertyRowUsersCollection(); foreach (SOARolePropertyRow row in this) { //内嵌矩阵,有可能行信息(原始矩阵的行)重复 if (result.ContainsKey(row) == false) { SOARolePropertyRowUsers rowUsers = new SOARolePropertyRowUsers(row); rowUsers.ObjectIDs = GenerateObjectIDs(row, r => r.Operator); rowUsers.EnterNotifyIDs = GenerateObjectIDs(row, r => r.Values.GetValue(SOARolePropertyDefinition.EnterNotifyReceiverColumn, string.Empty)); rowUsers.LeaveNotifyIDs = GenerateObjectIDs(row, r => r.Values.GetValue(SOARolePropertyDefinition.LeaveNotifyReceiverColumn, string.Empty)); result.Add(rowUsers); } } FillPersonTypeUsers(result, (rowUsers) => rowUsers.ObjectIDs, (rowUsers) => rowUsers.Row.OperatorType, (rowUsers, userDicts) => FillMatchedUsers(rowUsers.ObjectIDs, userDicts, rowUsers.Users)); FillRoleTypeUsers(result, (rowUsers) => rowUsers.Row.OperatorType, (rowUsers) => rowUsers.Row.Operator, (rowUsers, user) => rowUsers.Users.AddNotExistsItem(user, u => string.Compare(u.ID, user.ID, true) == 0)); FillPersonTypeUsers(result, (rowUsers) => rowUsers.EnterNotifyIDs, (rowUsers) => rowUsers.Row.Values.GetValue(SOARolePropertyDefinition.EnterNotifyReceiverTypeColumn, SOARoleOperatorType.User), (rowUsers, userDicts) => FillMatchedUsers(rowUsers.EnterNotifyIDs, userDicts, rowUsers.EnterNotifyUsers)); FillRoleTypeUsers(result, (rowUsers) => rowUsers.Row.Values.GetValue(SOARolePropertyDefinition.EnterNotifyReceiverTypeColumn, SOARoleOperatorType.Role), (rowUsers) => rowUsers.Row.Values.GetValue(SOARolePropertyDefinition.EnterNotifyReceiverColumn, string.Empty), (rowUsers, user) => rowUsers.EnterNotifyUsers.AddNotExistsItem(user, u => string.Compare(u.ID, user.ID, true) == 0)); FillPersonTypeUsers(result, (rowUsers) => rowUsers.LeaveNotifyIDs, (rowUsers) => rowUsers.Row.Values.GetValue(SOARolePropertyDefinition.LeaveNotifyReceiverTypeColumn, SOARoleOperatorType.User), (rowUsers, userDicts) => FillMatchedUsers(rowUsers.LeaveNotifyIDs, userDicts, rowUsers.LeaveNotifyUsers)); FillRoleTypeUsers(result, (rowUsers) => rowUsers.Row.Values.GetValue(SOARolePropertyDefinition.LeaveNotifyReceiverTypeColumn, SOARoleOperatorType.Role), (rowUsers) => rowUsers.Row.Values.GetValue(SOARolePropertyDefinition.LeaveNotifyReceiverColumn, string.Empty), (rowUsers, user) => rowUsers.LeaveNotifyUsers.AddNotExistsItem(user, u => string.Compare(u.ID, user.ID, true) == 0)); result.SortByActivitySN(); result.RemoveMergeableRows(); 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); } } }
//沈峥注释掉,2015/6/21.必须提供列定义 //public void FillCreateActivityParams(WfCreateActivityParamCollection capc, PropertyDefineCollection definedProperties) //{ // SOARolePropertyDefinitionCollection definitions = null; // SOARole role = this._Role as SOARole; // if (role != null) // definitions = role.PropertyDefinitions; // else // definitions = new SOARolePropertyDefinitionCollection(); // this.FillCreateActivityParams(capc, definitions, definedProperties); //} public void FillCreateActivityParams(WfCreateActivityParamCollection capc, SOARolePropertyDefinitionCollection definitions, PropertyDefineCollection definedProperties) { capc.NullCheck("capc"); definitions.NullCheck("definitions"); SOARolePropertyRowUsersCollection rowsUsers = GenerateRowsUsers(); rowsUsers.ForEach(rowUsers => capc.Add(WfCreateActivityParam.FromRowUsers(rowUsers, definitions, definedProperties))); if (definitions.MatrixType == WfMatrixType.ActivityMatrix) { capc.MergeSameActivityParamBySN(); } capc.ForEach(cap => InitTransitionTemplatesProperties(cap, definitions, cap.Source)); }
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); }
/// <summary> /// 直接生成行和用户信息,只有用户信息,不包含OperationType为角色的信息 /// </summary> /// <returns></returns> public SOARolePropertyRowUsersCollection GenerateRowsUsersDirectly() { SOARolePropertyRowUsersCollection result = new SOARolePropertyRowUsersCollection(); foreach (SOARolePropertyRow row in this) { if (row.OperatorType == SOARoleOperatorType.User) { SOARolePropertyRowUsers rowUsers = new SOARolePropertyRowUsers(row); rowUsers.ObjectIDs = GenerateObjectIDs(row, (r) => r.Operator); result.Add(rowUsers); } } FillPersonTypeUsers(result, (rowUsers) => rowUsers.ObjectIDs, (rowUsers) => rowUsers.Row.OperatorType, (rowUsers, userDicts) => FillMatchedUsers(rowUsers.ObjectIDs, userDicts, rowUsers.Users)); return(result); }
private void PrepareUserContainers(string roleID, SOARolePropertyRowUsersCollection rowsUsers, StringBuilder strB) { foreach (SOARolePropertyRowUsers rowUsers in rowsUsers) { foreach (IUser user in rowUsers.Users) { InsertSqlClauseBuilder builder = new InsertSqlClauseBuilder(); strB.Append(TSqlBuilder.Instance.DBStatementSeperator); builder.AppendItem("ROLE_ID", roleID); builder.AppendItem("ROW_NUMBER", rowUsers.Row.RowNumber); builder.AppendItem("OPERATOR_TYPE", (int)rowUsers.Row.OperatorType); builder.AppendItem("OPERATOR_ID", user.ID); builder.AppendItem("OPERATOR_NAME", user.DisplayName.IsNotEmpty() ? user.DisplayName : user.Name); builder.AppendTenantCode(); string sql = string.Format("INSERT INTO WF.ROLE_PROPERTIES_USER_CONTAINERS {0}", builder.ToSqlString(TSqlBuilder.Instance)); strB.Append(sql); } } }
public void Update(string roleID, SOARolePropertyRowCollection rows) { roleID.CheckStringIsNullOrEmpty("roleID"); rows.NullCheck("rows"); StringBuilder strB = new StringBuilder(1024); strB.AppendFormat("DELETE WF.ROLE_PROPERTIES_ROWS WHERE {0}", roleID.ToRoleIDCriteria()); strB.Append(TSqlBuilder.Instance.DBStatementSeperator); strB.AppendFormat("DELETE WF.ROLE_PROPERTIES_CELLS WHERE {0}", roleID.ToRoleIDCriteria()); strB.Append(TSqlBuilder.Instance.DBStatementSeperator); strB.AppendFormat("DELETE WF.ROLE_PROPERTIES_USER_CONTAINERS WHERE {0}", roleID.ToRoleIDCriteria()); PrepareRowsSql(roleID, rows, strB); SOARolePropertyRowUsersCollection rowsUsers = rows.GenerateRowsUsersDirectly(); SOARolePropertyRowRolesCollection rowsRoles = rows.GenerateRowsRolesDirectly(); PrepareUserContainers(roleID, rowsUsers, strB); PrepareRoleContainers(roleID, rowsRoles, strB); using (TransactionScope scope = TransactionScopeFactory.Create()) { DbHelper.RunSql(strB.ToString(), GetConnectionName()); scope.Complete(); } CacheNotifyData notifyData = new CacheNotifyData(typeof(SOARolePropertiesCache), roleID.ToRoleIDCacheKey(), CacheNotifyType.Invalid); UdpCacheNotifier.Instance.SendNotifyAsync(notifyData); MmfCacheNotifier.Instance.SendNotify(notifyData); }