Простая процедура выгрузки пользователей из АД.

Простая процедура выгрузки данных из Active Directory для встраивания в Ваши решения.
Понадобилась выгрузка данных из АД для интеграции справочника пользователей с порталом.

Перебрал несколько публикаций —  не запускалось сразу , приходилось допиливать, неудобное  представление результата, избыточный код и т.п.

Самым удобный вариант нашел тут:
//http://forum.codeby.net/topic35362.html
Большое спасибо автору.

Переписал для себя.
Данные выводятся в таблицу, для добавления одного реквизита достаточно добавить одну строку (там где формируется список реквизитов).
Список доступных полей взял тут:
http://www.forum.mista.ru/topic.php?id=683770

Вот что получилось:

///////////////////////////////////////////////////
Процедура ADНажатие(Элемент)
//Алгоритм от Darlock

//

http://forum.codeby.net/user14592.html

//

http://forum.codeby.net/topic35362.html

    // необходимые реквизиты добавлять в этот список:

СписокРеквизитов=Новый СписокЗначений;

СписокРеквизитов.Добавить("DisplayName");//Имя пользователя

СписокРеквизитов.Добавить("Mail");      //Эл.почта

СписокРеквизитов.Добавить("sAMAccountName");    //Логин (Имя пользователя в домене)

СписокРеквизитов.Добавить("TelephoneNumber");    // Телефон
ТЗ=Новый ТаблицаЗначений;

СтрСписок="";

Для Каждого Рекв Из СписокРеквизитов Цикл

ТЗ.Колонки.Добавить(Рекв);

СтрСписок=СтрСписок+","+Рекв;

КонецЦикла;

СтрСписок=Сред(СтрСписок,2);

КомандаАДО = Новый COMОбъект("ADODB.Command");

СоединениеАДО = Новый COMОбъект("ADODB.Connection");

СоединениеАДО.Provider = "ADsDSOObject";

СоединениеАДО.Open("Active Directory Provider");

КомандаАДО.ActiveConnection = СоединениеАДО;                          

Попытка

RootDSE = ПолучитьCOMОбъект("LDAP://RootDSE");                                   

НашДомен = RootDSE.Get("defaultNamingContext");

База = "<LDAP://" + НашДомен + ">";                                 

Исключение 

Сообщить("Не удалось подключиться к домену "); 

КонецПопытки;

Фильтр = "(&(objectCategory=person)(objectClass=user)"+")";

ТекстЗапроса = База + ";" + Фильтр + ";" + СтрСписок + ";subtree";

КомандаАДО.CommandText = ТекстЗапроса;

КомандаАДО.Properties("Page Size").Value = 100;

КомандаАДО.Properties("Timeout").Value = 30;

КомандаАДО.Properties("Cache Results").Value = Ложь;

ВыборкаАДО = КомандаАДО.Execute();

Пока НЕ ВыборкаАДО.EOF Цикл

DisplayName= СокрЛП(Строка(ВыборкаАДО.Fields("DisplayName").Value));

Если Не ПустаяСтрока(DisplayName) Тогда

СтрТЗ=ТЗ.Добавить();

Для Каждого Рекв Из СписокРеквизитов Цикл

СтрТЗ[Рекв.Значение]=СокрЛП(Строка(ВыборкаАДО.Fields(Рекв.Значение).Value))

КонецЦикла;

КонецЕсли;

ВыборкаАДО.MoveNext();

КонецЦикла;
ВыборкаАДО.Close();

СоединениеАДО.Close();

Сообщить("Количество записей АД: "+Формат(ТЗ.Количество()));

ТЗ.Сортировать("DisplayName");

ТЗ.ВыбратьСтроку();
КонецПроцедуры

 

///////////////////////////////////////////////////////////////////////////////////////////////////

3 Comments

  1. Патриот

    Получил заряд хорошего настроения на весь рабочий день))))

    Немножко неправильно прочитал название статьи «Простая процедура выгрузки пользователей в АД.»

    Reply
  2. Dr.Morris

    затыкается на

    ВыборкаАДО = КомандаАДО.Execute();

    по причине:

    Ошибка при вызове метода контекста (Execute)

    Произошла исключительная ситуация (Provider): Не был задан текст команды для объекта команды.

    Пока не знаю, в чем дело..

    Reply
  3. rinik88

    спасибо)

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *