我希望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”以外的搜索字词?
答案 0 :(得分:1)
我们有类似的需求,但我们也有非常多的用户。我们的方法涉及通过在CRM中创建自定义“域联系人”实体并在夜间更新实体来利用CRM。这使我们的最终用户可以使用CRM中已有的快速查找,视图和其他工具。最重要的是,最终用户可以在搜索中使用通配符。
为了促进这一点,我们最终编写了一个单独的应用程序,每晚查询一次AD并填充SQL数据库。然后,我们使用从重复发生的工作流调用的自定义工作流步骤来查询数据库并根据需要更新CRM。
虽然目标是让针对AD的大量查询不会对我们的环境产生负面影响,但我们最终为最终用户提供了一些很好的工具,只需要维护少量代码。
答案 1 :(得分:0)
经过调查,SetParameter方法只能将有限数量的参数作为其第一个参数;并且这些参数都不允许开发人员仅搜索名字或姓氏。
最简单的选择(至少在我的情况下)是编写一个运行LDAP请求到AD的iframe插件。请记住,在这种情况下,适用于XSS等的通常域规则适用。任何对C#相对较新的人都会在这里找到有用的解决方案的全面帮助:
http://msdn.microsoft.com/en-us/library/System.DirectoryServices.aspx