AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.06.2007, 17:33   #1  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
? Ax3 KR2: Создание пользователя в ActiveDirectory
Пытаюсь написать скрипт для создания пользователя в AD по справочнику сотрудников. Пример:
X++:
static void Test_CreateADUser(Args _args)
{
    COM ldap = COM::getObjectEx("LDAP://OU=...,dc=...,DC=RU");
    COM user = ldap.Create("user", "OU=testUser");
;
    user.Put("samAccountName",  "test");
}
Результат:

Метод 'Put' в COM-объекте класса '<неизвестно>' возвратил код ошибки 0x80004005 (E_FAIL), который означает: Общий сбой.



Однако следующий код на VBS работает:
Код:
set ldap = GetObject("LDAP://OU=...,dc=...,DC=RU")
set user = ldap.Create("user", "OU=testUser")
user.Put "samAccountName",  "test"
Пробовал через COMDispFunction - результат тот же
Старый 04.06.2007, 17:54   #2  
KiselevSA is offline
KiselevSA
Злыдни
Аватар для KiselevSA
Злыдни
Лучший по профессии 2015
 
958 / 333 (13) ++++++
Регистрация: 25.01.2002
Адрес: Москва
Мне кажется, нужно рыть в сторону авторизации. От какого имени Axapta пытается в вызове получить доступ к AD? Ошибка похожа на ту, которая вылазит в VBS, если у пользователя нет прав на создание пользователя в AD
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.
Старый 04.06.2007, 18:04   #3  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
С авторизацией все нормально. Не работает конкретно Put. Если сказать

user.samAccountName("test");

то работает. Правда криво
Старый 04.06.2007, 18:37   #4  
KiselevSA is offline
KiselevSA
Злыдни
Аватар для KiselevSA
Злыдни
Лучший по профессии 2015
 
958 / 333 (13) ++++++
Регистрация: 25.01.2002
Адрес: Москва
А через PutEx пробовали?
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.
Старый 05.06.2007, 09:04   #5  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
То же самое
Старый 05.06.2007, 09:17   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
а вот такой скрипт
X++:
    ...
    COM user = ldap.Create("user", "cn=testUser");
;
    user.FullName("Тестовый");
    user.samAccountName("t");
    user.SetInfo();
Приводит к тому что user logon name становится $MCE000-I3MUE14K6JBJ при этом аналогичный скрипт на js генерирует нормальный логон найм.
Старый 05.06.2007, 11:18   #7  
KiselevSA is offline
KiselevSA
Злыдни
Аватар для KiselevSA
Злыдни
Лучший по профессии 2015
 
958 / 333 (13) ++++++
Регистрация: 25.01.2002
Адрес: Москва
На MSDN даны рекомендации после вызова put при работе через интерфейс ADSI в конце вызвать setinfo()
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.
Старый 05.06.2007, 11:23   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
При вызове put вылетает исключение - так что до setInfo не доходит.

Если работать через свойство, то оно почему-то не присваивается причем для userPrincipalName тоже - для него в AD пусто, а для samAccountName генерится значение так, как будто оно не задано. setInfo вызывается и другие свойства сохраняются.
Старый 05.06.2007, 12:26   #9  
KiselevSA is offline
KiselevSA
Злыдни
Аватар для KiselevSA
Злыдни
Лучший по профессии 2015
 
958 / 333 (13) ++++++
Регистрация: 25.01.2002
Адрес: Москва
Стоп. А почему в коде:
Цитата:
COM user = ldap.Create("user", "OU=testUser");
User же должен быть через CN=?
Может здесь собака порылась?
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.
Старый 06.06.2007, 11:53   #10  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от belugin Посмотреть сообщение
При вызове put вылетает исключение - так что до setInfo не доходит.
Да, причем даже шаманства с COMVariant вместо строк не помогают
Цитата:
Сообщение от belugin Посмотреть сообщение
Если работать через свойство, то оно почему-то не присваивается причем для userPrincipalName тоже - для него в AD пусто, а для samAccountName генерится значение так, как будто оно не задано. setInfo вызывается и другие свойства сохраняются.
setInfo вызывается, но никакие свойства не сохраняются - у меня, во всяком случае. Потому они и заполняются на сервере левыми значениями. То, что свойства не заполняются, хорошо видно в сетевом трафика при отправке LDAP-запроса на добавление пользователя в момент вызова user.setInfo(): там передаются только displayName и objectClass - и то оба свойства заполняются, видимо, при вызове ldap.Create().
Цитата:
Сообщение от KiselevSA Посмотреть сообщение
На MSDN даны рекомендации после вызова put при работе через интерфейс ADSI в конце вызвать setinfo()
Объясняется это, если верить network monitor, тем, что до вызова setInfo() информация об изменениях никуда с локальной машины не уходит.
Миниатюры
Нажмите на изображение для увеличения
Название: ax3-ldap-traffic.png
Просмотров: 252
Размер:	103.1 Кб
ID:	2686  
Старый 06.06.2007, 12:06   #11  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Ошибка происходит по простой причине - Axapta передает строку в структуре VARIANT не как тип BSTR bstrVal, а как BSTR *pbstrVal. Т.е. как указатель на указатель.
Метод Put() не работает с такой ссылкой, по-этому и возвращает ошибку. Сейчас думаю, как это можно обойти
__________________
Axapta v.3.0 sp5 kr2
Старый 06.06.2007, 12:09   #12  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
По поводу SetInfo()
Цитата:
The IADs::SetInfo method saves the cached property values of the ADSI object to the underlying directory store
Фактически, это Flush
__________________
Axapta v.3.0 sp5 kr2
Старый 06.06.2007, 12:33   #13  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
В результате я позорно сдался. Написал wsc-обертку, которая при радобе с обзектом сначала высаживается во пременный каталог, потом обертывает объект.
Вложения
Тип файла: zip SYS_ADSIHelper.zip (1.3 Кб, 65 просмотров)
Старый 06.06.2007, 13:38   #14  
KiselevSA is offline
KiselevSA
Злыдни
Аватар для KiselevSA
Злыдни
Лучший по профессии 2015
 
958 / 333 (13) ++++++
Регистрация: 25.01.2002
Адрес: Москва
Цитата:
Сообщение от AndyD Посмотреть сообщение
Ошибка происходит по простой причине - Axapta передает строку в структуре VARIANT не как тип BSTR bstrVal, а как BSTR *pbstrVal. Т.е. как указатель на указатель.
Метод Put() не работает с такой ссылкой, по-этому и возвращает ошибку. Сейчас думаю, как это можно обойти
Увы, программер из меня никакой
Могу предложить только такой способ:
- объявить переменные NameArg и DataArg типа string;
- инициализировать переменные значениями;
- вызывать метод Put(NameArg, DataArg).
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.
Старый 06.06.2007, 13:44   #15  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Не поможет, к сожалению.
Внутри второй агрумент все равно будет преобразован к варианту с неправильным для функции типом
__________________
Axapta v.3.0 sp5 kr2
Теги
ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
После установки KR2 на AX3 SP3 не пускает на AOS больше 100 пользователей Alexandr A. Osipkin DAX: Администрирование 14 06.12.2008 02:33
Upgrade с AX 3.0 SP2 до AX 3.0 SP5 KR2 vallys DAX: Администрирование 14 04.08.2008 11:31
Ax3 KR2 COM: Получение человеческих сообщений об ошибках belugin DAX: Программирование 9 18.04.2008 11:51
Создание новой записи + Фильтр (3.0 SP5 KR2 SQL) polygris DAX: Программирование 7 03.01.2008 16:17
Куда пропадают лицензии в Ax3.0 SP3 KR2? falcon65 DAX: Администрирование 2 10.05.2007 09:55

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:00.