|
|
|
Текущий объект Recordset не поддерживает обновление. Отправка через com в AD | ☑ | ||
|---|---|---|---|---|
|
0
Lazzz
17.10.24
✎
07:50
|
Необходимо в AD заполнять номера телефонов. Тестирую на одном пользователе. Вылетает ошибка:
Произошла исключительная ситуация (ADODB.Field): Текущий объект Recordset не поддерживает обновление. Это связано с ограничением поставщика или с выбранным типом блокировки. Подскажите что не так? Ошибка возникает в моменте: ВыборкаАДО.Fields("telephoneNumber").Value = "12345";
КомандаАДО = Новый COMОбъект("ADODB.Command");
СоединениеАДО = Новый COMОбъект("ADODB.Connection");
СоединениеАДО.Provider = "ADSDSOObject";
Попытка
СоединениеАДО.Open("Active Directory Provider");
Исключение
Сообщить("Ошибка при открытии Active Directory Provider: " + ОписаниеОшибки());
Возврат "не удалось получить пользователя домена";
КонецПопытки;
КомандаАДО.ActiveConnection = СоединениеАДО;
Попытка
RootDSE = ПолучитьCOMОбъект("LDAP://RootDSE");
Исключение
Сообщить("Ошибка ПолучитьCOMОбъект(LDAP://RootDSE): " + ОписаниеОшибки());
Возврат "не удалось получить пользователя домена";
КонецПопытки;
ТекущийДомен = RootDSE.Get("defaultNamingContext");
Сообщить("ТекущийДомен: " + ТекущийДомен);
Попытка
ОбъектТекущегоДомена = ПолучитьCOMОбъект("LDAP://" + ТекущийДомен);
Исключение
Сообщить("Ошибка ПолучитьCOMОбъект "+"LDAP://" + ТекущийДомен+": " + ОписаниеОшибки());
Возврат "не удалось получить пользователя домена";
КонецПопытки;
ДоменноеИмя = "UserTest";
//Фильтр = "(&(objectCategory=person)(objectClass=user))";
КомандаАДО.CommandText = "SELECT ADsPath,userAccountControl,displayName,sAMAccountName,Mail,givenName,sn,telephoneNumber FROM 'LDAP://"+"Syn.local"+"' WHERE objectClass='"+"user"+"'"+" and sAMAccountName='"+ДоменноеИмя+"'";
КомандаАДО.Properties("Page Size").Value = 100;
КомандаАДО.Properties("Timeout").Value = 30;
КомандаАДО.Properties("Cache Results").Value = Ложь;
Попытка
ВыборкаАДО = КомандаАДО.Execute();
Исключение
Сообщить("Ошибка Execute(): " + ОписаниеОшибки());
Возврат "не удалось получить пользователя домена";
КонецПопытки;
Пока НЕ ВыборкаАДО.EOF Цикл
Если ВыборкаАДО.Fields("userAccountControl").Value = 514 ИЛИ
ВыборкаАДО.Fields("userAccountControl").Value = 546 ИЛИ
ВыборкаАДО.Fields("userAccountControl").Value = 66050 Тогда
Иначе
Если НЕ ЗначениеЗаполнено(СокрЛП(ВыборкаАДО.Fields("telephoneNumber").Value)) Тогда
ВыборкаАДО.Fields("telephoneNumber").Value = "12345";
КонецЕсли;
КонецЕсли;
ВыборкаАДО.MoveNext();
КонецЦикла;
ВыборкаАДО.Close();
СоединениеАДО.Close(); |
|||
|
1
Волшебник
17.10.24
✎
07:49
|
КомандаАДО = "UPDATE ..."
|
|||
|
2
osa1C
17.10.24
✎
09:08
|
(1) Станислав, как можно форматировать программный код как в (0)? Для меня есть такая возможность, или это только для модераторов?
|
|||
|
3
Мультук
17.10.24
✎
09:13
|
(2)
см рис
|
|||
|
4
Волшебник
17.10.24
✎
09:36
|
(2) тег PRE
|
|||
|
5
osa1C
17.10.24
✎
09:47
|
(3) (4) благодарю
|
|||
|
6
Lazzz
17.10.24
✎
09:53
|
(1) Не очень понял как это использовать. Это свойство CommandText Должно быть = "Update ..." или что то другое?
|
|||
|
7
Волшебник
17.10.24
✎
10:00
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |