2013-09-03 2 views
1

Я хотел бы, чтобы CRM запрашивал активный каталог и возвращал все найденные им результаты, скажем, «имя». так, например: я типа в 'Томь' на поле, нажмите кнопку поиска, и возвращает соответствующий XML для:Запрос Active Directory в CRM Dynamics 2011

Tom.Smith, Tom.Jones, Tom.Tonks и т.д.

I «Мы читаем, и следующий код позволяет мне искать по имени пользователя, например '' 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/АД/ищут на этом фронте. Кто-нибудь знает, существуют ли поисковые термины, отличные от «domainAccountName»?

ответ

0

При исследовании метод SetParameter может принимать только ограниченное число аргументов в качестве своего первого параметра; и ни один из этих аргументов не позволяет разработчику искать только первое или последнее имя.

Самый простой вариант (по крайней мере, в моей ситуации) заключался в том, чтобы написать плагин iframe, который запускает запрос LDAP для AD. Имейте в виду, что в этом случае применяются обычные правила домена в отношении XSS и т. Д. Любой относительно новым для C# будет найти всестороннюю помощь в написании полезное решение здесь:

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

1

У нас была подобная необходимость, однако мы также имели чрезвычайно большое количество пользователей. Наш подход включал в себя использование CRM путем создания пользовательского объекта «контакт домена» в CRM и обновления объектов в ночное время. Это позволило нашим конечным пользователям использовать Quick Find, Views и другие инструменты уже в CRM. Лучший из всех, конечный пользователь может использовать wild cards в своих поисках.

Для облегчения этого мы создали отдельное приложение, которое запрашивает AD однажды ночью и заполняет базу данных SQL. Затем мы используем настраиваемый шаг рабочего процесса, вызванный из повторяющегося рабочего процесса, для запроса базы данных и обновления CRM по мере необходимости.

Хотя цель заключалась в том, чтобы держать большие запросы против AD от негативного воздействия на нашу среду, мы в конечном итоге предоставили нашим конечным пользователям отличные инструменты с небольшим количеством кода для поддержки.

+0

В конце я написал сайт, основанный на Iframe, который выдал себя за администратора и запросил AD. Это было полезно в моем случае, так как это позволило мне запросить статус Lync против статуса запроса AD с помощью объекта ActiveX на стороне клиента. –

Смежные вопросы