| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Пытаюсь написать скрипт для создания пользователя в 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" | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Злыдни 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Мне кажется, нужно рыть в сторону авторизации. От какого имени Axapta пытается в вызове получить доступ к AD? Ошибка похожа на ту, которая вылазит в VBS, если у пользователя нет прав на создание пользователя в AD
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			С авторизацией все нормально. Не работает конкретно Put. Если сказать  
		
		
		
		
		
		
		
	user.samAccountName("test"); то работает. Правда криво  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Злыдни 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А через PutEx пробовали?
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			То же самое
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			а вот такой скрипт 
		
		
		
		
		
		
		
	X++:     ...
    COM user = ldap.Create("user", "cn=testUser");
;
    user.FullName("Тестовый");
    user.samAccountName("t");
    user.SetInfo(); | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Злыдни 
		
			
	 | 
	
	
	
		
		
		
		 
			
			На MSDN даны рекомендации после вызова put при работе через интерфейс ADSI в конце вызвать setinfo()
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			При вызове put вылетает исключение - так что до setInfo не доходит.  
		
		
		
		
		
		
		
	Если работать через свойство, то оно почему-то не присваивается причем для userPrincipalName тоже - для него в AD пусто, а для samAccountName генерится значение так, как будто оно не задано. setInfo вызывается и другие свойства сохраняются.  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Злыдни 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Стоп. А почему в коде: 
		
		
		
		
		
		
			Цитата: 
	
		
			COM user = ldap.Create("user", "OU=testUser");
		
	 
Может здесь собака порылась? 
				__________________ 
		
		
		
		
	люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да, причем даже шаманства с COMVariant вместо строк не помогают  
		
		
		
			![]() Цитата: 
	
 | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ошибка происходит по простой причине - Axapta передает строку в структуре VARIANT не как тип BSTR bstrVal, а как BSTR *pbstrVal. Т.е. как указатель на указатель. 
		
		
		
		
		
		
			Метод Put() не работает с такой ссылкой, по-этому и возвращает ошибку. Сейчас думаю, как это можно обойти 
				__________________ 
		
		
		
		
	Axapta v.3.0 sp5 kr2  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			По поводу 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  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			В результате я позорно сдался. Написал wsc-обертку, которая при радобе с обзектом сначала высаживается во пременный каталог, потом обертывает объект.
		 
		
		
		
			 | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Злыдни 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
![]() Могу предложить только такой способ: - объявить переменные NameArg и DataArg типа string; - инициализировать переменные значениями; - вызывать метод Put(NameArg, DataArg). 
				__________________ 
		
		
		
		
	люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.  | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Не поможет, к сожалению. 
		
		
		
		
		
		
			Внутри второй агрумент все равно будет преобразован к варианту с неправильным для функции типом 
				__________________ 
		
		
		
		
	Axapta v.3.0 sp5 kr2  | 
| 
	
 | 
| Теги | 
| ax3.0 | 
| 
	
	 | 
	
		
  |