在CRM Dynamics 2011中查询Active Directory

Querying Active Directory in CRM Dynamics 2011

本文关键字:查询 Active Directory 2011 CRM Dynamics      更新时间:2023-09-26

我希望CRM查询活动目录并返回它找到的所有结果,比如"名字"。因此,例如:我在字段上键入"Tom",单击搜索按钮,它将返回的相关XML

Tom Smith、Tom Jones、Tom Tonks等

我读了很多遍,下面的代码使我能够搜索用户名,例如"Tom Jones"

var oCommand=new RemoteCommand("UserManager","RetrieveADUserProperties");   
if(oCommand!=null)   
{   
  oCommand.SetParameter("domainAccountName","Tom.Jones");   
  var oResult=oCommand.Execute();   
  if(oResult.Success&&!IsNull(oResult.ReturnValue)&&oResult.ReturnValue.length>0)   
  {   
    var firstName = "";   
    var lastName ="";     
    for(
      var oUserXmlDoc=loadXmlDocument(oResult.ReturnValue),
      oNodeList=oUserXmlDoc.documentElement.childNodes,i=0;
      i<oNodeList.length;
      i++      
    )  
    {  
      var oNode=oNodeList.item(i);  
      if (oNode.tagName == "firstname")  
      {  
        firstName = oNode.text;  
      } else if(oNode.tagName == "lastname") {  
        lastName = oNode.text;  
      }  
    }  
  }  
}          

(来源:Technocratica)

但只有在输入了正确的用户名的情况下,它才会返回结果。

实际上,我需要查询以下内容:

  oCommand.SetParameter("domainAccountFirstName","Tom.Jones");

但我不知道CRM/AD在这方面正在寻找什么。有人知道除了"domainAccountName"之外还有其他搜索词吗?

我们也有类似的需求,但我们的用户数量也非常多。我们的方法包括通过在CRM中创建一个自定义的"域联系人"实体并每晚更新实体来利用CRM。这允许我们的最终用户使用CRM中已有的快速查找、视图和其他工具。最棒的是,最终用户可以在搜索中使用通配符。

为了便于实现这一点,我们最终编写了一个单独的应用程序,该应用程序每晚查询一次AD并填充SQL数据库。然后,我们使用从重复出现的工作流中调用的自定义工作流步骤来查询数据库并根据需要更新CRM。

虽然我们的目标是防止针对AD的大型查询对我们的环境产生不利影响,但我们最终为最终用户提供了一些只需少量代码即可维护的优秀工具。

经过调查,SetParameter方法只能将有限数量的参数作为其第一个参数;这些参数都不允许开发人员只搜索名字或姓氏。

因此,最简单的选择(至少在我的情况下)是编写一个iframe插件,该插件运行对AD的LDAP请求。请记住,针对XSS等的常见域规则适用于此实例。任何对C#相对陌生的人都会在这里找到编写有用解决方案的全面帮助:

http://msdn.microsoft.com/en-us/library/System.DirectoryServices.aspx