01.08.2013, 08:37 | #1 |
Участник
|
Автоматическое создание пользователей
Доброго дня, коллеги. Создал джобик, который заводит аккаунты для пользователей, которые являются разработчиками и должны быть в системе, скажем после обновления базы. Записи создаются, но если зайти в AX, говорит, что You are not recognized user.
Чего не хватает, чтобы сделать код полноценным. P.S. Система AX 4.0 X++: public static void AutoAddUsers(Args _args) { #Admin void addUserInfo(UserId _userId, NetworkAlias _alias, NetworkDomain _domain, Name _name, int _noOfSessions = 5) { UserGroupList ugList; UserInfo uInfo, adminRecord; ; select firstonly adminRecord where adminRecord.Id == #AdminUser; ttsbegin; uInfo.clear(); uInfo.initValue(); uInfo.Id = _userId; uInfo.NetworkAlias = _alias; uInfo.NetworkDomain = _domain; uInfo.Company = curext(); uInfo.Enable = NoYes::Yes; uInfo.Name = _name; uInfo.Language = adminRecord.Language; uInfo.HelpLanguage = adminRecord.Helplanguage; if (uInfo.validateWrite()) uInfo.write(); ugList.clear(); ugList.initValue(); ugList.UserId = _userId; ugList.GroupId = #AdminUserGroup; if (ugList.validateWrite()) ugList.write(); ttscommit; } ; addUserInfo("user", "alias", "domain.com", "Last, First"); info('Done'); }
__________________
// no comments |
|
01.08.2013, 08:47 | #2 |
Участник
|
Не вижу поля sid. Такая ошибка появляется если это поле не заполнено или заполнено неверно.
PS : Извиняюсь, не обратил. внимание на версию. Не знаю есть ли это поле в 4.0. В AX2009 одна из причин такой ошибки именно в этом 100%.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. Последний раз редактировалось Pustik; 01.08.2013 в 09:08. |
|
|
За это сообщение автора поблагодарили: dech (1). |
01.08.2013, 08:48 | #3 |
Участник
|
Есть же еще SysUserInfo !
посмотрите X++: SysCheckList::createAdminUser(); SysCheckList::createAdministratorGroup(); |
|
|
За это сообщение автора поблагодарили: Pustik (2), dech (1). |
01.08.2013, 09:10 | #4 |
Участник
|
Посмотрите код отрабатывающий на установку галочки активности пользователя...
В AX2009 все прописано в validateWrite... датасоурса Последний раз редактировалось ansoft; 01.08.2013 в 09:13. |
|
|
За это сообщение автора поблагодарили: Pustik (2). |
01.08.2013, 09:19 | #5 |
----------------
|
заведите группу в AD и импортируйте за 1 раз сразу всех.
|
|
01.08.2013, 09:22 | #6 |
----------------
|
если и писать такой джоб, то на sql
|
|
01.08.2013, 12:37 | #7 |
Участник
|
Все получилось, добавил запись в SysUserInfo, а также заполнил поле Sid. Без этого действительно никак. Полностью джоб выглядит следующим образом:
X++: public static void AutoAddUsers(Args _args) { #Admin void addUserInfo(UserId _userId, NetworkAlias _alias, NetworkDomain _domain, Name _name) { UserGroupList ugList; UserInfo uInfo, adminRecord; SysUserInfo suInfo; xAxaptaUserManager mgr; xAxaptaUserDetails det; ; select firstonly adminRecord where adminRecord.Id == #AdminUser; ttsbegin; mgr = new xAxaptaUserManager(); det = mgr.getDomainUser(_domain, _alias); uInfo.clear(); uInfo.initValue(); uInfo.Id = _userId; uInfo.Sid = det.getUserSid(0); uInfo.NetworkAlias = _alias; uInfo.NetworkDomain = _domain; uInfo.Company = curext(); uInfo.Enable = NoYes::Yes; uInfo.Name = _name; uInfo.Language = adminRecord.Language; uInfo.HelpLanguage = adminRecord.Helplanguage; if (uInfo.validateWrite()) uInfo.write(); // следующие 2 строчки возможно лишние, не успел проверить))) infolog.getUserSetup().setDefaults(uInfo); infolog.getUserSetup().setUserSetup(uInfo); suInfo.initValue(_userId); suInfo.Id = _userId; suInfo.Email = det.getUserMail(0); if (suInfo.validateWrite()) { suInfo.write(); } ugList.clear(); ugList.initValue(); ugList.UserId = _userId; ugList.GroupId = #AdminUserGroup; if (ugList.validateWrite()) ugList.write(); ttscommit; } ; addUserInfo("denis", "chernyakovd", "mydomain.com", "Chernyakov, Denis"); info('Done'); }
__________________
// no comments |
|
|
За это сообщение автора поблагодарили: Kabardian (3). |