在Microsoft Metadirectory Services中保存属性值时出现InvalidOperationException

时间:2018-11-26 16:11:41

标签: c#

我正在为Microsoft Identity Manager(FIM / MIM)编写规则扩展,但是有问题。我想要的是:我从csentry["Manager"].Value中获得了用于搜索Active Directory的值。当我找到所需的对象时,将获得其DistinguishedName并将其保存到metaverse属性管理器中。像这样:mventry["Manager"].Value = MDN "Manager"不幸的是,它失败并显示以下错误:

  

System.InvalidOperationException:无法访问属性管理器。   MV对象上无法访问参考值。在   Microsoft.MetadirectoryServices.Impl.AttributeImpl.SetSingleValuedAttributeValue(对象   价值)   Mms_ManagementAgent_HRMAExtension.MAExtensionObject.Microsoft.MetadirectoryServices.IMASynchronization.MapAttributesForImport(String   FlowRuleName,CSEntry csentry,MVEntry mventry)   C:\ Users \ MIMS-Admin \ Documents \ HRMAExtension \ HRMAExtension.cs:第162行

这是第162行:

mventry["Manager"].Value = MDN;

如何在metaverse中设置Manager属性的参考值?

这是我正在使用的代码:

case "LookUpDN":
    var MDN = string.Empty;
    if (mventry["Manager"].IsPresent)
    {
        // Do nothing ManagerDN distinguished name  is present
    }
    else
    {
        if (csentry["Manager"].Value !="0")
        {
            String[] DomainArray = new string[] { "D1", "D2", "D3", "D4" };
            foreach (string Domain in DomainArray)
            {                
                DirectoryEntry dir = new DirectoryEntry("LDAP://DC="+Domain+",DC=COM");
                DirectorySearcher search = new DirectorySearcher(dir);
                search.Filter = "(&(objectClass=user)(EmployeeID=" + csentry["Manager"] + "))";
                SearchResult searchresult = search.FindOne();
                if (searchresult !=null)
                {
                    MDN = searchresult.GetDirectoryEntry().Properties["distinguishedName"].Value.ToString(); 
                }
            }
        }
        mventry["Manager"].Value = MDN;
    }
    break;

1 个答案:

答案 0 :(得分:0)

问题是DN(DistinguisedName)被用作参考,无法更改。可以将其视为数据库中的主键/外键。 Metaverse中的Manager字段被指定为“参考”字段之一,您不能像这样修改它。

此处提供了一些解决方案:https://identityunderground.wordpress.com/2010/02/25/ilm-quick-solution-getting-attribute-data-from-a-referenced-object/