예제 #1
0
        ///// <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);
                }
            }
        }
예제 #2
0
        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);
        }
예제 #3
0
        /// <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);
                }
            }
        }
예제 #4
0
        //沈峥注释掉,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));
        }
예제 #5
0
        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);
        }
예제 #6
0
        /// <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);
        }