Показать сообщение отдельно
Старый 11.11.2006, 21:44   #29  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Экспорт прав всех групп в asg-файлы в заданном каталоге
Ах, какая архиполезнейшая ветка, господа! Прочитал с большим интересом.
Цитата:
Сообщение от Alexis Посмотреть сообщение
Вот только ума не приложу, неужели так сложно было реализовать эту кнопку и для ВСЕХ групп тоже, а не только для одной. :-\
С позволения присоединюсь, потому что тоже приходилось несколько раз экспортировать права всех групп в файлы - руками по одной группе за одно нажатие на кнопку "Экспорт". И тоже недоумевал. И тоже надоело. Решил рискнуть - и что-то получилось. Не супер-пупер, но сработало как мне надо. Может, кому-нибудь еще пригодится.
X++:
static void KKu_Job_6B01_ExportAllUserGroupsToFiles(Args _args)
{
    // сохраняет все права групп пользователей в отдельных файлах в указанном каталоге
    SysSecurityUserGroup    sysSecurity;
    UserGroupInfo           userGroupInfo;
    userGroupId             userGroupId , tmpUserGroupId;
    domainId                domainId    , tmpDomainId;
    str                     fileName;
    str                     filePath = @'C:\YourOwnFolder\ForUserGroups\'; // '//заключительный обратный слэш - обязателен'
    ;
    
    sysSecurity = SysSecurityUserGroup::construct();
    domainId = ''; // здесь возможно нужен конкретный домен, если их несколько,
                   // но у меня их нет (в таблице DomainInfo нет записей) - поэтому пустая строка
    
    while select userGroupInfo
    {
        userGroupId = userGroupInfo.id;
        fileName = filePath +
                ( strReplace
                ( strReplace
                ( strReplace
                ( strReplace
                ( strReplace
                ( strReplace
                ( strReplace
                ( strReplace
                ( strReplace( userGroupId, '.', '_'), // в качестве имени файла - id группы, очищенный от "нехороших" символов
                                           ' ', '_'),  
                                           ':', '_'), 
                                           '/', '_'), 
                                          @'\', '_'), 
                                           '?', '_'),
                                           '*', '_'),
                                           '[', '_'),
                                           ']', '_')
                                           );
        tmpUserGroupId = sysSecurity.parmUserGroupId();
        tmpDomainId    = sysSecurity.parmDomainId();
    
        // ----------------------------------------------------------------------------------------
        // выдрано из цикла if (dialog.run()) метода exportWithDialog класса SysSecurityUserGroup
        // скопировал по-обезьяньи, не особо разбираясь что к чему, но всё работает как мне надо :)
        sysSecurity.save();
        sysSecurity.parmDomainId( domainId );
        sysSecurity.parmUserGroupId( userGroupId );
        sysSecurity.load();
        sysSecurity.export( fileName );
        sysSecurity.parmDomainId( tmpDomainId );
        sysSecurity.parmUserGroupId( tmpUserGroupId );
        sysSecurity.load();
        // ----------------------------------------------------------------------------------------
    }
}
Всё что нужно сделать перед запуском джоба, так это прописать ваше имя папки, в которую будут складываться файлы.

Имена файлов формируются автоматически из идентификаторов групп. "Центрально симметричная" конструкция с многократными вызовами функции strReplace занимается очисткой идентификаторов групп от "нехороших" символов с точки зрения имени файла. Как видно в коде, "нехорошие" символы заменяются символами подчеркивания. Степень "нехорошести" - моя субъективная и некоторые символы (пробел, точка) в принципе вполне корректны для имени файла. Просто я предпочитаю, чтобы имя файла состояло только из букв, цифр и подчеркиваний. Вы можете смело сократить или расширить перечень заменямых символов по вашему усмотрению (например, на основании предварительного анализа значений поля Id таблицы UserGroupInfo)

Собственно "движок" процесса экспорта заимствован из цикла if (dialog.run()) метода exportWithDialog класса SysSecurityUserGroup. Заимствован неосознанно, без большого понимания что и как происходит именно в этих строчках кода (за неимением времени разбираться). Если кто-то не сочтет за труд немного прокомментировать (или даже оптимизировать) этот фрагмент - заранее премного благодарен!

Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Внимание - вопрос: вот вы выгрузили права для 5 групп и одного домена. А загружаться они как должны? А если они чуть-чуть отличаются между собой? А если при загрузке вы выделили не те группы/домены (или таковых вообще не существует)? А названия групп/доменов в файле экспорта/импорта не хранятся - т.к. импортировать права можно в другую пару домен/группа. Вопросов тут больше чем ответов.
На это заострение темы с доменами внимание, конечно, обратил, но особо пока не "грузился" по этому поводу и был очень рад, что домен у меня "один, да и тот пустой"
За это сообщение автора поблагодарили: zemlyn (2), Kabardian (3).