Работа 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) 146 04.06.14 09:49 Сейчас в теме
(1) KroVladS, согласен в заголовке желтизна присутствует, прошу прощения. Просто хотелось привлечь внимание.
3. Борис (soap) 40 05.06.14 10:31 Сейчас в теме
Действительно как то не похоже, что без com-а
4. Brr (brr) 146 05.06.14 14:59 Сейчас в теме
(3) soap, com-объект по ADsPath не создается. см. obj = ПолучитьCOMОбъект(rs.Fields(0).Value); из первого примера
6. Brr (brr) 146 21.07.14 16:20 Сейчас в теме
Отправил новый заголовок на модерацию