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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.10.2009, 00:35   #26  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,984 / 3273 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Попробовал сделать более универсальную защиту от переключения компаний.

Для этого делаем такие изменения :
1. Заводим где-нибудь статический метод
X++:
// pkoz 24.10.2009
static 
//client
server 
boolean GRD_changeCompanyForbidden(boolean _parm = false, boolean _flush = false)
{
//    SysGlobalCache      SysGlobalCache = infolog.globalCache();
    SysGlobalCache      SysGlobalCache = appl.globalCache();
    boolean             ret;
    int                 retI;
    ;
    retI = SysGlobalCache.get(funcName(), 0, 0);
    if (!prmIsDefault(_parm)) // пишем
    {
        if (_parm)
        {
            retI++;
        }
        else
        {
            retI--;
        }
        SysGlobalCache.set(funcName(), 0, retI);
    }

    if (retI < 0 || _flush)
    {
        SysGlobalCache.set(funcName(), 0, 0);
        return false;
    }

    if(retI > 0)
        return true;

    return false;

}
у себя я добавил его на класс SysSetupFormRun

2. Создаем класс для сброса настроек состоящий из одного метода main
X++:
// GRD_changeCompanyFix_pkoz // pkoz 24.10.2009
static void main(args _args)
{
    ;
    SysSetupFormRun::GRD_changeCompanyForbidden(false, true);
}
ставим его вызов в меню, например в "Сервис - Разрешить смену компаний". Вызов этого пункта будет отменять все запреты по переключению компаний.

3. Вносим изменение в метод \Classes\Application\setDefaultCompany
X++:
    SysGlobalCache cache = appl.globalCache();
    container   GRD_stack = xSession::xppCallStack(); // pkoz 24.10.2009
    if (//GRD_isPkoz() &&
        (
           conPeek(GRD_Stack, 3) == @"(C) \Classes\FormRun\activate" // в трехзвенке
        || conPeek(GRD_Stack, 3) ==     @"\Classes\FormRun\activate" // в двухзвенке
        )
        && SysSetupFormRun::GRD_changeCompanyForbidden()
       )
    {
        warning("Запрещено переключение между компаниями. Для исправления выберите Меню Сервис - Разрешить смену компаний");
        return false;
    }

    ret = super(_selectableDataArea);
далее перед запуском какой либо обработки, успешному выполнению которой мешало спонтанное переключение между компаниями, ставим вызов
X++:
SysSetupFormRun::GRD_changeCompanyForbidden(true);
после выполнения
X++:
SysSetupFormRun::GRD_changeCompanyForbidden(false);
теперь не будет переключения между компаниями. Можно не отключать окна прогресс бара, принтера и т.п.

Пункт 2 нужен если обработка прервалась и отмена запрета переключения не была вызвана (например по ошибке).
Теги
progress bar, sysoperationprogress, баг, бегунок, законченный пример, полезное, смена компании

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблемы с Exists Join Logger DAX: Программирование 28 28.04.2010 02:54
Enterprise Portal: какие могут быть проблемы? sminex_ax DAX: Администрирование 0 16.05.2008 12:37
Проблемы быстродействия Axapta 3.0 Alexandr A. Osipkin DAX: Администрирование 37 16.02.2007 22:43
Проблемы работы ERP в многофилиальной и территориально разнесённой компании СНГ. SlavaK DAX: Прочие вопросы 18 02.03.2004 15:25

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:17.