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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.12.2011, 09:53   #1  
Raven13 is offline
Raven13
Участник
 
9 / 15 (1) ++
Регистрация: 25.06.2010
Обновление прав пользователя без выхода из системы
Ниже процедура, которая позволяет перегружать права пользователя _без_ выхода из системы. Надеюсь будет полезна.

Данная реализация работает для 3й ахапки (возможно 4й, не проверял).

Для 5ки процедура разработана, пока тестируется (:

X++:
static void ReloadUserRights(Args _args)
{
    #WinApi
    #AOT
    #define.message('Перед обновлением прав буду закрыты все окна. Продолжить?')

    Integer   item;
    container list;

    Dictionary dictionary;
    Company    company;

    TreeNode mainMenu;

    ////////////////////////////////////////////////////////////////////////////////////
    // Вспомогательная процедура, возвращает список открытых окон
    container getAxChildWindows()
    {
        container windows;
        int       counter = 0;

        DLL         user32    = new DLL('user32');
        DLLFunction isVisible = new DLLFunction(user32, 'IsWindowVisible');

        hWnd childWnd;
        hWnd mdiClient = WinApi::findWindowEx(infolog.hWnd(), 0, 'MDIClient', '');
        ;
        isVisible.returns(ExtTypes::DWord);
        isVisible.arg(ExtTypes::DWord);

        for (childWnd = WinApi::findWindowEx(mdiClient, 0, '', '');
             childWnd;
             childWnd = WinApi::findWindowEx(mdiClient, childWnd, '', ''))
        {
            if (isVisible.call(childWnd) ? true : false)
            {
                ++counter;
                windows = conins(windows, counter, childWnd);
            }
        }
        return windows;
    }
    ////////////////////////////////////////////////////////////////////////////////////
    ;
    if (box::yesNo(#message, DialogButton::No, 'Запрос', #message) != DialogButton::Yes)
        return ;

    //--> получим спиcок дочерних окон и закроем найденые
    list = getAxChildWindows();

    for(item = 1; item <= conlen(list); item++)
        WinAPI::sendMessageEx(conpeek(list, item), #WM_SYSCOMMAND, #SC_CLOSE, 0);
    //<-- получим спиcок дочерних окон и закроем найденые

    //--> перезагрузим права пользователя
    dictionary = new Dictionary();
    company    = new Company(curExt());

    dictionary.reloadSecurity(false, false);
    company.reloadRights();

    infolog.globalCache().clear(classStr(SysSecurityFormSetup));

    if (!domainAccess())
        SecurityKeySet::reloadDomainRestrictions();
    //<-- перезагрузим права пользователя

    //--> откроем главное меню
    mainMenu = TreeNode::findNode(strfmt('%1\\MainMenu', #MenusPath));

    if (mainMenu != null)
        mainMenu.AOTrun();
    //<-- откроем главное меню
}

Последний раз редактировалось Raven13; 12.12.2011 в 09:55.
За это сообщение автора поблагодарили: Logger (3), Bega (2).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Обновление detail-таблицы DreamCreator DAX: Программирование 1 05.04.2005 15:57
Размышления на тему “Системы контроля версий в Аксапте”. Андре DAX: База знаний и проекты 31 07.02.2005 12:29
при построении перекрёстных ссылок выдаётся сообщение об ошибках mmmax DAX: Программирование 10 21.01.2005 12:42
Проблемы настройки прав доступа пользователям axot DAX: Администрирование 25 16.05.2002 10:47
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 04:54.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.