|  | 
|  04.06.2007, 17:33 | #1 | 
| Участник |  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" | 
|  | 
|  04.06.2007, 17:54 | #2 | 
| Злыдни | 
			
			Мне кажется, нужно рыть в сторону авторизации. От какого имени Axapta пытается в вызове получить доступ к AD? Ошибка похожа на ту, которая вылазит в VBS, если у пользователя нет прав на создание пользователя в AD
		 
				__________________ люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. | 
|  | 
|  04.06.2007, 18:04 | #3 | 
| Участник | 
			
			С авторизацией все нормально. Не работает конкретно Put. Если сказать  user.samAccountName("test"); то работает. Правда криво | 
|  | 
|  04.06.2007, 18:37 | #4 | 
| Злыдни | 
			
			А через PutEx пробовали?
		 
				__________________ люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. | 
|  | 
|  05.06.2007, 09:04 | #5 | 
| Участник | 
			
			То же самое
		 | 
|  | 
|  05.06.2007, 09:17 | #6 | 
| Участник | 
			
			а вот такой скрипт X++:     ...
    COM user = ldap.Create("user", "cn=testUser");
;
    user.FullName("Тестовый");
    user.samAccountName("t");
    user.SetInfo(); | 
|  | 
|  05.06.2007, 11:18 | #7 | 
| Злыдни | 
			
			На MSDN даны рекомендации после вызова put при работе через интерфейс ADSI в конце вызвать setinfo()
		 
				__________________ люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. | 
|  | 
|  05.06.2007, 11:23 | #8 | 
| Участник | 
			
			При вызове put вылетает исключение - так что до setInfo не доходит.  Если работать через свойство, то оно почему-то не присваивается причем для userPrincipalName тоже - для него в AD пусто, а для samAccountName генерится значение так, как будто оно не задано. setInfo вызывается и другие свойства сохраняются. | 
|  | 
|  06.06.2007, 11:53 | #9 | 
| Участник | 
			
			Да, причем даже шаманства с COMVariant вместо строк не помогают   Цитата: | 
|  | 
|  05.06.2007, 12:26 | #10 | 
| Злыдни | 
			
			Стоп. А почему в коде: Цитата: 
		
			COM user = ldap.Create("user", "OU=testUser");
		
	 Может здесь собака порылась? 
				__________________ люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. | 
|  | 
|  06.06.2007, 12:06 | #11 | 
| Участник | 
			
			Ошибка происходит по простой причине - Axapta передает строку в структуре VARIANT не как тип BSTR bstrVal, а как BSTR *pbstrVal. Т.е. как указатель на указатель. Метод Put() не работает с такой ссылкой, по-этому и возвращает ошибку. Сейчас думаю, как это можно обойти 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  06.06.2007, 13:38 | #12 | 
| Злыдни | Цитата:  Могу предложить только такой способ: - объявить переменные NameArg и DataArg типа string; - инициализировать переменные значениями; - вызывать метод Put(NameArg, DataArg). 
				__________________ люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. | 
|  | 
|  06.06.2007, 12:09 | #13 | 
| Участник | 
			
			По поводу SetInfo() Цитата: 
		
			The IADs::SetInfo method saves the cached property values of the ADSI object to the underlying directory store
		
	   
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  06.06.2007, 12:33 | #14 | 
| Участник | 
			
			В результате я позорно сдался. Написал wsc-обертку, которая при радобе с обзектом сначала высаживается во пременный каталог, потом обертывает объект.
		 | 
|  | 
|  06.06.2007, 13:44 | #15 | 
| Участник | 
			
			Не поможет, к сожалению. Внутри второй агрумент все равно будет преобразован к варианту с неправильным для функции типом 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
| Теги | 
| ax3.0 | 
|  | 
| 
 |