1

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

汤姆·史密斯、汤姆·琼斯、汤姆·唐克斯等。

我已经阅读过,下面的代码使我能够搜索用户名,例如“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”以外的搜索词?

4

2 回答 2

1

我们有类似的需求,但我们也有非常多的用户。我们的方法涉及通过在 CRM 中创建自定义“域联系人”实体并每晚更新实体来利用 CRM。这使我们的最终用户能够使用 CRM 中已有的快速查找、视图和其他工具。最重要的是,最终用户可以在搜索中使用通配符。

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

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

于 2014-02-12T18:26:21.857 回答
0

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

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

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

于 2013-09-10T09:57:27.560 回答