Exemple #1
0
        private static SOARolePropertyDefinitionCollection PrepareActivityMatrixPropertiesDefinition(string definitionID)
        {
            SOARole role = new SOARole();

            role.ID = definitionID;

            SOARolePropertyDefinitionCollection propertiesDefinition = new SOARolePropertyDefinitionCollection();

            propertiesDefinition.Add(new SOARolePropertyDefinition(role)
            {
                Name = "AdministrativeUnit", SortOrder = 0
            });
            propertiesDefinition.Add(new SOARolePropertyDefinition(role)
            {
                Name = "ActivitySN", SortOrder = 0, DataType = ColumnDataType.Integer
            });
            propertiesDefinition.Add(new SOARolePropertyDefinition(role)
            {
                Name = "OperatorType", SortOrder = 1, DataType = ColumnDataType.String
            });
            propertiesDefinition.Add(new SOARolePropertyDefinition(role)
            {
                Name = "Operator", SortOrder = 2, DataType = ColumnDataType.String
            });

            return(propertiesDefinition);
        }
        /// <summary>
        /// 得到矩阵中的符合条件的人员
        /// </summary>
        /// <param name="auCodeName"></param>
        /// <returns></returns>
        public IEnumerable <IUser> GetObjectsFromMatrix(string auCodeName)
        {
            List <IUser> result = new List <IUser>();

            SOARole role = GetSOARole(auCodeName);

            if (role != null)
            {
                IEnumerable <IOguObject> objectsInMatrix = role.GetObjectsFromMatrix();

                foreach (IOguObject obj in objectsInMatrix)
                {
                    if (obj is IUser)
                    {
                        result.Add((IUser)obj);
                    }
                }
            }
            else
            {
                result = new List <IUser>();
            }

            return(result);
        }
        /// <summary>
        /// 根据管理单元的ID得到SOARole。
        /// </summary>
        /// <param name="auCodeName"></param>
        /// <returns></returns>
        public SOARole GetSOARole(string auCodeName)
        {
            SOARole role = null;

            if (this.ClientSchemaRoleObject != null)
            {
                string definitionID = this.ClientSchemaRoleObject.ID;
                string roleID       = definitionID;

                ClientAURole auRole = GetAURoleObject(auCodeName);

                if (auRole != null)
                {
                    roleID = auRole.ID;
                }

                SOARolePropertyDefinitionCollection definition = SOARolePropertyDefinitionAdapter.Instance.GetByRoleID(definitionID);

                role    = new SOARole(definition);
                role.ID = roleID;

                //如果矩阵的行数为零
                if (role.Rows.Count == 0)
                {
                    role    = new SOARole(definition);
                    role.ID = definitionID;
                }
            }

            return(role);
        }
Exemple #4
0
        public override void ProcessRequest(HttpContext context)
        {
            switch (context.Request.QueryString["editMode"])
            {
            case "download":
            {
                SOARole role = PrepareRole(this.RoleID, this.DefinitionID);

                WorkBook workBook = role.ToExcelWorkBook();

                context.Response.CacheControl = "no-cache";

                context.Response.AppendExcelOpenXmlHeader("matrix");
                workBook.Save(context.Response.OutputStream);

                context.Response.Flush();
            }
            break;

            case "readOnly":
                Server.Execute("~/MatrixModalDialog/DownloadMatrix.aspx", true);
                break;

            default:
                base.ProcessRequest(context);
                break;
            }
        }
Exemple #5
0
        public void UpdateRolePropertyValuesTest()
        {
            SOARole role = PrepareSOARole();

            SOARolePropertiesAdapter.Instance.Update(role);

            SOARolePropertyRowCollection loadedRows = SOARolePropertiesAdapter.Instance.LoadByRole(role);

            Assert.AreEqual(role.Rows.Count, loadedRows.Count);

            int i = 0;

            foreach (SOARolePropertyRow row in role.Rows)
            {
                Assert.AreEqual(row.Values.Count, loadedRows[i].Values.Count);
                i++;
            }

            DataView view = loadedRows.ToDataView(role.PropertyDefinitions);

            foreach (DataRowView drv in view)
            {
                foreach (DataColumn column in view.Table.Columns)
                {
                    Console.Write("{0}={1} ", column.ColumnName, drv[column.ColumnName]);
                }

                Console.WriteLine();
            }
        }
Exemple #6
0
        private static SOARolePropertyRow AddSOARoleRow(SOARole role, SOARoleOperatorType operatorType, string opUser, string constCenter, string activitySN, Action <SOARolePropertyRow, SOARolePropertyDefinitionCollection> action = null)
        {
            SOARolePropertyRow row = new SOARolePropertyRow(role)
            {
                RowNumber = role.Rows.Count + 1, OperatorType = operatorType, Operator = opUser
            };

            SOARolePropertyDefinitionCollection pds = role.PropertyDefinitions;

            row.Values.Add(new SOARolePropertyValue(pds["CostCenter"])
            {
                Value = constCenter
            });
            row.Values.Add(new SOARolePropertyValue(pds[SOARolePropertyDefinition.ActivitySNColumn])
            {
                Value = activitySN
            });
            row.Values.Add(new SOARolePropertyValue(pds[SOARolePropertyDefinition.OperatorTypeColumn])
            {
                Value = operatorType.ToString()
            });
            row.Values.Add(new SOARolePropertyValue(pds[SOARolePropertyDefinition.OperatorColumn])
            {
                Value = opUser
            });

            if (action != null)
            {
                action(row, pds);
            }

            role.Rows.Add(row);

            return(row);
        }
Exemple #7
0
        protected void btnConfirm_Click(object sender, EventArgs e)
        {
            if (this.Request.QueryString["editMode"] == "readOnly")
            {
                throw new InvalidOperationException("只读模式不可以编辑");
            }

            RoleID = MCS.Web.Library.WebUtility.GetRequestParamString("RoleID", string.Empty);
            SOARole role = new SOARole()
            {
                ID = RoleID
            };

            SOARolePropertyRowCollection rowsColl = SOARolePropertiesAdapter.Instance.LoadByRole(role);

            /*沈峥注释,不需要这个限制
             * if (rowsColl.Count > 0)
             * {
             *      WebUtility.ShowClientMessage("矩阵定义已经被使用,无法再修改!", "", "无法进行此操作");
             *      return;
             * }
             */

            var coll = detailGrid.InitialData as SOARolePropertyDefinitionCollection;

            SOARolePropertyDefinitionAdapter.Instance.Update(role, coll);

            Page.ClientScript.RegisterStartupScript(this.GetType(), "returnProcesses",
                                                    string.Format("window.returnValue = true; top.close();"),
                                                    true);
        }
Exemple #8
0
        /// <summary>
        /// 清除已经存在的数据
        /// </summary>
        /// <param name="definitionID"></param>
        /// <param name="roleID"></param>
        private static void ClearMatrixData(string definitionID, string roleID)
        {
            SOARole role = new SOARole();

            role.ID = definitionID;

            SOARolePropertyDefinitionAdapter.Instance.Delete(role);

            role.ID = roleID;
            SOARolePropertiesAdapter.Instance.Delete(role);
        }
Exemple #9
0
        public void RoleMatrixUsersTest()
        {
            IRole role = GetTestRole();

            SOARole soaRole = SOARoleHelper.PrepareSOARole(role);

            SOARolePropertyRowUsersCollection rowsUsers = soaRole.Rows.GenerateRowsUsers();

            //输出每一行中的每一个人,也包括指定的列
            Output(rowsUsers);
        }
Exemple #10
0
        private void Save(Stream strem)
        {
            DataTable dt = DocumentHelper.GetRangeValuesAsTable(strem, "Matrix", "A3");

            string[] itemsInfo = this.MCRolePropertyEditTemplate.RequestContext.Split(';');

            string roleID = itemsInfo[1];
            string defID  = itemsInfo[2];

            SOARole role = PrepareRole(roleID, defID);

            role.Rows.Clear();
            int rowIndex = 0;

            foreach (DataRow row in dt.Rows)
            {
                SOARolePropertyRow mRow = new SOARolePropertyRow(role)
                {
                    RowNumber = rowIndex
                };

                foreach (var dimension in role.PropertyDefinitions)
                {
                    SOARolePropertyValue mCell = new SOARolePropertyValue(dimension);
                    mCell.Value = row[dimension.Name].ToString();

                    switch (dimension.Name)
                    {
                    case "Operator":
                        mRow.Operator = row[dimension.Name].ToString();
                        break;

                    case "OperatorType":
                        SOARoleOperatorType opType = SOARoleOperatorType.User;
                        Enum.TryParse(row[dimension.Name].ToString(), out opType);
                        mRow.OperatorType = opType;
                        break;

                    default:
                        break;
                    }

                    mRow.Values.Add(mCell);
                }

                rowIndex++;
                role.Rows.Add(mRow);
            }

            //更新数据库
            SOARolePropertiesAdapter.Instance.Update(role);
        }
Exemple #11
0
        public void QueryRoleSingleProperty()
        {
            SOARole role = PrepareSOARole();

            SOARolePropertiesQueryParam queryParam = new SOARolePropertiesQueryParam();

            queryParam.QueryName  = "CostCenter";
            queryParam.QueryValue = "1001";

            SOARolePropertyRowCollection rows = role.Rows.Query(queryParam);

            Assert.AreEqual(1, rows.Count);
        }
        public override void ClientToServer(WfClientResourceDescriptor client, ref WfResourceDescriptor server)
        {
            SOARole role = new SOARole(((WfClientRoleResourceDescriptor)client).FullCodeName);

            if (server == null)
            {
                server = new WfRoleResourceDescriptor(role);
            }
            else
            {
                ((WfRoleResourceDescriptor)server).Role = role;
            }
        }
        public void ProcessRequest(HttpContext context)
        {
            string roleID = context.Request["roleID"];

            if (string.IsNullOrEmpty(context.Request["roleID"]) == false)
            {
                SOARole role = new SOARole()
                {
                    ID = roleID
                };

                SOARolePropertyDefinitionCollection rowsColl = SOARolePropertyDefinitionAdapter.Instance.LoadByRole(role);

                XDocument rolePropertiesDoc = new XDocument(new XDeclaration("1.0", "utf-8", "true"), new XElement("SOARoleProperties"));

                XElementFormatter formatter = new XElementFormatter();

                formatter.OutputShortType = false;

                XElement xeRoleProperties = formatter.Serialize(rowsColl);

                rolePropertiesDoc.Element("SOARoleProperties").Add(xeRoleProperties);

                context.Response.Clear();
                context.Response.ContentType     = "text/xml";
                context.Response.ContentEncoding = Encoding.UTF8;

                string fileName = string.Empty;

                if (context.Request["roleName"].IsNotEmpty())
                {
                    fileName = string.Format("{0}", context.Request["roleName"]);
                }

                if (fileName.IsNullOrEmpty() && context.Request["roleCode"].IsNotEmpty())
                {
                    fileName = string.Format("{0}", context.Request["roleCode"]);
                }

                if (fileName.IsNullOrEmpty())
                {
                    fileName = roleID;
                }

                fileName += "_Properties";

                context.Response.AppendHeader("content-disposition", string.Format("attachment;fileName={0}.xml", context.Response.EncodeFileNameInContentDisposition(fileName)));
                rolePropertiesDoc.Save(context.Response.OutputStream);
                context.Response.End();
            }
        }
        private void DeleteMatrix()
        {
            string[] itemsInfo = this.materialCtrlForMatrix.RequestContext.Split(';');

            string roleID = itemsInfo[1];
            string defID  = itemsInfo[2];

            SOARole role = PrepareRole(roleID, defID);

            role.Rows.Clear();

            //更新数据库
            SOARolePropertiesAdapter.Instance.Update(role);
        }
        /// <summary>
        /// 上传属性定义
        /// </summary>
        /// <param name="file"></param>
        /// <param name="result"></param>
        protected void ImportSOARole_DoUploadProgress(HttpPostedFile file, UploadProgressResult result)
        {
            var fileType = Path.GetExtension(file.FileName).ToLower();

            if (string.Compare(fileType, ".xml", true) == 0)
            {
                StringBuilder logger = new StringBuilder();
                try
                {
                    CheckEditMode();

                    var xmlDoc      = XDocument.Load(file.InputStream);
                    var wfProcesses = xmlDoc.Descendants("Root");
                    XElementFormatter    formatter = new XElementFormatter();
                    UploadProgressStatus status    = new UploadProgressStatus();

                    status.CurrentStep = 1;
                    status.MinStep     = 0;
                    status.MaxStep     = wfProcesses.Count() + 1;
                    logger.AppendFormat("开始导入角色属性定义...\n", file.FileName, status.MaxStep);

                    SOARole role = new SOARole {
                        ID = this.DefinitionID
                    };

                    SOARolePropertyDefinitionAdapter.Instance.Delete(role);

                    foreach (var wfProcess in wfProcesses)
                    {
                        SOARolePropertyDefinitionCollection rowsColl = (SOARolePropertyDefinitionCollection)formatter.Deserialize(wfProcess);

                        SOARolePropertyDefinitionAdapter.Instance.Update(role, rowsColl);

                        logger.Append("保存成功...\n");

                        status.CurrentStep++;
                        status.Response();
                    }
                    logger.AppendFormat("导入完成!", file.FileName);
                }
                catch (Exception ex)
                {
                    logger.AppendFormat("导入错误,{0},错误堆栈:{1}", ex.Message, ex.StackTrace);
                }

                result.DataChanged = true;
                result.CloseWindow = false;
                result.ProcessLog  = logger.ToString();
            }
        }
        private static string GetRoleFullCodeName(SOARole role)
        {
            string result = string.Empty;

            try
            {
                result = role.FullCodeName;
            }
            catch (System.Exception)
            {
            }

            return(result);
        }
Exemple #17
0
        public void ReplaceRoleOperatorToNullTest()
        {
            SOARole role = PrepareSOARole();

            SOARolePropertiesAdapter.Instance.Update(role);

            role.Rows.ReplaceOperators(SOARoleOperatorType.User, "wanhw");

            SOARolePropertiesAdapter.Instance.Update(role);

            SOARolePropertyRowCollection loadedRows = SOARolePropertiesAdapter.Instance.LoadByRole(role);

            Console.WriteLine(loadedRows[0].Operator);

            Assert.AreEqual("fanhy", loadedRows[0].Operator);
        }
        public void DoCurrentRoleAction(IWfProcess process, Action <SOARole, string> action)
        {
            if (action != null)
            {
                string auCodeName = GetCurrentAdministrativeUnitCodeName(process);

                SOARole role = this.GetSOARole(auCodeName);

                if (role != null)
                {
                    SOARoleContext.DoAction(role, process, (context) =>
                                            action(role, auCodeName)
                                            );
                }
            }
        }
Exemple #19
0
        protected void RolePropertyEdit_PrepareDownloadStream(object sender, PrepareDownloadStreamEventArgs args)
        {
            string[] itemsInfo = args.DownloadInfo.RequestContext.Split(';');

            string roleID = itemsInfo[1];
            string defID  = itemsInfo[2];

            SOARole  role     = PrepareRole(roleID, defID);
            WorkBook workBook = role.ToExcelWorkBook();

            using (MemoryStream stream = new MemoryStream())
            {
                workBook.Save(stream);
                stream.Seek(0, SeekOrigin.Begin);
                stream.CopyTo(args.OutputStream);
            }
        }
Exemple #20
0
        public void OperatorBelongToRoleMatrixTest()
        {
            IRole role = GetTestRole();

            SOARole soaRole = SOARoleHelper.PrepareSOARole(role);

            IUser user = OguMechanismFactory.GetMechanism().GetObjects <IUser>(SearchOUIDType.LogOnName, "fanhy").First();

            List <string> roleIDs = SOARolePropertiesAdapter.Instance.OperatorBelongToRoleIDsDirectly(user.ID);

            foreach (string roleID in roleIDs)
            {
                SOARolePropertyRowCollection rows = SOARolePropertiesAdapter.Instance.GetByRoleID(roleID);

                Output(rows);
            }
        }
        private SOARolePropertyRow GenerateMatrixRow(SOARole role, RowNode rowNode, NamedLocationCollection locations, int index)
        {
            SOARolePropertyRow mRow = new SOARolePropertyRow(role);

            mRow.RowNumber = index;

            int emptyCellCount = 0;

            foreach (var row in this.Definition)
            {
                CellLocation location = locations[row.Name];

                CellNode cell = rowNode.GetCellByIndex(location.Column);

                SOARolePropertyValue mCell = new SOARolePropertyValue(row);

                mCell.Value = cell.Data.InnerText.Trim();

                mRow.Values.Add(mCell);

                switch (row.Name)
                {
                case "Operator":
                    mRow.Operator = cell.Data.InnerText;
                    break;

                case "OperatorType":
                    SOARoleOperatorType opType = SOARoleOperatorType.User;
                    Enum.TryParse(cell.Data.InnerText, out opType);
                    mRow.OperatorType = opType;
                    break;

                default:
                    if (mCell.Value.IsNullOrEmpty())
                    {
                        emptyCellCount++;
                    }
                    break;
                }
            }

            role.Rows.Add(mRow);

            return(mRow);
        }
Exemple #22
0
        public void ReplaceUserInSOARoleTest()
        {
            SOARole role = PrepareSOARole();

            SOARolePropertiesQueryParam queryParam = new SOARolePropertiesQueryParam();

            queryParam.QueryName  = "CostCenter";
            queryParam.QueryValue = "1001";

            SOARolePropertyRowCollection rows = role.Rows.Query(queryParam);

            Assert.AreEqual(1, rows.Count);

            foreach (var rowUsers in rows.GenerateRowsUsers())
            {
                rowUsers.Users.ForEach(u => Console.WriteLine(u.LogOnName));
            }
        }
        private static bool IsInSOARoles(IUser user, string rolesNames, object callerContext)
        {
            bool result = false;

            IRole[] roles = DeluxePrincipal.GetRoles(rolesNames);

            for (int i = 0; i < roles.Length; i++)
            {
                result = IsInSOARole(user, SOARole.CreateWrapperObject(roles[i]), callerContext);

                if (result)
                {
                    break;
                }
            }

            return(result);
        }
        private static void CheckImportSource(SOARole role, WorkBook workbook)
        {
            string roleFullCodeName = GetRoleFullCodeName(role);

            if (roleFullCodeName.IsNotEmpty())
            {
                string excelSource = workbook.FileDetails.Subject;

                if (excelSource.IsNotEmpty())
                {
                    if (string.Compare(roleFullCodeName, excelSource, true) != 0)
                    {
                        throw new InvalidOperationException(string.Format("导入的角色矩阵的来源是{0},和目标{1}不匹配。如果需要强制导入,请去掉\"校验导入的矩阵是否是相同的来源\"选择框",
                                                                          excelSource, roleFullCodeName));
                    }
                }
            }
        }
Exemple #25
0
        public void QueryRoleSingleRemovedProperty()
        {
            SOARole role = PrepareSOARole();

            role.PropertyDefinitions.Remove(spd => spd.Name == "CostCenter");

            SOARolePropertyDefinitionAdapter.Instance.Update(role, role.PropertyDefinitions);

            SOARole roleLoaded = new SOARole(role.FullCodeName);

            SOARolePropertiesQueryParam queryParam = new SOARolePropertiesQueryParam();

            queryParam.QueryName  = "CostCenter";
            queryParam.QueryValue = "1001";

            SOARolePropertyRowCollection rows = roleLoaded.Rows.Query(queryParam);

            Assert.AreEqual(0, rows.Count);
        }
Exemple #26
0
        private static void PrepareActivityMatrixData(string definitionID, string roleID)
        {
            ClearAllMatrixData();

            SOARole role = new SOARole();

            role.ID = definitionID;

            SOARolePropertyDefinitionCollection definition = PrepareActivityMatrixPropertiesDefinition(definitionID);

            SOARolePropertyDefinitionAdapter.Instance.Update(role, definition);

            role    = new SOARole(definition);
            role.ID = roleID;

            PrepareActivityMatrixRows(role);

            SOARolePropertiesAdapter.Instance.Update(role);
        }
Exemple #27
0
        public void QueryRoleUserByContext()
        {
            SOARole role = PrepareSOARole();

            WfRoleResourceDescriptor       roleDescriptor = new WfRoleResourceDescriptor(role);
            WfResourceDescriptorCollection roles          = new WfResourceDescriptorCollection();

            roles.Add(roleDescriptor);

            Dictionary <string, object> parameters = new Dictionary <string, object>();

            parameters["CostCenter"] = "1002";
            parameters["FormType"]   = "Form1";

            WfApplicationParametersContext.CreateContext(parameters);

            OguDataCollection <IUser> users = roles.ToUsers();

            Assert.AreEqual(4, users.Count);
        }
        private void ExportExcelXPXml()
        {
            SOARolePropertyDefinitionCollection definition = SOARolePropertyDefinitionAdapter.Instance.LoadByRoleID(ExportRoleProperty.DefinitionID);
            string PropertySheetName = "Matrix";

            WorkbookNode workbook = ExportToExcelXml(definition, PropertySheetName);
            SOARole      role     = new SOARole(definition)
            {
                ID = RoleID
            };

            SOARolePropertyRowCollection rows = SOARolePropertiesAdapter.Instance.LoadByRole(role, definition);

            if (rows.Count > 0)
            {
                FillMatrixRowsToWorksheet(workbook, rows);
            }

            workbook.Response(GetFileNameByRole(RoleID));
        }
Exemple #29
0
        private static void AddOneActivityMatrixRow(SOARole role, string auCodeName, int rowNumber, int activitySN, SOARoleOperatorType operatorType, string op)
        {
            SOARolePropertyDefinitionCollection definition = role.PropertyDefinitions;

            SOARolePropertyRow row = new SOARolePropertyRow(role)
            {
                RowNumber = rowNumber, OperatorType = operatorType, Operator = op
            };

            row.Values.Add(new SOARolePropertyValue(definition["AdministrativeUnit"])
            {
                Value = auCodeName
            });
            row.Values.Add(new SOARolePropertyValue(definition["ActivitySN"])
            {
                Value = activitySN.ToString()
            });

            role.Rows.Add(row);
        }
Exemple #30
0
        /// <summary>
        /// 1001应该匹配出3个活动。其中第一个活动两个人
        /// </summary>
        /// <returns></returns>
        private static SOARole PrepareSOARole(Action <SOARolePropertyRow, SOARolePropertyDefinitionCollection> action = null)
        {
            IRole originalRole = GetTestRole();

            SOARolePropertyDefinitionAdapter.Instance.Delete(originalRole);

            SOARolePropertyDefinitionCollection pds = UpdateRolePropertiesDefinition(originalRole);

            SOARole role = new SOARole(originalRole);

            role.Rows.Clear();

            AddSOARoleRow(role, SOARoleOperatorType.User, "fanhy", "1001", "10", action);
            AddSOARoleRow(role, SOARoleOperatorType.User, "yangrui1", "1001", "10", action);
            AddSOARoleRow(role, SOARoleOperatorType.User, "liming", "1001", "20", action);
            AddSOARoleRow(role, SOARoleOperatorType.User, "quym", "1001", "30", action);

            SOARolePropertiesAdapter.Instance.Update(role);

            return(role);
        }
        private static SOARolePropertyRow AddSOARoleRow(SOARole role, SOARoleOperatorType operatorType, string opUser, string constCenter, string activitySN)
        {
            SOARolePropertyRow row = new SOARolePropertyRow(role) { RowNumber = role.Rows.Count + 1, OperatorType = operatorType, Operator = opUser };

            SOARolePropertyDefinitionCollection pds = role.PropertyDefinitions;

            row.Values.Add(new SOARolePropertyValue(pds["CostCenter"]) { Value = constCenter });
            row.Values.Add(new SOARolePropertyValue(pds["ActivitySN"]) { Value = activitySN });
            role.Rows.Add(row);

            return row;
        }
        /// <summary>
        /// 根据管理单元的ID得到SOARole。
        /// </summary>
        /// <param name="auCodeName"></param>
        /// <returns></returns>
        public SOARole GetSOARole(string auCodeName)
        {
            SOARole role = null;

            if (this.ClientSchemaRoleObject != null)
            {
                string definitionID = this.ClientSchemaRoleObject.ID;
                string roleID = definitionID;

                ClientAURole auRole = GetAURoleObject(auCodeName);

                if (auRole != null)
                    roleID = auRole.ID;

                SOARolePropertyDefinitionCollection definition = SOARolePropertyDefinitionAdapter.Instance.GetByRoleID(definitionID);

                role = new SOARole(definition);
                role.ID = roleID;

                //如果矩阵的行数为零
                if (role.Rows.Count == 0)
                {
                    role = new SOARole(definition);
                    role.ID = definitionID;
                }
            }

            return role;
        }
		public void QueryRoleSingleRemovedProperty()
		{
			SOARole role = PrepareSOARole();

			role.PropertyDefinitions.Remove(spd => spd.Name == "CostCenter");

			SOARolePropertyDefinitionAdapter.Instance.Update(role, role.PropertyDefinitions);

			SOARole roleLoaded = new SOARole(role.FullCodeName);

			SOARolePropertiesQueryParam queryParam = new SOARolePropertiesQueryParam();

			queryParam.QueryName = "CostCenter";
			queryParam.QueryValue = "1001";

			SOARolePropertyRowCollection rows = roleLoaded.Rows.Query(queryParam);

			Assert.AreEqual(0, rows.Count);
		}
        /// <summary>
        /// 1001应该匹配出3个活动。其中第一个活动两个人
        /// </summary>
        /// <returns></returns>
        private static SOARole PrepareSOARole(Action<SOARolePropertyRow, SOARolePropertyDefinitionCollection> action = null)
        {
            IRole originalRole = GetTestRole();

            SOARolePropertyDefinitionAdapter.Instance.Delete(originalRole);

            SOARolePropertyDefinitionCollection pds = UpdateRolePropertiesDefinition(originalRole);

            SOARole role = new SOARole(originalRole);

            role.Rows.Clear();

            AddSOARoleRow(role, SOARoleOperatorType.User, "fanhy", "1001", "10", action);
            AddSOARoleRow(role, SOARoleOperatorType.User, "yangrui1", "1001", "10", action);
            AddSOARoleRow(role, SOARoleOperatorType.User, "liming", "1001", "20", action);
            AddSOARoleRow(role, SOARoleOperatorType.User, "quym", "1001", "30", action);

            SOARolePropertiesAdapter.Instance.Update(role);

            return role;
        }
        private static SOARolePropertyRow AddSOARoleRow(SOARole role, SOARoleOperatorType operatorType, string opUser, string constCenter, string activitySN, Action<SOARolePropertyRow, SOARolePropertyDefinitionCollection> action = null)
        {
            SOARolePropertyRow row = new SOARolePropertyRow(role) { RowNumber = role.Rows.Count + 1, OperatorType = operatorType, Operator = opUser };

            SOARolePropertyDefinitionCollection pds = role.PropertyDefinitions;

            row.Values.Add(new SOARolePropertyValue(pds["CostCenter"]) { Value = constCenter });
            row.Values.Add(new SOARolePropertyValue(pds[SOARolePropertyDefinition.ActivitySNColumn]) { Value = activitySN });
            row.Values.Add(new SOARolePropertyValue(pds[SOARolePropertyDefinition.OperatorTypeColumn]) { Value = operatorType.ToString() });
            row.Values.Add(new SOARolePropertyValue(pds[SOARolePropertyDefinition.OperatorColumn]) { Value = opUser });

            if (action != null)
                action(row, pds);

            role.Rows.Add(row);

            return row;
        }
		private static SOARole PrepareSOARole()
		{
			IRole originalRole = GetTestRole();

			SOARolePropertyDefinitionCollection pds = UpdateRolePropertiesDefinition(originalRole);

			SOARole role = new SOARole(originalRole.FullCodeName);

			role.Rows.Clear();

			SOARolePropertyRow row1 = new SOARolePropertyRow(role) { RowNumber = 1, OperatorType = SOARoleOperatorType.User, Operator = "fanhy,wanhw" };

			row1.Values.Add(new SOARolePropertyValue(pds["CostCenter"]) { Value = "1001" });
			row1.Values.Add(new SOARolePropertyValue(pds["PayMethod"]) { Value = "1" });
			row1.Values.Add(new SOARolePropertyValue(pds["Age"]) { Value = "30" });

			SOARolePropertyRow row2 = new SOARolePropertyRow(role) { RowNumber = 2, OperatorType = SOARoleOperatorType.User, Operator = "wangli5" };

			row2.Values.Add(new SOARolePropertyValue(pds["CostCenter"]) { Value = "1002" });
			row2.Values.Add(new SOARolePropertyValue(pds["PayMethod"]) { Value = "2" });
			row2.Values.Add(new SOARolePropertyValue(pds["Age"]) { Value = "40" });

			SOARolePropertyRow row3 = new SOARolePropertyRow(role) { RowNumber = 3, OperatorType = SOARoleOperatorType.Role, Operator = RolesDefineConfig.GetConfig().RolesDefineCollection["nestedRole"].Roles };

			row3.Values.Add(new SOARolePropertyValue(pds["CostCenter"]) { Value = "1002" });
			row3.Values.Add(new SOARolePropertyValue(pds["PayMethod"]) { Value = "2" });
			row3.Values.Add(new SOARolePropertyValue(pds["Age"]) { Value = "60" });

			role.Rows.Add(row1);
			role.Rows.Add(row2);
			role.Rows.Add(row3);

			SOARolePropertiesAdapter.Instance.Update(role);

			return role;
		}