private static Dictionary <string, PC.SCSimpleObject> PrepareParentsList(string navOu) { Dictionary <string, PC.SCSimpleObject> result = null; if (navOu != PC.SCOrganization.RootOrganizationID) { Dictionary <string, PC.SCSimpleObjectCollection> parents = PC.Adapters.SCSnapshotAdapter.Instance.LoadAllParentsInfo(true, navOu); if (parents != null && parents.ContainsKey(navOu)) { Dictionary <string, PC.SCSimpleObject> queue = parents[navOu].ToDictionary(); result = parents[navOu].ToDictionary(); } } else { PC.SCOrganization root = PC.SCOrganization.GetRoot(); result = new Dictionary <string, PC.SCSimpleObject>() { { root.ID, root.ToSimpleObject() } }; } return(result); }
private void DoMoveToOrg(string orgKey, List <string> groupKeys, IList <object> errors) { try { PC.SCOrganization org = (PC.SCOrganization)DbUtil.GetEffectiveObject(orgKey, string.Format("指定的组织(ID:{0})无效", orgKey)); var grps = DbUtil.LoadObjects(groupKeys.ToArray()); foreach (PC.SCBase item in grps) { try { if (item is PC.SCGroup && item.Status == SchemaObjectStatus.Normal) { PC.Executors.SCObjectOperations.InstanceWithPermissions.MoveObjectToOrganization(null, item, org); } else { errors.Add(string.Format("{0}不是有效的群组,已跳过", item.ToDescription())); } } catch (Exception ex) { WebUtility.ShowClientError(ex); errors.Add(ex); } } } catch (Exception ex) { WebUtility.ShowClientError(ex); errors.Add(ex); } this.InnerRefreshList(); // 必须的 }
/// <summary> /// 获取全局(根)组织 /// </summary> /// <returns>一个表示根的<see cref="SCOrganization"/>的实例。</returns> public static SCOrganization GetRoot() { SCOrganization result = new SCOrganization(); result.ID = RootOrganizationID; result.Name = RootOrganizationName; return result; }
private static PC.SCOrganization FillAdditionProperties(PC.SCOrganization org) { //testOrg.Properties["DepartmentRank"].StringValue = ((int)DepartmentRankType.MinGanJiBie).ToString(); //testOrg.Properties["DepartmentType"].StringValue = ((int)DepartmentTypeDefine.XuNiJiGou).ToString(); //testOrg.Properties["DepartmentClass"].StringValue = ((int)DepartmentClassType.QiTaJiGou).ToString(); //testOrg.Properties["CustomsCode"].StringValue = "Some more"; return(org); }
/// <summary> /// 获取全局(根)组织 /// </summary> /// <returns>一个表示根的<see cref="SCOrganization"/>的实例。</returns> public static SCOrganization GetRoot() { SCOrganization result = new SCOrganization(); result.ID = RootOrganizationID; result.Name = RootOrganizationName; return(result); }
protected void DoDeepFileUpload(HttpPostedFile file, MCS.Web.WebControls.UploadProgressResult result) { if (Path.GetExtension(file.FileName).ToLower() != ".xml") { throw new InvalidDataException("上传的文件类型错误"); } string oguId = Request.Form["parentId"]; if (string.IsNullOrEmpty(oguId)) { throw new HttpException("没有使用parentId"); } Util.EnsureOperationSafe(); PC.SCOrganization parent = oguId == PC.SCOrganization.RootOrganizationID ? PC.SCOrganization.GetRoot() : (PC.SCOrganization)DbUtil.GetEffectiveObject(oguId, "当前组织不存在或已删除"); ImportExecutor executor = new ImportExecutor(file, result); if (Request.Form["includeAcl"] == "includeAcl") { executor.AddAction(new OguAclImportAction(parent) { }); } if (Request.Form["includeUser"] == "includeUser") { executor.AddAction(new OguUserImportAction(parent) { IncludeSecretaries = Request.Form["includeSecretary"] == "includeSecretary" }); } if (Request.Form["includeGroup"] == "includeGroup") { executor.AddAction(new OguGroupImportAction(parent) { IncludeConditions = Request.Form["includeGroupConditions"] == "includeGroupConditions", IncludeMembers = Request.Form["includeGroupMembers"] == "includeGroupMembers" }); } executor.AddAction(new OguFullImportAction(parent) { IncludeOrganizations = this.Request.Form["includeOrg"] == "includeOrg", IncludeAcl = this.Request.Form["includeAcl"] == "includeAcl", IncludeUser = this.Request.Form["includeUser"] == "includeUser", IncludeSecretaries = this.Request.Form["includeSecretary"] == "includeSecretary", IncludeGroup = this.Request.Form["includeGroup"] == "includeGroup", IncludeGroupConditions = this.Request.Form["includeGroupConditions"] == "includeGroupConditions", IncludeGroupMembers = this.Request.Form["includeGroupMembers"] == "includeGroupMembers" }); executor.Execute(); }
private static void InitGroups() { PC.SCOrganization org = (PC.SCOrganization)PC.Adapters.SchemaObjectAdapter.Instance.LoadByCodeName(c => { SchemaStrict(c, "O.", PC.StandardObjectSchemaType.Organizations); }, DateTime.MinValue, "流程管理部").First(); PC.SCGroup grp1 = new PC.SCGroup() { Name = "DemoGroup", CodeName = "DemoGroup", DisplayName = "DemoGroup", Creator = CastUser(Wangli), ID = "BA4E965E-8A35-4986-B5EA-7631D9368FFF", Status = SchemaObjectStatus.Normal, }; Facade.AddGroup(grp1, org); org = (PC.SCOrganization)PC.Adapters.SchemaObjectAdapter.Instance.LoadByCodeName(c => { SchemaStrict(c, "O.", PC.StandardObjectSchemaType.Organizations); }, DateTime.MinValue, "beijingYuanlian").First(); grp1 = new PC.SCGroup() { Name = "群组A", CodeName = "groupA", DisplayName = "群组A", Creator = CastUser(Wangli), ID = "CA093A1E-B207-48DB-B3B2-B085A81DA36A", Status = SchemaObjectStatus.Normal, }; Facade.AddGroup(grp1, org); grp1 = new PC.SCGroup() { Name = "群组B", CodeName = "groupB", DisplayName = "群组B", Creator = CastUser(Wangli), ID = "A465FFC8-A742-41F3-A1B6-0D40FC5EA3D5", Status = SchemaObjectStatus.Normal, }; org = (PC.SCOrganization)PC.Adapters.SchemaObjectAdapter.Instance.LoadByCodeName(c => { SchemaStrict(c, "O.", PC.StandardObjectSchemaType.Organizations); }, DateTime.MinValue, "yuanyangAobei").First(); Facade.AddGroup(grp1, org); }
private PC.SCOrganization CreateOU(PC.SCOrganization ou, PC.SCOrganization parent) { var ouSelf = (PC.SCOrganization)PC.Adapters.SchemaObjectAdapter.Instance.Load(ou.ID); if (ouSelf == null) { Facade.AddOrganization(ou, parent); ouSelf = ou; } return(ouSelf); }
protected void GenRoots(object sender, EventArgs e) { var root = SCOrganization.GetRoot(); for (int i = 0; i < 20; i++) { SCOrganization org = new SCOrganization(); org.ID = UuidHelper.NewUuidString(); org.Name = org.ID; org.DisplayName = org.ID; org.CreateDate = DateTime.MinValue; org.CodeName = org.ID; PC.Executors.SCObjectOperations.InstanceWithPermissions.AddOrganization(org, root); } }
public void SchemaOrganizationToXml() { SCOrganization org = SCObjectGenerator.PrepareOrganizationObject(); XElement orgElem = new XElement("Root").AddChildElement("Object"); org.ToXElement(orgElem); Console.WriteLine(orgElem.Parent.ToString()); SCOrganization orgDeserialized = new SCOrganization(); orgDeserialized.FromXElement(orgElem); Assert.AreEqual(org.ID, orgDeserialized.ID); Assert.AreEqual(org.Name, orgDeserialized.Name); }
private static OrgTreeNode PrepareOguTree(SCOrganization organization) { OrgTreeNode node = new OrgTreeNode(organization); ProcessProgress.Current.Increment(); ProcessProgress.Current.Response(string.Format("已经处理了{0}个组织", ProcessProgress.Current.CurrentStep)); foreach (SchemaObjectBase obj in organization.CurrentChildren) { if (obj is SCOrganization) { ProcessProgress.Current.MaxStep += 1; node.Children.Add(PrepareOguTree((SCOrganization)obj)); } } return node; }
protected override void OnPreRender(EventArgs e) { bool godMode = Util.SuperVisiorMode; if (this.mainView.ActiveViewIndex == 1) { this.panMode.Attributes["class"] = string.Empty; this.toggleButton.Attributes["title"] = "切换为列表模式"; PC.SCOrganization root = PC.SCOrganization.GetRoot(); DeluxeTreeNode rootTreeNode = CreateTreeNode(root.ID, root.Name, root.DisplayName, string.Empty, false, false); rootTreeNode.Expanded = true; this.tree.Nodes.Add(rootTreeNode); rootTreeNode.ChildNodesLoadingType = ChildNodesLoadingTypeDefine.Normal; Dictionary <string, PC.SCSimpleObject> parentsList = PrepareParentsList(PC.SCOrganization.RootOrganizationID); var pmLimitString = this.Request.QueryString.Get("permission"); var requiredPermissions = pmLimitString != null?pmLimitString.Split(',') : null; var excludeID = this.Request.QueryString["superOf"]; var exceptID = this.Request.QueryString["exceptOrg"]; PrepareTreeNodeRecursively(root.ToSimpleObject(), rootTreeNode, parentsList, godMode, DateTime.MinValue, requiredPermissions, excludeID, exceptID); this.tree.CallBackContext = godMode ? "godMode" : "general"; } else { this.panMode.Attributes["class"] = "pc-listmode"; this.toggleButton.Attributes["title"] = "切换为分层模式"; } this.hfMode.Value = this.mainView.ActiveViewIndex.ToString(); this.hfGod.Value = godMode ? "1" : "0"; this.hfSingle.Value = this.Request["mode"] == "single" ? "1" : string.Empty; base.OnPreRender(e); }
internal void CalculateFullPathAndGlobalSort(SchemaObjectBase parent, SchemaObjectBase child) { this.InnerSort = ((ISCRelationContainer)parent).GetCurrentMaxInnerSort() + 1; string parentGlobalSort = "000000"; string parentFullPath = ((ISCQualifiedNameObject)parent).GetQualifiedName(); if (parent.ID == SCOrganization.GetRoot().ID) { parentGlobalSort = string.Empty; parentFullPath = string.Empty; } else { if (parent.CurrentParentRelations.Count > 0) { if (parent.CurrentParentRelations[0].FullPath.IsNotEmpty()) { parentFullPath = parent.CurrentParentRelations[0].FullPath; } if (parent.CurrentParentRelations[0].GlobalSort.IsNotEmpty()) { parentGlobalSort = parent.CurrentParentRelations[0].GlobalSort; } } } string childName = ((ISCQualifiedNameObject)child).GetQualifiedName(); if (parentFullPath.IsNotEmpty()) { this.FullPath = parentFullPath + "\\" + childName; } else { this.FullPath = childName; } this.GlobalSort = parentGlobalSort + string.Format("{0:000000}", this.InnerSort); }
public void FillDetails() { SchemaObjectCollection allObjs = ToSchemaObjects(); this.ForEach(sor => { sor.Detail = allObjs[sor.ID]; if (sor.Detail == null) { if (string.Compare(SCOrganization.RootOrganizationID, sor.ID, true) == 0) { sor.Detail = SCOrganization.GetRoot(); } else { throw new ObjectNotFoundException("Can not find matching detail of object (ID:" + sor.ID + "), there may have data errors"); } } }); }
/// <summary> /// 得到根对象的实例 /// </summary> /// <returns></returns> public static SCObjectAndRelation GetRoot() { SCOrganization root = SCOrganization.GetRoot(); SCRelationObject rootRelation = SCOrganization.GetRootRelationObject(); SCObjectAndRelation result = new SCObjectAndRelation(); result.ID = root.ID; result.Name = root.Name; result.CodeName = root.CodeName; result.DisplayName = root.DisplayName; result.SchemaType = root.SchemaType; result.Status = root.Status; result.Default = rootRelation.Default; result.InnerSort = rootRelation.InnerSort; result.GlobalSort = rootRelation.GlobalSort; result.ParentID = rootRelation.ParentID; result.FullPath = rootRelation.FullPath; return(result); }
private static SCRelationObject UpdateRelation(SCOrganization org, SCUser user) { SCOrganization root = SCOrganization.GetRoot(); SCRelationObject orgRelation = new SCRelationObject(root, org); SCRelationObject relation = new SCRelationObject(org, user); SCActionContext.Current.DoActions(() => { using (TransactionScope scope = TransactionScopeFactory.Create()) { SchemaObjectAdapter.Instance.Update(org); SchemaRelationObjectAdapter.Instance.Update(orgRelation); SchemaObjectAdapter.Instance.Update(user); SchemaRelationObjectAdapter.Instance.Update(relation); scope.Complete(); } }); return relation; }
public override void ExecuteEachOrganization(SCObjectSet objectSet, IImportContext context, IDictionary <string, PC.SchemaObjectBase> knownObjects, PC.SCOrganization org, Dictionary <string, IList <PC.SCOrganization> > orgToOrgRelations, Dictionary <string, IList <PC.SCUser> > orgToUserRelations, Dictionary <string, IList <PC.SCGroup> > orgToGroupRelations) { if (orgToUserRelations.ContainsKey(org.ID)) { var users = orgToUserRelations[org.ID]; if (users.Count > 0) { context.SetStatus(Owner.currentSteps, Owner.allSteps, string.Format("正在查找 {0} 中的用户", org.ToDescription())); } for (int i = 0; i < users.Count; i++) { var user = users[i]; try { if (this.importedUsers.ContainsKey(user.ID) == false) { context.SetSubStatusAndLog(i + 1, users.Count, string.Format("正在向组织 {0} 导入用户 {1}", org.Name, user.Name)); PC.Executors.SCObjectOperations.Instance.AddUser(user, org); this.importedUsers.Add(user.ID, user); if (knownObjects.ContainsKey(user.ID) == false) { knownObjects.Add(user.ID, user); } } else { context.SetSubStatusAndLog(i + 1, users.Count, string.Format("正在向组织 {0} 添加用户 {1}", org.Name, user.Name)); PC.Executors.SCObjectOperations.Instance.AddUserToOrganization(user, org); if (knownObjects.ContainsKey(user.ID) == false) { knownObjects.Add(user.ID, user); } } } catch (Exception ex) { context.AppendLog(string.Format("向组织 {0} 导入用户 {1} 时出错:", org.Name, user.Name, ex.ToString())); } } } }
/// <summary> /// 在递归的每个组织中调用一次 /// </summary> /// <param name="objectSet"></param> /// <param name="context"></param> /// <param name="knownObjects"></param> /// <param name="relation"></param> /// <param name="orgToOrgRelations"></param> /// <param name="orgToUserRelations"></param> /// <param name="orgToGroupRelations"></param> public abstract void ExecuteEachOrganization(SCObjectSet objectSet, IImportContext context, IDictionary <string, PC.SchemaObjectBase> knownObjects, PC.SCOrganization org, Dictionary <string, IList <PC.SCOrganization> > orgToOrgRelations, Dictionary <string, IList <PC.SCUser> > orgToUserRelations, Dictionary <string, IList <PC.SCGroup> > orgToGroupRelations);
public override void ExecutePostOperation(SCObjectSet objectSet, IImportContext context, IDictionary <string, PC.SchemaObjectBase> knownObjects, PC.SCOrganization org, Dictionary <string, IList <PC.SCOrganization> > orgToOrgRelations, Dictionary <string, IList <PC.SCUser> > orgToUserRelations, Dictionary <string, IList <PC.SCGroup> > orgToGroupRelations) { if (this.ImportSecretaries) { var allUsers = this.importedUsers.Values.ToArray(); var reducedMemberships = ImportService.Instance.FilterMembership(objectSet.Membership, m => Util.IsUser(m.MemberSchemaType) && Util.IsUser(m.ContainerSchemaType)).ToList(); if (reducedMemberships.Count > 0) { int count = reducedMemberships.Count; int step = 0; context.SetStatus(Owner.currentSteps, Owner.allSteps, "正在查找人员秘书"); foreach (var r in reducedMemberships) { step++; try { if (this.importedUsers.ContainsKey(r.ContainerID)) { var boss = this.importedUsers[r.ContainerID]; // 导入的用户是上司的 ImportService.Instance.WithEffectObject <PC.SCUser>(r.ID, knownObjects, secretary => { context.SetSubStatusAndLog(step, count, string.Format("正在替 {0} 添加秘书 {1}", boss.Name, secretary.Name)); PC.Executors.SCObjectOperations.Instance.AddSecretaryToUser(secretary, boss); }, null); } else if (this.importedUsers.ContainsKey(r.ID)) { var secretary = this.importedUsers[r.ID]; // 作为秘书的 ImportService.Instance.WithEffectObject <PC.SCUser>(r.ContainerID, knownObjects, boss => { context.SetSubStatusAndLog(step, count, string.Format("正在替 {0} 添加秘书 {1}", boss.Name, secretary.Name)); PC.Executors.SCObjectOperations.Instance.AddSecretaryToUser(secretary, boss); }, null); } } catch (Exception ex) { context.SetSubStatusAndLog(step, count, string.Format("未能完成添加秘书操作:{0}", ex.ToString())); } } } } }
public OguImportAction(PC.SCOrganization parent) { this.Parent = parent; }
public override void ExecuteEachOrganization(SCObjectSet objectSet, IImportContext context, IDictionary <string, PC.SchemaObjectBase> knownObjects, PC.SCOrganization org, Dictionary <string, IList <PC.SCOrganization> > orgToOrgRelations, Dictionary <string, IList <PC.SCUser> > orgToUserRelations, Dictionary <string, IList <PC.SCGroup> > orgToGroupRelations) { if (objectSet.HasAcls) { context.SetStatus(Owner.currentSteps, Owner.allSteps, string.Format("正在寻找 {0} 的ACL。", org.ToDescription())); var allAcls = ImportService.Instance.FilterAcls(objectSet.Acls, acl => acl.ContainerID == org.ID && acl.Status == SchemaObjectStatus.Normal).ToList(); var summaryName = org.ToDescription(); try { var newContainer = new PC.Permissions.SCAclContainer(org); foreach (var acl in allAcls) { ImportService.Instance.WithEffectObject <PC.SchemaObjectBase>(acl.MemberID, knownObjects, role => { newContainer.Members.Add(acl.ContainerPermission, role); }, null); } var oldMembers = PC.Adapters.SCAclAdapter.Instance.LoadByContainerID(org.ID, DateTime.MinValue); if (oldMembers != null) { newContainer.Members.MergeChangedItems(oldMembers); } context.SetStatusAndLog(Owner.currentSteps, Owner.allSteps, string.Format("正在替换 {0} 的ACL:", summaryName)); PC.Adapters.SCAclAdapter.Instance.Update(newContainer); } catch (Exception ex) { context.AppendLogFormat("对象 {0} 的ACL操作失败,原因是:{1}\r\n", summaryName, ex.Message); } } }
private static void DeleteProgressNextStepDestroyUsers(PostProgressDoPostedDataEventArgs e, SCOrganization parent) { (e.Steps.Count > 0).FalseThrow<InvalidOperationException>("没有选择要删除的对象"); var objectsToDelete = DbUtil.LoadObjects((from string id in e.Steps select id).ToArray()); ProcessProgress.Current.Output.WriteLine("准备执行操作"); PC.Executors.SCObjectOperations.InstanceWithPermissions.DeleteObjectsRecursively(objectsToDelete, parent); ProcessProgress.Current.Output.WriteLine("准备删除当前级别选定的人员……"); foreach (var item in objectsToDelete) { if (item is PC.SCUser) { try { PC.Executors.SCObjectOperations.InstanceWithPermissions.DeleteUser((PC.SCUser)item, null, false); ProcessProgress.Current.Output.WriteLine("已删除用户{0}(ID:{1})", ((PC.SCUser)item).Name, item.ID); ; } catch (Exception ex) { ProcessProgress.Current.Output.WriteLine("删除用户{0}(ID:{1})时发生错误:{2}", ((PC.SCUser)item).Name, item.ID, ex.ToString()); ; } } } ProcessProgress.Current.Output.WriteLine("完毕"); e.Result.CloseWindow = false; e.Result.ProcessLog = ProcessProgress.Current.GetDefaultOutput(); }
public override void ExecuteEachOrganization(SCObjectSet objectSet, IImportContext context, IDictionary <string, PC.SchemaObjectBase> knownObjects, PC.SCOrganization org, Dictionary <string, IList <PC.SCOrganization> > orgToOrgRelations, Dictionary <string, IList <PC.SCUser> > orgToUserRelations, Dictionary <string, IList <PC.SCGroup> > orgToGroupRelations) { if (orgToGroupRelations.ContainsKey(org.ID)) { var groups = orgToGroupRelations[org.ID]; if (groups.Count > 0) { context.SetStatus(Owner.currentSteps, Owner.allSteps, string.Format("正在查找 {0} 中的群组", org.ToDescription())); } for (int i = 0; i < groups.Count; i++) { var group = groups[i]; try { context.SetSubStatusAndLog(i + 1, groups.Count, string.Format("正在向组织 {0} 添加群组 {1}", org.Name, group.Name)); PC.Executors.SCObjectOperations.Instance.AddGroup(group, org); knownObjects.Add(group.ID, group); this.DoImportMembers(objectSet, context, knownObjects, group); this.DoImportConditions(objectSet, context, group); } catch (Exception ex) { context.AppendLog(string.Format("向组织 {0} 导入群组 {1} 时出错:", org.ToDescription(), group.Name, ex.ToString())); } } } }
public override SCObjectSet Execute(HttpRequest req) { string[] ids = req.Form.GetValues("id"); if (ids == null && ids.Length < 0) { throw new HttpException("当获组织机构对象时,必须提供ID参数"); } SCObjectSet objectSet = new SCObjectSet(); objectSet.Scope = "OguObjects"; WhereSqlClauseBuilder where = new WhereSqlClauseBuilder(); where.AppendItem("Status", (int)SchemaObjectStatus.Normal); ConnectiveSqlClauseCollection conditios = new ConnectiveSqlClauseCollection(where, VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder()); { string parentId = req.Form["ParentId"]; if (string.IsNullOrEmpty(parentId)) { throw new HttpException("当获取组织机构对象时,必须提供ParentId参数"); } PC.SCOrganization parentObj = parentId == PC.SCOrganization.RootOrganizationID ? PC.SCOrganization.GetRoot() : (PC.SCOrganization)PC.Adapters.SchemaObjectAdapter.Instance.Load(parentId); if (parentObj == null || parentObj.Status != SchemaObjectStatus.Normal) { throw new HttpException("指定的父级对象不存在或者已删除"); } InSqlClauseBuilder idIn = new InSqlClauseBuilder("ID"); idIn.AppendItem(ids); conditios.Add(idIn); objectSet.Objects = PC.Adapters.SchemaObjectAdapter.Instance.Load(conditios); objectSet.Relations = this.FilterChildren(PC.Adapters.SchemaRelationObjectAdapter.Instance.LoadByParentID(parentId), ids); // 保存对象的下级关系(如果有) objectSet.Membership = ExportQueryHelper.LoadFullMemberships(ids); // 如果含有群组,导出群组的条件 string[] groupIds = (from PC.SchemaObjectBase o in objectSet.Objects where o is PC.SCGroup select o.ID).ToArray(); if (groupIds.Length > 0) { var conditions = ExportQueryHelper.LoadConditions(groupIds); if (conditions.Count > 0) { objectSet.Conditions = conditions; } } // 如果含有组织,导出组织的Acl string[] orgIds = (from PC.SchemaObjectBase o in objectSet.Objects where o is PC.SCOrganization select o.ID).ToArray(); objectSet.Acls = ExportQueryHelper.LoadAclsFor(orgIds); } return(objectSet); }
private void DoHierarchicalAction(SCObjectSet objectSet, IImportContext context, IDictionary <string, PC.SchemaObjectBase> knownObjects, Dictionary <string, IList <PC.SCOrganization> > orgToOrgRelations, Dictionary <string, IList <PC.SCUser> > orgToUserRelations, Dictionary <string, IList <PC.SCGroup> > orgToGroupRelations, PC.SCOrganization currentParent, HierarchicalAction actionAdapter) { // 爬树 PC.SchemaObjectCollection objects = objectSet.Objects; if (orgToOrgRelations.ContainsKey(currentParent.ID)) { var childList = orgToOrgRelations[currentParent.ID]; for (int i = 0; i < childList.Count; i++) { this.currentSteps++; var org = childList[i]; System.Diagnostics.Debug.WriteLine("正在处理组织" + org.Name); actionAdapter.ExecuteEachOrganization(objectSet, context, knownObjects, org, orgToOrgRelations, orgToUserRelations, orgToGroupRelations); this.DoHierarchicalAction(objectSet, context, knownObjects, orgToOrgRelations, orgToUserRelations, orgToGroupRelations, org, actionAdapter); } } }
/// <summary> /// 准备组织 /// </summary> /// <param name="objectSet"></param> /// <param name="context"></param> /// <param name="knownObjects">向其中写入已经确认存在于数据库中的项</param> /// <param name="orgToOrgRelations">组织关系</param> /// <param name="allSteps"></param> /// <param name="currentSteps"></param> /// <param name="currentParent"></param> /// <param name="checkOnly"><see langword="true"/>表示只检查组织关系,不实际导入。</param> /// <returns></returns> private bool PrepareOrganizations(SCObjectSet objectSet, IImportContext context, IDictionary <string, PC.SchemaObjectBase> knownObjects, Dictionary <string, IList <PC.SCOrganization> > orgToOrgRelations, PC.SCOrganization currentParent, bool checkOnly) { bool valid = true; PC.SchemaObjectCollection objects = objectSet.Objects; if (orgToOrgRelations.ContainsKey(currentParent.ID)) { var childList = orgToOrgRelations[currentParent.ID]; for (int i = 0; i < childList.Count; i++) { this.currentSteps++; var org = childList[i]; try { // 导入该组织 if (checkOnly == false) { var msg = string.Format("正在导入组织{0}", org.ToDescription()); context.AppendLog(msg); context.SetStatus(this.currentSteps, this.allSteps, msg); PC.Executors.SCObjectOperations.Instance.AddOrganization(org, currentParent); if (knownObjects.ContainsKey(org.ID) == false) { knownObjects.Add(org.ID, org); } } else { context.SetStatus(this.currentSteps, this.allSteps, string.Format("正在校验组织 {0} ", org.ToDescription())); if (Util.IsNullOrDeleted(PC.Adapters.SchemaObjectAdapter.Instance.Load(org.ID))) { context.AppendLog(string.Format("组织 {0} 不存在,导入时将排除此组织及子对象", org.ToDescription())); valid = false; childList.RemoveAt(i); i--; continue; } else if (Util.IsNullOrDeleted(PC.Adapters.SchemaRelationObjectAdapter.Instance.Load(currentParent.ID, org.ID))) { context.AppendLog(string.Format("组织 {0} 已存在,但已被移至其他位置,导入时将排除此组织及子对象。", org.ToDescription())); valid = false; childList.RemoveAt(i); i--; continue; } else { if (knownObjects.ContainsKey(org.ID) == false) { knownObjects.Add(org.ID, org); } } } valid &= this.PrepareOrganizations(objectSet, context, knownObjects, orgToOrgRelations, org, checkOnly); } catch (Exception ex) { context.AppendLog(string.Format("导入组织 {0} 时出现错误,已跳过了该组织及子对象:{1}", org.ToDescription(), ex.ToString())); valid = false; childList.RemoveAt(i); i--; } } } return(valid); }
public OUTransferExecutor(string orgKey, string[] src, string[] target) : base(src, target) { orgKey.NullCheck("orgKey"); this.parent = (SCOrganization)DbUtil.GetEffectiveObject(orgKey, null); }
private static void InitUsers() { PC.SCOrganization org = (PC.SCOrganization)PC.Adapters.SchemaObjectAdapter.Instance.LoadByCodeName(c => { SchemaStrict(c, "O.", PC.StandardObjectSchemaType.Organizations); }, DateTime.MinValue, "流程管理部").First(); PC.SCUser user1 = FillAdditionProperties(new PC.SCUser() { Name = "樊海云", DisplayName = "樊海云", CodeName = "fanhy", FirstName = "海云", LastName = "樊", Status = SchemaObjectStatus.Normal, ID = "3210EEA0-9E13-44E3-A321-D7693BD0911F", Creator = CastUser(Wangli), }); PC.SCUser user2 = FillAdditionProperties(new PC.SCUser() { Name = "杨睿1", DisplayName = "杨睿(集团流程管理部)", CodeName = "yangrui1", FirstName = "睿1", LastName = "杨", Status = SchemaObjectStatus.Normal, ID = "766DFF51-6A29-43B2-95D9-D33456E536F9", Creator = CastUser(Wangli), }); user2.Properties["Mail"].StringValue = "*****@*****.**"; PC.SCUser user3 = FillAdditionProperties(new PC.SCUser() { Name = "刘闽辉", DisplayName = "刘闽辉", CodeName = "liumh", FirstName = "闽辉", LastName = "刘", Status = SchemaObjectStatus.Normal, ID = "3729DAC3-80E0-476C-8C4A-264E0F67BBC2", Creator = CastUser(Wangli), }); user3.Properties["Mail"].StringValue = "*****@*****.**"; Facade.AddUser(user1, org); Facade.AddUser(user2, org); Facade.AddUser(user3, org); PC.Adapters.UserPasswordAdapter.Instance.SetPassword(user3.ID, PC.Adapters.UserPasswordAdapter.GetPasswordType(), "password"); PC.SCUser userOther = FillAdditionProperties(new PC.SCUser() { Name = "王立臣", DisplayName = "王立臣", CodeName = "wanglch", FirstName = "立臣", LastName = "王", Status = SchemaObjectStatus.Normal, ID = "587200E1-3EC4-43B2-8F3A-167E20F41D09", Creator = CastUser(Wangli), }); userOther.Properties["Mail"].StringValue = "*****@*****.**"; PC.SCOrganization orgOther = (PC.SCOrganization)PC.Adapters.SchemaObjectAdapter.Instance.LoadByCodeName(c => { SchemaStrict(c, "O.", PC.StandardObjectSchemaType.Organizations); }, DateTime.MinValue, "costEngineer").First(); Facade.AddUser(userOther, orgOther); orgOther = (PC.SCOrganization)PC.Adapters.SchemaObjectAdapter.Instance.LoadByCodeName(c => { SchemaStrict(c, "O.", PC.StandardObjectSchemaType.Organizations); }, DateTime.MinValue, "beijingYuanlianExecutives").First(); Facade.AddUserToOrganization(user3, orgOther); orgOther = (PC.SCOrganization)PC.Adapters.SchemaObjectAdapter.Instance.LoadByCodeName(c => { SchemaStrict(c, "O.", PC.StandardObjectSchemaType.Organizations); }, DateTime.MinValue, "养老地产业务发展中心").First(); userOther = FillAdditionProperties(new PC.SCUser() { Name = "赵林", DisplayName = "赵林", CodeName = "zhaolin1", FirstName = "林", LastName = "赵", Status = SchemaObjectStatus.Normal, ID = "D1C28431-DD5D-496E-865B-85C6D89ED3D6", Creator = CastUser(Wangli), }); userOther.Properties["Mail"].StringValue = "*****@*****.**"; Facade.AddUser(userOther, orgOther); userOther = FillAdditionProperties(new PC.SCUser() { Name = "李业明", DisplayName = "李业明", CodeName = "liyem", FirstName = "业明", LastName = "李", Status = SchemaObjectStatus.Normal, ID = "B36CC307-1D92-4D27-B670-A4301006BF0B", Creator = CastUser(Wangli), }); userOther.Properties["Mail"].StringValue = "*****@*****.**"; Facade.AddUser(userOther, orgOther); userOther = FillAdditionProperties(new PC.SCUser() { Name = "张帅一", DisplayName = "张帅一", CodeName = "zhangshuaiy", FirstName = "帅一", LastName = "张", Status = SchemaObjectStatus.Normal, ID = "EF68CDD1-3FD3-418A-8D4D-98F2E02FB2CA", Creator = CastUser(Wangli), }); userOther.Properties["Mail"].StringValue = "*****@*****.**"; Facade.AddUser(userOther, org); //主职 Facade.AddUserToOrganization(userOther, orgOther); //兼职 Facade.SetUserDefaultOrganization(userOther, org); //确保主职 userOther = FillAdditionProperties(new PC.SCUser() { Name = "陈科", DisplayName = "陈科", CodeName = "chenke", FirstName = "科", LastName = "陈", Status = SchemaObjectStatus.Normal, ID = "E8F71526-23A2-4A39-A8AC-F79A2D255D1A", Creator = CastUser(Wangli), }); userOther.Properties["Mail"].StringValue = "*****@*****.**"; orgOther = (PC.SCOrganization)PC.Adapters.SchemaObjectAdapter.Instance.LoadByCodeName(c => { SchemaStrict(c, "O.", PC.StandardObjectSchemaType.Organizations); }, DateTime.MinValue, "costEngineer").First(); Facade.AddUser(userOther, orgOther); // 独立部门开始 userOther = FillAdditionProperties(new PC.SCUser() { Name = "王发平", DisplayName = "王发平", CodeName = "wangfaping", FirstName = "发平", LastName = "王", Status = SchemaObjectStatus.Normal, ID = "2B67F7D0-9362-401F-977F-3E267E87298B", Creator = CastUser(Wangli), }); userOther.Properties["Mail"].StringValue = "*****@*****.**"; orgOther = (PC.SCOrganization)PC.Adapters.SchemaObjectAdapter.Instance.LoadByCodeName(c => { SchemaStrict(c, "O.", PC.StandardObjectSchemaType.Organizations); }, DateTime.MinValue, "yuanyangAobei").First(); Facade.AddUser(userOther, orgOther); userOther = FillAdditionProperties(new PC.SCUser() { Name = "金戈", DisplayName = "金戈", CodeName = "jinge", FirstName = "戈", LastName = "金", Status = SchemaObjectStatus.Normal, ID = "1688EB81-0FFB-4072-B26B-6DB571DCC391", Creator = CastUser(Wangli), }); userOther.Properties["Mail"].StringValue = "*****@*****.**"; Facade.AddUser(userOther, orgOther); userOther = FillAdditionProperties(new PC.SCUser() { Name = "范晓君", DisplayName = "范晓君", CodeName = "fanxiaojun", FirstName = "晓君", LastName = "范", Status = SchemaObjectStatus.Normal, ID = "165EE11A-76ED-4C91-BD02-4AB6703F8FFA", Creator = CastUser(Wangli), }); userOther.Properties["Mail"].StringValue = "*****@*****.**"; orgOther = (PC.SCOrganization)PC.Adapters.SchemaObjectAdapter.Instance.LoadByCodeName(c => { SchemaStrict(c, "O.", PC.StandardObjectSchemaType.Organizations); }, DateTime.MinValue, "beijingSOIC").First(); Facade.AddUser(userOther, orgOther); userOther = FillAdditionProperties(new PC.SCUser() { Name = "高根", DisplayName = "高根", CodeName = "gaogen", FirstName = "根", LastName = "高", Status = SchemaObjectStatus.Normal, ID = "81987195-756E-4FDA-868E-E4177096B212", Creator = CastUser(Wangli), }); userOther.Properties["Mail"].StringValue = "*****@*****.**"; Facade.AddUser(userOther, orgOther); userOther = FillAdditionProperties(new PC.SCUser() { Name = "胡瑞雪", DisplayName = "胡瑞雪", CodeName = "hurx", FirstName = "瑞雪", LastName = "胡", Status = SchemaObjectStatus.Normal, ID = "4FD109E4-FFC5-487C-B99B-DB20B6A0B2B9", Creator = CastUser(Wangli), }); userOther.Properties["Mail"].StringValue = "*****@*****.**"; orgOther = (PC.SCOrganization)PC.Adapters.SchemaObjectAdapter.Instance.LoadByCodeName(c => { SchemaStrict(c, "O.", PC.StandardObjectSchemaType.Organizations); }, DateTime.MinValue, "beijingSOI").First(); Facade.AddUser(userOther, orgOther); }
public override SCObjectSet Execute(HttpRequest req) { string parentId = req.Form["ParentId"]; if (string.IsNullOrEmpty(parentId)) { throw new HttpException("当获取深度组织机构对象时,必须提供ParentId参数"); } PC.SCOrganization parentObj = parentId == PC.SCOrganization.RootOrganizationID ? PC.SCOrganization.GetRoot() : (PC.SCOrganization)PC.Adapters.SchemaObjectAdapter.Instance.Load(parentId); if (parentObj == null || parentObj.Status != SchemaObjectStatus.Normal) { throw new HttpException("指定的父级对象不存在或者已删除"); } List <string> ids; string[] requestIds = req.Form.GetValues("id"); if (requestIds == null || requestIds.Length == 0) { PC.SCSimpleRelationObjectCollection allChildren = PC.Adapters.SchemaRelationObjectAdapter.Instance.LoadAllChildrenRelationsRecursively(parentObj); ids = new List <string>(allChildren.Count); allChildren.ForEach(so => ids.Add(so.ID)); } else { PC.SCSimpleRelationObjectCollection allChildren = new PC.SCSimpleRelationObjectCollection(); ids = new List <string>(); var directRelations = ExportQueryHelper.LoadRelations(parentId, requestIds); foreach (var item in directRelations) { ids.Add(item.ID); } var selectedObjects = DbUtil.LoadObjects(ids.ToArray()); foreach (var item in selectedObjects) { var subRelations = PC.Adapters.SchemaRelationObjectAdapter.Instance.LoadAllChildrenRelationsRecursively(item); subRelations.ForEach(m => ids.Add(m.ID)); } } SCObjectSet set = new SCObjectSet(); if (ids.Count > 0) { set.Objects = DbUtil.LoadObjects(ids.ToArray()); set.Objects.Distinct((m, n) => m.ID == n.ID); var objIds = set.Objects.ToIDArray(); set.Relations = ExportQueryHelper.LoadFullRelations(objIds); set.Relations.Distinct((a, b) => a.ID == b.ID && a.ParentID == b.ParentID); set.Membership = ExportQueryHelper.LoadFullMemberships(objIds); set.Membership.Distinct((a, b) => a.ID == b.ID && a.ContainerID == b.ContainerID); set.Acls = ExportQueryHelper.LoadAclsFor(objIds); set.Conditions = ExportQueryHelper.LoadConditions(objIds); } set.Scope = "OguFull"; return(set); }
public OguOrganizationImportAction(PC.SCOrganization parent) : base(parent) { }
private static void DeleteProgressNextStep(PostProgressDoPostedDataEventArgs e, SCOrganization parent) { (e.Steps.Count > 0).FalseThrow<InvalidOperationException>("没有选择要删除的对象"); var objectsToDelete = DbUtil.LoadObjects((from string id in e.Steps select id).ToArray()); ProcessProgress.Current.Output.WriteLine("准备执行操作"); PC.Executors.SCObjectOperations.InstanceWithPermissions.DeleteObjectsRecursively(objectsToDelete, parent); ProcessProgress.Current.Output.WriteLine("完毕"); e.Result.CloseWindow = false; e.Result.ProcessLog = ProcessProgress.Current.GetDefaultOutput(); }