コード例 #1
0
        protected override void SetPropertyValue(IOguObject srcOguObject, string srcPropertyName, DirectoryEntry entry, string targetPropertyName, string context, SetterContext setterContext)
        {
            string srcPropertyValue    = GetNormalizeddSourceValue(srcOguObject, srcPropertyName, context);
            string targetPropertyValue = GetNormalizeddTargetValue(entry, targetPropertyName, context);

            if (srcOguObject.FullPath == SynchronizeContext.Current.SourceRootPath)
            {
                srcPropertyValue = new PathPartEnumerator(SynchronizeContext.Current.TargetRootOU).Last();                 //极其特别,不一定可靠,权限中心应限制更改这一组织的名称和位置。
            }
            else
            {
                string relativePath = SynchronizeHelper.GetRelativePath(srcOguObject);
                if (relativePath.IndexOf('\\') < 0)
                {
                    srcPropertyValue = SynchronizeContext.Current.GetMappedName(srcPropertyValue);
                }
            }

            if (srcPropertyValue != targetPropertyValue && entry.IsBounded() == true)
            {
                TraceItHere(srcOguObject, srcPropertyName, entry, targetPropertyName, context, srcPropertyValue, targetPropertyValue);
                entry.CommitChanges();
                try
                {
                    entry.Rename(srcOguObject.ObjectType.SchemaTypeToPrefix() + "=" + ADHelper.EscapeString(srcPropertyValue));
                }
                catch (DirectoryServicesCOMException ex)
                {
                    if (ex.ErrorCode == -2147019886)
                    {
                        //对象已存在
                        entry.Rename(srcOguObject.ObjectType.SchemaTypeToPrefix() + "=TMP" + Environment.TickCount.ToString("X"));
                        SynchronizeContext.Current.DelayActions.Add(new DelayRenameAction(srcOguObject, entry.NativeGuid));
                    }
                    else
                    {
                        throw;
                    }
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// 将组织的路径转换为DN,注意路径必须以\作为分隔符,路径中的特殊字符会自动转义,遇到两个\\作为斜线处理。
        /// </summary>
        /// <param stringValue="val"></param>
        /// <returns></returns>
        public static string OUPathToDN(string path)
        {
            string[] parts = new PathPartEnumerator(path).ToArray();

            return(OUPathToDN(parts, parts.Length));
        }