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

Получать все нужные данные из 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.

Вопрос:

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

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

5 Comments

  1. KroVladS

    (0)

    Если я не ошибаюсь то переменная conn присваивается как раз COM соединением, выше по коду вы должны были написать

      conn = ПолучитьCOMОбъект(«»,»ADODB.Connection»);
    conn.Provider = «ADSDSOObject»;
    conn.Open(«Active Directory Provider»); 

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

    З.Ы. Жёлты заголовок. надеялся увидеть способ работы с LDAP из под linux.

    Reply
  2. brr

    (1) KroVladS, согласен в заголовке желтизна присутствует, прошу прощения. Просто хотелось привлечь внимание.

    Reply
  3. soap

    Действительно как то не похоже, что без com-а

    Reply
  4. brr

    (3) soap, com-объект по ADsPath не создается. см. obj = ПолучитьCOMОбъект(rs.Fields(0).Value); из первого примера

    Reply
  5. brr

    Отправил новый заголовок на модерацию

    Reply

Leave a Comment

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