コード例 #1
0
        private void ProcessOrganization(IOrganization organization, ADObjectWrapper adObject)
        {
            SynchronizeContext.Current.ExtendLockTime();
            IList <IOrganization> allOrganizationChildren = GetObjectDetailInfo <IOrganization>(organization.Children);

            SynchronizeContext.Current.ExtendLockTime();
            IList <IUser> allUserChildren = GetUserDetailInfo(organization.Children);

            SynchronizeContext.Current.ExtendLockTime();
            IList <IGroup> allGroupChildren = GetObjectDetailInfo <IGroup>(organization.Children);

            //如果AD中有对应的组织
            if (adObject != null)
            {
                //在AD中找对应的子对象
                List <ADObjectWrapper> allADChildren = SynchronizeHelper.SearchChildren(adObject);

                Trace.WriteLine("检查AD中的子项,共" + allADChildren.Count + "项");

                foreach (ADObjectWrapper child in allADChildren)
                {
                    SynchronizeContext.Current.ExtendLockTime();

                    if (child.Properties.Contains("displayNamePrintable"))
                    {
                        //肯定是群组了
                        if (SynchronizeHelper.PermissionCenterInvolved.Equals(child.Properties["displayNamePrintable"]))
                        {
                            IOguObject subObj = OguObjectFinder.Find(child, organization.Children);

                            if (subObj == null)
                            {
                                //在权限中心的组织下没有找到则删除项
                                SynchronizeContext.Current.PrepareAndAddDeletedItem(subObj, child, ObjectModifyType.Delete);

                                Trace.WriteLineIf(subObj == null, "无对应AD对象 " + child.DN + "的OGU对象,加入删除列表");
                            }
                        }
                    }
                    else
                    {
                        IOguObject subObj = OguObjectFinder.Find(child, organization.Children);

                        if (subObj == null)
                        {
                            //在权限中心的组织下没有找到则删除项
                            SynchronizeContext.Current.PrepareAndAddDeletedItem(subObj, child, ObjectModifyType.Delete);

                            Trace.WriteLineIf(subObj == null, "无对应AD对象 " + child.DN + "的OGU对象,加入删除列表");
                        }
                    }
                }
            }

            allUserChildren.ForEach(child => RecursiveProcess(child));
            allGroupChildren.ForEach(child => RecursiveProcess(child));
            allOrganizationChildren.ForEach(child => RecursiveProcess(child));
        }