2011-02-03 1 views
0

У меня есть потребность заполнить combobox в InfoPath со всеми пользователями из нашей системы Active Directory. Мне также хотелось бы, чтобы этот комбинированный блок имел автозаполнение. Может ли кто-нибудь указать мне в правильном направлении, чтобы выполнить это? Все, что я нахожу в Интернете, похоже, загружает только зарегистрированного пользователя.InfoPath - заполнение комбинированного блока с пользователями AD из веб-службы

Заранее благодарен!

ответ

1

Если у вас есть сервер sharepoint в вашем домене, вы можете использовать управление селектором контактов, описанное here.

В противном случае вам будет необходимо создать код на C#. Basiclly у вас есть два варианта:

  1. Создайте пользовательский элемент управления на C# и используйте его в инфопате. Tutorial
  2. Создайте стандартную подсказку infopath и привяжите ее к динамически созданной коллекции в пользовательском коде C#.

Это необходимо для обоих вариантов: Extensive tutroial Как использовать класс из пространства имен DirectoryServices.

Основываясь на комментарии, я думаю, вы должны взглянуть на this post о добавлении нескольких элементов управления селектора контактов в одну форму инфопата, а также this thread.

+0

У нас есть сервер Sharepoint, и я сначала попробовал использовать Contact Selectors. Однако у меня возникла проблема, когда при загрузке нескольких элементов в повторяющемся разделе Contact Selector заполняет все элементы со значениями из первого элемента. Я проверю ваши ссылки. Спасибо –

+0

Я обновил сообщение в соответствии с комментарием. – baalazamon

+0

Спасибо, baalazamon. Я столкнулся с этой проблемой некоторое время назад, но с тех пор понял, что вам нужно назначить их для разных групп. Проблема, с которой я сталкиваюсь, немного отличается. Это только один селектор контактов в форме, но он находится внутри повторяющегося раздела, поэтому, когда я нажимаю кнопку «запускать запрос», все переключатели контактов загружаются с теми же значениями, что и первый элемент. –

1

У вас будет немного обучения здесь, я боюсь. Вам нужно будет написать запрос LDAP, чтобы получить эту информацию. LDAP - это немного сложная задача. Используя .NET, вы можете получить некоторую помощь из пространства имен System.DirectoryServices для получения справки. например .:

 var searcher = new DirectorySearcher("(objectCategory=user)"); 
     var results = searcher.FindAll(); 
     for (int i=0; i<results.Count; i++) 
     { 
      Console.WriteLine(results[i].GetDirectoryEntry().Name); 
     } 

Вы, вероятно, нужно уточнить фильтр, чтобы ограничить поиск в конкретной OU, чтобы избежать возврата учетных записей служб и тому подобное. Вы также захотите посмотреть на откат свойств для полного имени пользователя и т. Д.

Еще один способ, который может быть намного проще, если ваш домен имеет Exchange, вы можете использовать веб-службу Exchange для запроса глобального списка адресов?

+0

Спасибо. У нас есть сервер обмена в нашем домене.Как получить доступ к веб-сервису Exchange. Я использую URL-адрес веб-службы: http: //rginfonet/_vti_bin/userprofileservice.asmx? WSDL –