示例#1
0
        public void SetUserDefaultOrganizationTest()
        {
            SCUser user = SCObjectGenerator.PrepareUserObject();

            SCObjectOperations.Instance.AddUser(user, null);

            SCUser userLoaded = (SCUser)SchemaObjectAdapter.Instance.Load(user.ID);

            SCOrganization root = SCOrganization.GetRoot();

            SCOrganization org1 = SCObjectGenerator.PrepareOrganizationObject();

            SCObjectOperations.Instance.AddOrganization(org1, root);

            SCOrganization org2 = SCObjectGenerator.PrepareOrganizationObject();

            SCObjectOperations.Instance.AddOrganization(org2, root);

            SCObjectOperations.Instance.AddUserToOrganization(user, org1);
            SCObjectOperations.Instance.AddUserToOrganization(user, org2);

            SCObjectOperations.Instance.SetUserDefaultOrganization(user, org2);

            SCRelationObject relation1 = SchemaRelationObjectAdapter.Instance.Load(org1.ID, userLoaded.ID);
            SCRelationObject relation2 = SchemaRelationObjectAdapter.Instance.Load(org2.ID, userLoaded.ID);

            Assert.IsFalse(relation1.Default);
            Assert.IsTrue(relation2.Default);
        }
示例#2
0
        protected override void PrepareData(AUObjectOperationContext context)
        {
            this._OriginalRelation = this._Object.GetCurrentVeryParentRelation();

            if (this._OriginalRelation == null || this._OriginalRelation.Status != SchemaObjectStatus.Normal)
            {
                throw new AUObjectValidationException("未找到此管理单元对应的上级关系");
            }

            AUCommon.DoDbAction(() =>
            {
                this._SourceObject = this._OriginalRelation.Parent;
                this._ActualTarget = this._Target ?? SchemaObjectAdapter.Instance.Load(this._Object.AUSchemaID);
            });

            if (this._SourceObject == null || this._SourceObject.Status != SchemaObjectStatus.Normal)
            {
                throw new AUObjectValidationException("未找到此管理单元对应的上级对象");
            }

            if (this._OriginalRelation.ParentID == this._ActualTarget.ID)
            {
                throw new AUObjectValidationException("此管理单元已经属于目标管理单元,无需移动。");
            }
            AUCommon.DoDbAction(() =>
            {
                this._TargetRelation        = PrepareTargetRelation(this._ActualTarget, this._Object);
                this._NeedGenerateFullPaths = (this._Object is ISCRelationContainer) && (((ISCRelationContainer)this._Object).CurrentChildren.Count > 0);

                Validate();
            });
        }
        public SCMoveObjectExecutor(SCOperationType opType, SCOrganization originalOrg, SCBase obj, SCOrganization targetOrg)
            : base(opType)
        {
            obj.NullCheck("obj");
            targetOrg.NullCheck("targetOrg");

            obj.ClearRelativeData();
            targetOrg.ClearRelativeData();

            if (originalOrg != null)
            {
                originalOrg.ClearRelativeData();
            }

            this._Object = obj;
            this._OriginalOrganization = originalOrg;
            this._TargetOrganization   = targetOrg;

            this._NeedChangeOwner = PrepareNeedChangeOwner(originalOrg, targetOrg, obj);

            if (originalOrg != null && originalOrg.ID == targetOrg.ID)
            {
                this._RelationExisted = true;
            }
            else
            {
                this._OriginalRelation      = PreprareOriginalRelation(originalOrg, obj);
                this._TargetRelation        = PrepareTargetRelation(targetOrg, obj);
                this._NeedGenerateFullPaths = (obj is ISCRelationContainer) && (((ISCRelationContainer)obj).GetCurrentChildrenCount() > 0);
            }
        }
示例#4
0
        public void SCQueryPermissionsByUserIDsSnapshotTest()
        {
            SCApplication application = SCObjectGenerator.PrepareApplicationObject();

            SCObjectOperations.Instance.AddApplication(application);

            SCRole role = SCObjectGenerator.PrepareRoleObject();

            SCObjectOperations.Instance.AddRole(role, application);

            SCPermission permission = SCObjectGenerator.PreparePermissionObject();

            SCObjectOperations.Instance.AddPermission(permission, application);

            SCRelationObject relation = SCObjectOperations.Instance.JoinRoleAndPermission(role, permission);

            SCUser user1 = SCObjectGenerator.PrepareUserObject("RU1", "User1", "RoleUser1");

            SCObjectOperations.Instance.AddUser(user1, SCOrganization.GetRoot());

            SCObjectOperations.Instance.AddMemberToRole(user1, role);

            SchemaObjectCollection result = SCSnapshotAdapter.Instance.QueryPermissionsByUserIDs(new string[] { user1.ID }, false, DateTime.MinValue);

            Assert.IsTrue(result.Count > 0);

            Console.WriteLine(result[0].Properties.GetValue("Name", string.Empty));

            Assert.AreEqual(permission.ID, result[0].ID);
        }
示例#5
0
        public SCOrganizationRelativeExecutor(SCOperationType opType, SCOrganization parent, SCBase data)
            : base(opType, data)
        {
            parent.NullCheck("organization");

            data.ClearRelativeData();
            parent.ClearRelativeData();

            this._Parent   = parent;
            this._Relation = PrepareRelationObject(parent, data);

            if (this.OperationType == SCOperationType.AddOrganization)
            {
                this._AclContainer = PrepareAclContainer(parent, data);
            }

            if (data is SCUser)
            {
                this._TargetParentRelations = data.CurrentParentRelations;

                if (this.OperationType == SCOperationType.AddUser && this._TargetParentRelations.Count == 0)
                {
                    SCUser user = (SCUser)data;

                    user.OwnerID   = parent.ID;
                    user.OwnerName = parent.Properties.GetValue("Name", string.Empty);
                }
            }
        }
		public SCOrganizationRelativeExecutor(SCOperationType opType, SCOrganization parent, SCBase data)
			: base(opType, data)
		{
			parent.NullCheck("organization");

			data.ClearRelativeData();
			parent.ClearRelativeData();

			this._Parent = parent;
			this._Relation = PrepareRelationObject(parent, data);

			if (this.OperationType == SCOperationType.AddOrganization)
				this._AclContainer = PrepareAclContainer(parent, data);

			if (data is SCUser)
			{
				this._TargetParentRelations = data.CurrentParentRelations;

				if (this.OperationType == SCOperationType.AddUser && this._TargetParentRelations.Count == 0)
				{
					SCUser user = (SCUser)data;

					user.OwnerID = parent.ID;
					user.OwnerName = parent.Properties.GetValue("Name", string.Empty);
				}
			}
		}
		public SCMoveObjectExecutor(SCOperationType opType, SCOrganization originalOrg, SCBase obj, SCOrganization targetOrg)
			: base(opType)
		{
			obj.NullCheck("obj");
			targetOrg.NullCheck("targetOrg");

			obj.ClearRelativeData();
			targetOrg.ClearRelativeData();

			if (originalOrg != null)
				originalOrg.ClearRelativeData();

			this._Object = obj;
			this._OriginalOrganization = originalOrg;
			this._TargetOrganization = targetOrg;

			this._NeedChangeOwner = PrepareNeedChangeOwner(originalOrg, targetOrg, obj);

			if (originalOrg != null && originalOrg.ID == targetOrg.ID)
			{
				this._RelationExisted = true;
			}
			else
			{
				this._OriginalRelation = PreprareOriginalRelation(originalOrg, obj);
				this._TargetRelation = PrepareTargetRelation(targetOrg, obj);
				this._NeedGenerateFullPaths = (obj is ISCRelationContainer) && (((ISCRelationContainer)obj).GetCurrentChildrenCount() > 0);
			}
		}
        private SCRelationObject PrepareTargetRelation(SCOrganization targetOrg, SCBase obj)
        {
            SCRelationObject relation = SchemaRelationObjectAdapter.Instance.Load(targetOrg.ID, obj.ID);

            if (relation == null)
            {
                relation = new SCRelationObject(targetOrg, obj);

                if (this._OriginalRelation != null)
                {
                    relation.Default = _OriginalRelation.Default;
                }
            }
            else
            {
                if (relation.Status == SchemaObjectStatus.Normal)
                {
                    this._RelationExisted = true;
                }
                else
                {
                    relation.CalculateFullPathAndGlobalSort(targetOrg, obj);
                    relation.Status = SchemaObjectStatus.Normal;
                }
            }

            return(relation);
        }
示例#9
0
        private SCRelationObject PrepareTargetRelation(SchemaObjectBase targetOrg, AdminUnit obj)
        {
            SCRelationObject relation = SchemaRelationObjectAdapter.Instance.Load(targetOrg.ID, obj.ID);

            if (relation == null)
            {
                relation = new SCRelationObject(targetOrg, obj)
                {
                    Default = true
                };
            }
            else
            {
                if (relation.Status == SchemaObjectStatus.Normal)
                {
                    this._RelationExisted = true;
                }
                else
                {
                    relation.CalculateFullPathAndGlobalSort(targetOrg, obj);
                    relation.Status = SchemaObjectStatus.Normal;
                }
            }

            return(relation);
        }
		private void DoFullPathValidate(SCRelationObject relation, string fullPath, string key, ValidationResults validateResults)
		{
			SCRelationObjectCollection relations = SchemaRelationObjectAdapter.Instance.LoadByFullPath(fullPath, this.includingDeleted, DateTime.MinValue);

			SCRelationObject existedRelation = relations.Find(r => r.ParentID == relation.ParentID && r.ID != relation.ID);

			if (existedRelation != null)
				RecordValidationResult(validateResults, string.Format(this.MessageTemplate, existedRelation.FullPath), relation, key);
		}
        private void DoFullPathValidate(SCRelationObject relation, string fullPath, string key, ValidationResults validateResults)
        {
            SCRelationObjectCollection relations = SchemaRelationObjectAdapter.Instance.LoadByFullPath(fullPath, this.includingDeleted, DateTime.MinValue);

            SCRelationObject existedRelation = relations.Find(r => r.ParentID == relation.ParentID && r.ID != relation.ID);

            if (existedRelation != null)
            {
                RecordValidationResult(validateResults, string.Format(this.MessageTemplate, existedRelation.FullPath), relation, key);
            }
        }
示例#12
0
		/// <summary>
		/// 获取根关系对象
		/// </summary>
		/// <returns>一个表示根关系的<see cref="SCRelationObject"/>对象</returns>
		public static SCRelationObject GetRootRelationObject()
		{
			SCRelationObject result = new SCRelationObject();

			result.ParentSchemaType = StandardObjectSchemaType.Organizations.ToString();
			result.ID = RootOrganizationID;
			result.InnerSort = 0;
			result.ChildSchemaType = StandardObjectSchemaType.Organizations.ToString();
			result.FullPath = string.Empty;
			result.GlobalSort = string.Empty;

			return result;
		}
		public SCJoinRoleAndPermissionExecutor(SCOperationType opType, SCRole role, SCPermission permission)
			: base(opType)
		{
			role.NullCheck("role");
			permission.NullCheck("permission");

			role.ClearRelativeData();
			permission.ClearRelativeData();

			this._Relation = PrepareRelationObject(role, permission);

			this._Role = role;
			this._Permission = permission;
		}
示例#14
0
        public SCJoinRoleAndPermissionExecutor(SCOperationType opType, SCRole role, SCPermission permission)
            : base(opType)
        {
            role.NullCheck("role");
            permission.NullCheck("permission");

            role.ClearRelativeData();
            permission.ClearRelativeData();

            this._Relation = PrepareRelationObject(role, permission);

            this._Role       = role;
            this._Permission = permission;
        }
        private SCRelationObject PreprareOriginalRelation(SCOrganization originalOrg, SCBase obj)
        {
            SCRelationObject relation = null;

            if (originalOrg != null)
            {
                relation = SchemaRelationObjectAdapter.Instance.Load(originalOrg.ID, obj.ID);
            }
            else
            {
                relation = obj.CurrentParentRelations.FirstOrDefault();
                this._OriginalOrganization = (SCOrganization)obj.CurrentParents.FirstOrDefault();
            }

            return(relation);
        }
示例#16
0
        public void RemoveUserAndOrganizationRelationTest()
        {
            SCOrganization org  = SCObjectGenerator.PrepareOrganizationObject();
            SCUser         user = SCObjectGenerator.PrepareUserObject();

            SCRelationObject relation = UpdateRelation(org, user);

            SCRelationObject relationLoaded = SchemaRelationObjectAdapter.Instance.Load(org.ID, user.ID);

            Console.WriteLine("Org ID: {0}, User ID: {1}", org.ID, user.ID);

            SchemaRelationObjectAdapter.Instance.UpdateStatus(relationLoaded, SchemaObjectStatus.Deleted);

            relationLoaded = SchemaRelationObjectAdapter.Instance.Load(org.ID, user.ID);

            Assert.AreEqual(SchemaObjectStatus.Deleted, relationLoaded.Status);
        }
示例#17
0
        public static ClientSchemaRelation ToClientSchemaObject(this SCRelationObject pcRelation)
        {
            ClientSchemaRelation result = new ClientSchemaRelation();

            FillCommon(pcRelation, result);

            result.ParentID         = pcRelation.ParentID;
            result.ChildID          = pcRelation.ID;
            result.ChildSchemaType  = pcRelation.ChildSchemaType;
            result.ParentSchemaType = pcRelation.ParentSchemaType;
            result.Default          = pcRelation.Default;
            result.FullPath         = pcRelation.FullPath;
            result.InnerSort        = pcRelation.InnerSort;
            result.GolbalSort       = pcRelation.GlobalSort;

            return(result);
        }
示例#18
0
        private void ImportOneGroup(SCObjectSet objectSet, IImportContext context, PC.Executors.ISCObjectOperations exec, SchemaObjectCollection parentObjects, SchemaObjectCollection memberObjects, int allCount, int count, SchemaObjectBase grp)
        {
            if (grp.SchemaType == "Groups")
            {
                try
                {
                    var summaryName = grp.Properties.GetValue <string>("Name", "未命名");
                    context.SetStatus(count, allCount, "正在导入对象:" + summaryName);

                    if (this.IncludeSelf)
                    {
                        SCRelationObject parentOrgRelation = (SCRelationObject)objectSet.Relations.Find(m => ((SCRelationObject)m).ParentSchemaType == "Organizations" && ((SCRelationObject)m).ChildSchemaType == "Groups" && ((SCRelationObject)m).ID == grp.ID);
                        if (parentOrgRelation == null)
                        {
                            throw new HttpException("未找到群组的父级组织");
                        }

                        var parentOrg = (SCOrganization)(parentObjects != null ? (from p in parentObjects where p.ID == parentOrgRelation.ParentID select p).FirstOrDefault() : null);
                        if (parentOrg == null || parentOrg.Status != SchemaObjectStatus.Normal)
                        {
                            throw new HttpException("群组的父级组织不存在或者已删除,未能导入群组。");
                        }

                        exec.AddGroup((SCGroup)grp, parentOrg);

                        context.AppendLog("已执行导入对象" + summaryName);
                    }

                    ImportMembers(objectSet, context, exec, memberObjects, grp);

                    ImportConditions(objectSet, context, grp);
                }
                catch (Exception ex)
                {
                    context.AppendLog("对项的操作失败,原因是:" + ex.Message);
                }
            }
            else
            {
                context.AppendLog("已跳过不是群组的项");
            }
        }
示例#19
0
        private SCRelationObject PrepareRelationObject(SCRole role, SCPermission permission)
        {
            SCRelationObject relation = SchemaRelationObjectAdapter.Instance.Load(role.ID, permission.ID);

            if (relation == null)
            {
                relation = new SCRelationObject(role, permission);
            }
            else
            {
                if (relation.Status == SchemaObjectStatus.Normal)
                {
                    this._RelationExisted = true;
                }
                else
                {
                    relation.Status = SchemaObjectStatus.Normal;
                }
            }

            return(relation);
        }
示例#20
0
        private SCRelationObject PrepareRelationObject(SCOrganization parent, SCBase data)
        {
            SCRelationObject relation = SchemaRelationObjectAdapter.Instance.Load(parent.ID, data.ID);

            if (relation == null)
            {
                relation = new SCRelationObject(parent, data);
            }
            else
            {
                if (relation.Status == SchemaObjectStatus.Normal)
                {
                    this._RelationExisted = true;
                }
                else
                {
                    relation.Status = SchemaObjectStatus.Normal;
                }
            }

            return(relation);
        }
		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;
		}
示例#22
0
		private static void ValidateName(string name, string codeName, ValidationResult result, AUSchema schema, SchemaObjectBase targetUnit)
		{
			var actualParent = (SchemaObjectBase)targetUnit ?? schema;

			var adminUnit = new AdminUnit()
			{
				ID = UuidHelper.NewUuidString(),
				CodeName = codeName,
				Name = name,
				AUSchemaID = schema.ID
			};

			var validationObjResult = adminUnit.Validate();
			result.ObjectValidationResult = validationObjResult.ResultCount > 0 ? ToMessage(validationObjResult.First()) : "通过";
			result.Passed &= validationObjResult.ResultCount == 0;

			if (result.Passed)
			{
				SCRelationObject relation = new SCRelationObject(actualParent, adminUnit);
				var existedObj = AU.Adapters.AUSnapshotAdapter.Instance.LoadAUByChildName(name, actualParent.ID, AUCommon.SchemaAdminUnit, true, DateTime.MinValue);
				result.NameValidationResult = existedObj.Count > 0 ? "此名称已经被占用,请使用其他名称" : "通过";
				result.Passed &= existedObj.Count == 0;
			}
		}
		private SCRelationObject PrepareTargetRelation(SCOrganization targetOrg, SCBase obj)
		{
			SCRelationObject relation = SchemaRelationObjectAdapter.Instance.Load(targetOrg.ID, obj.ID);

			if (relation == null)
			{
				relation = new SCRelationObject(targetOrg, obj);

				if (this._OriginalRelation != null)
				{
					relation.Default = _OriginalRelation.Default;
				}
			}
			else
			{
				if (relation.Status == SchemaObjectStatus.Normal)
					this._RelationExisted = true;
				else
				{
					relation.CalculateFullPathAndGlobalSort(targetOrg, obj);
					relation.Status = SchemaObjectStatus.Normal;
				}
			}

			return relation;
		}
示例#24
0
		public void TestSerializeRelation()
		{
			System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
			var org = SCObjectGenerator.PrepareOrganizationObject();
			var user = SCObjectGenerator.PrepareUserObject();
			SCRelationObject obj1 = new SCRelationObject(org, user);
			obj1.CreateDate = DateTime.Now;
			obj1.VersionEndTime = new DateTime(567890);
			obj1.VersionEndTime = DateTime.MaxValue;
			obj1.ID = MCS.Library.Core.UuidHelper.NewUuidString();
			obj1.InnerSort = 23;
			obj1.Status = SchemaObjectStatus.Deleted;
			System.IO.MemoryStream ms = new System.IO.MemoryStream();
			bf.Serialize(ms, obj1);
			ms.Seek(0, System.IO.SeekOrigin.Begin);
			var obj2 = (SCRelationObject)bf.Deserialize(ms);
			RelationAssert(obj1, obj2);
		}
示例#25
0
		private SCRelationObject PrepareTargetRelation(SchemaObjectBase targetOrg, AdminUnit obj)
		{
			SCRelationObject relation = SchemaRelationObjectAdapter.Instance.Load(targetOrg.ID, obj.ID);

			if (relation == null)
			{
				relation = new SCRelationObject(targetOrg, obj) { Default = true };
			}
			else
			{
				if (relation.Status == SchemaObjectStatus.Normal)
					this._RelationExisted = true;
				else
				{
					relation.CalculateFullPathAndGlobalSort(targetOrg, obj);
					relation.Status = SchemaObjectStatus.Normal;
				}
			}

			return relation;
		}
示例#26
0
		private void RelationAssert(SCRelationObject obj1, SCRelationObject obj2)
		{
			Assert.IsNotNull(obj1);
			Assert.IsNotNull(obj2);
			Assert.IsTrue(obj1.GetType() == obj2.GetType());
			Assert.IsTrue(obj2.VersionEndTime == obj1.VersionEndTime);
			Assert.IsTrue(obj2.VersionStartTime == obj1.VersionStartTime);
			Assert.IsTrue(obj2.SchemaType == obj1.SchemaType);
			Assert.IsTrue(obj2.CreateDate == obj1.CreateDate);
			if (obj2.Creator != null && obj1.Creator != null)
			{
				Assert.AreEqual(obj2.Creator.ID, obj1.Creator.ID);
				Assert.AreEqual(obj2.Creator.DisplayName, obj2.Creator.DisplayName);
			}
			else
			{
				Assert.AreEqual(obj2.Creator, obj1.Creator); //两者或者都为空
			}
			Assert.IsTrue(obj1.ID == obj1.ID);
			Assert.IsTrue(obj2.Status == obj1.Status);
			foreach (string key in obj1.Properties.GetAllKeys())
			{
				Assert.AreEqual(obj2.Properties[key].StringValue, obj1.Properties[key].StringValue);
			}
		}
		private SCRelationObject PrepareRelationObject(SCRole role, SCPermission permission)
		{
			SCRelationObject relation = SchemaRelationObjectAdapter.Instance.Load(role.ID, permission.ID);

			if (relation == null)
				relation = new SCRelationObject(role, permission);
			else
			{
				if (relation.Status == SchemaObjectStatus.Normal)
					this._RelationExisted = true;
				else
					relation.Status = SchemaObjectStatus.Normal;
			}

			return relation;
		}
示例#28
0
		public ListRelations(IList list, object key, SCRelationObject value)
		{
			this.value = value;
			this.key = key;
			this.list = list;
		}
		private SCRelationObject PrepareRelationObject(SCOrganization parent, SCBase data)
		{
			SCRelationObject relation = SchemaRelationObjectAdapter.Instance.Load(parent.ID, data.ID);

			if (relation == null)
				relation = new SCRelationObject(parent, data);
			else
			{
				if (relation.Status == SchemaObjectStatus.Normal)
					this._RelationExisted = true;
				else
					relation.Status = SchemaObjectStatus.Normal;
			}

			return relation;
		}
示例#30
0
		protected override void PrepareData(AUObjectOperationContext context)
		{
			this._OriginalRelation = this._Object.GetCurrentVeryParentRelation();

			if (this._OriginalRelation == null || this._OriginalRelation.Status != SchemaObjectStatus.Normal)
				throw new AUObjectValidationException("未找到此管理单元对应的上级关系");

			AUCommon.DoDbAction(() =>
			{
				this._SourceObject = this._OriginalRelation.Parent;
				this._ActualTarget = this._Target ?? SchemaObjectAdapter.Instance.Load(this._Object.AUSchemaID);
			});

			if (this._SourceObject == null || this._SourceObject.Status != SchemaObjectStatus.Normal)
				throw new AUObjectValidationException("未找到此管理单元对应的上级对象");

			if (this._OriginalRelation.ParentID == this._ActualTarget.ID)
				throw new AUObjectValidationException("此管理单元已经属于目标管理单元,无需移动。");
			AUCommon.DoDbAction(() =>
			{
				this._TargetRelation = PrepareTargetRelation(this._ActualTarget, this._Object);
				this._NeedGenerateFullPaths = (this._Object is ISCRelationContainer) && (((ISCRelationContainer)this._Object).CurrentChildren.Count > 0);

				Validate();
			});
		}
        private void PrepareRelationObject()
        {
            AUCommon.DoDbAction(() =>
            {
                this.oldRelationToSchema = SchemaRelationObjectAdapter.Instance.Load(((AdminUnit)this.Data).AUSchemaID, this.Data.ID);
                this.oldRelationToUnit = SchemaRelationObjectAdapter.Instance.LoadByObjectID(this.Data.ID).Where(m => m.Status == SchemaObjectStatus.Normal && m.ParentSchemaType == AUCommon.SchemaAdminUnit).FirstOrDefault();

                if (this.Data.Status == SchemaObjectStatus.Normal) //添加操作
                {
                    this.actualParent = inputParent != null ? SchemaObjectAdapter.Instance.Load(this.inputParent.ID) : this.schema;

					if (this.actualParent.ID == this.Data.ID)
						throw new AUObjectValidationException("管理单元的父管理单元不能是其自身。");

                    if (this.actualParent == null || this.actualParent.Status != SchemaObjectStatus.Normal)
                        throw new AUObjectValidationException("指定的父管理单元在系统中不存在或已删除");

                    if (this.oldRelationToSchema != null && this.oldRelationToSchema.Status == SchemaObjectStatus.Normal && this.oldRelationToUnit != null && this.oldRelationToUnit.Status == SchemaObjectStatus.Normal)
                        throw new AUObjectValidationException("关系错误。此管理单元已经存在,但存在错误的关联。一个管理单元不能同时与Schema和另一个管理单元关联");
                    else if (this.oldRelationToSchema != null && this.oldRelationToSchema.Status == SchemaObjectStatus.Normal && actualParent.ID != this.oldRelationToSchema.ParentID)
                        throw new AUObjectValidationException("关系错误。此管理单元已经与另一个Schema关联。");
                    else if (this.oldRelationToUnit != null && this.oldRelationToUnit.Status == SchemaObjectStatus.Normal && actualParent.ID != this.oldRelationToUnit.ParentID)
                        throw new AUObjectValidationException("关系错误。此管理单元已经与另一个AdminUnit关联。");

                }
                else //删除操作,忽略传,m入的parent参数,因此需要查找真实的parent
                {
                    if (oldRelationToUnit != null && oldRelationToUnit.Status == SchemaObjectStatus.Normal)
                    {
                        this.actualParent = SchemaObjectAdapter.Instance.Load(oldRelationToUnit.ParentID);
                    }
                    else if (oldRelationToSchema != null && oldRelationToSchema.Status == SchemaObjectStatus.Normal)
                    {
                        this.actualParent = schema;
                    }
                }


                this.oldRelationToChildren = SchemaRelationObjectAdapter.Instance.LoadByParentID(this.Data.ID);

                if (actualParent is AUSchema)
                {
                    // 应该是跟Schema关联
                    if (oldRelationToSchema != null && oldRelationToSchema.Status == SchemaObjectStatus.Normal)
                    {
                        relationExists = true;
                    }

                    targetRelation = new SCRelationObject(schema, this.Data) { Status = SchemaObjectStatus.Normal };
                }
                else
                {
                    targetRelation = SchemaRelationObjectAdapter.Instance.Load(actualParent.ID, this.Data.ID);
                    if (targetRelation != null)
                    {
                        if (targetRelation.Status == SchemaObjectStatus.Normal)
                        {
                            relationExists = true;
                        }

                        targetRelation.Status = SchemaObjectStatus.Normal;
                    }
                    else
                    {
                        targetRelation = new SCRelationObject(actualParent, this.Data) { Status = SchemaObjectStatus.Normal };
                    }
                }
            });
        }
示例#32
0
		private static SCRelationObject FindActualParent(SCRelationObject result, SCParentsRelationObjectCollection parents)
		{
			SCRelationObject toSchema = null, toUnit = null;
			foreach (SCRelationObject r in parents)
			{
				if (r.ParentSchemaType == AUCommon.SchemaAUSchema)
				{
					if (toSchema == null || r.Status == SchemaObjectStatus.Normal)
						toSchema = r;
				}
				else if (r.ParentSchemaType == AUCommon.SchemaAdminUnit)
				{
					if (toUnit == null || r.Status == SchemaObjectStatus.Normal)
						toUnit = r;
				}
			}

			if (toSchema == null && toUnit != null)
				result = toUnit;
			else if (toUnit == null && toSchema != null)
				result = toSchema;
			else if (toUnit == null && toSchema == null)
				result = null;
			else if (toUnit.Status == SchemaObjectStatus.Normal && toSchema.Status == SchemaObjectStatus.Normal)
				throw new AUObjectValidationException("管理单元存在错误的关系");
			else if (toUnit.Status == SchemaObjectStatus.Normal)
				result = toUnit;
			else
				result = toSchema;
			return result;
		}