[英]Querying Active Directory in CRM Dynamics 2011
我希望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”以外的搜索词吗?
我们有类似的需求,但是我们也有非常多的用户。 我们的方法涉及通过在CRM中创建自定义“域联系人”实体并每晚更新实体来利用CRM。 这使我们的最终用户可以使用CRM中已经存在的快速查找,视图和其他工具。 最重要的是,最终用户可以在搜索中使用通配符。
为此,我们最终编写了一个单独的应用程序,该应用程序每晚查询一次AD,并填充一个SQL数据库。 然后,我们使用一个自定义工作流步骤(从重复发生的工作流中调用)来查询数据库并根据需要更新CRM。
虽然目标是防止针对AD的大型查询对我们的环境造成不利影响,但最终我们为最终用户提供了一些很好的工具,仅需维护少量的代码。
经调查,SetParameter方法只能将有限数量的参数用作其第一个参数; 这些参数都不能使开发人员仅搜索名字或姓氏。
因此,最简单的选择(至少就我而言)是编写一个向AD运行LDAP请求的iframe插件。 请记住,针对XSS等的常规域规则在这种情况下适用。 对C#较新的任何人都可以在这里编写有用的解决方案方面获得全面的帮助:
http://msdn.microsoft.com/en-us/library/System.DirectoryServices.aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.