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); }
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; } }
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(); } }
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); }
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); }
/// <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); }
public void RoleMatrixUsersTest() { IRole role = GetTestRole(); SOARole soaRole = SOARoleHelper.PrepareSOARole(role); SOARolePropertyRowUsersCollection rowsUsers = soaRole.Rows.GenerateRowsUsers(); //输出每一行中的每一个人,也包括指定的列 Output(rowsUsers); }
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); }
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); }
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) ); } } }
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); } }
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); }
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)); } } } }
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); }
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); }
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)); }
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); }
/// <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; }
/// <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; }