gifts2017

Работа c AD. Получение данных запросом, с получением необходимых данных в запросе.

Опубликовал Brr (brr) в раздел Программирование - Практика программирования

Получать все нужные данные из AD запросом - просто.

На инфостарте полно примеров с получением данных из AD запросом. Например, получение почтового адреса пользователя:

query = "SEL ECT ADsPath FR OM 'LDAP://DC="+СокрЛП(Домен.Код)+"' WHERE SAMAccountName='"+Стр.Логин+"'";    
rs = conn.Execute(query);    
Пока НЕ rs.EOF() Цикл     
    obj = ПолучитьCOMОбъект(rs.Fields(0).Value);     
    Если obj.Class="user" Тогда      
	Стр.НоваяПочта=СокрЛП(obj.EmailAddress);      
	Если Стр.НоваяПочта<>Стр.СтараяПочта Тогда       
             Стр.Установить=Истина;      
	КонецЕсли;     
    КонецЕсли;     
    rs.MoveNext();    
КонецЦикла; 

Все данные можно получить запросом, однако мы получаем только ADsPath, потом получаем com-объект и уже из его свойств
достаем класс объекта и адрес электронной почты. Тут может быть засада с получением некоторых com-объектов, может
просто не хватить прав.
Я бы сделал так:

query = "SEL ECT objectClass,mail FR OM 'LDAP://DC="+СокрЛП(Домен.Код)+"' WHERE SAMAccountName='"+Стр.Логин+"'"; rs = conn.Execute(query); Пока НЕ rs.EOF() Цикл Если rs.Fields("objectClass").Value="user" Тогда Стр.НоваяПочта=СокрЛП(rs.Fields("mail").Value); Если Стр.НоваяПочта<>Стр.СтараяПочта Тогда Стр.Установить=Истина; КонецЕсли; КонецЕсли; rs.MoveNext(); КонецЦикла;

Не понятно почему, возможность получать поле по имени нигде в примерах я не встречал.

P.S.

Вопрос:

Можно-ли получить поле по номеру?

Ответ: Можно. Но если полей несколько, мы не сможем только по номеру поля сказать какие данные мы получили из поля.
Поскольку порядок полей, результата запроса, произвольный.

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Vladimir K (KroVladS) 04.06.14 09:21
(0)

Если я не ошибаюсь то переменная conn присваивается как раз COM соединением, выше по коду вы должны были написать
		conn = ПолучитьCOMОбъект("","ADODB.Connection");  
		conn.Provider = "ADSDSOObject";  
		conn.Open("Active Directory Provider"); 


Так где ж здесь "Получение данных запросом, без получения com-объекта."

З.Ы. Жёлты заголовок. надеялся увидеть способ работы с LDAP из под linux.
Akio; aexeel; +2 Ответить 1
2. Brr (brr) 04.06.14 09:49
(1) KroVladS, согласен в заголовке желтизна присутствует, прошу прощения. Просто хотелось привлечь внимание.
3. Борис (soap) 05.06.14 10:31
Действительно как то не похоже, что без com-а
4. Brr (brr) 05.06.14 14:59
(3) soap, com-объект по ADsPath не создается. см. obj = ПолучитьCOMОбъект(rs.Fields(0).Value); из первого примера
6. Brr (brr) 21.07.14 16:20
Отправил новый заголовок на модерацию