AXForum  
Вернуться   AXForum > Блоги > b_nosoff
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

Оценить эту запись

Определение SysOperationController в диалоге

Запись от b_nosoff размещена 08.05.2014 в 14:29
Обновил(-а) b_nosoff 30.12.2016 в 01:03

Класс SysSetupForm в AX2012 по какой-то причине не подвергся доработке после внедрения SysOperationFramework, и стало невозможно определить, что за класс вызвал диалог. Хотя доработка-то всего в пять строк:

X++:
public ClassName determineCallerName()
{
    #aot
    Object caller = editFormRun.args().caller();

    if (caller)
    {
        switch (true)
        {
            // fix -->
            case caller is SysOperationDialog:
                caller       = caller.controller();
                callerName   = classId2Name(classidget(caller));
                callerPath   = #classesPath;
                break;
            // fix <--
       ...
Размещено в Без категории
Просмотров 52209 Комментарии 1
Всего комментариев 1

Комментарии

  1. Старый комментарий
    Допил, по определению пункта меню в случае, если вызов был из controller(в основном актуально для отчётов, в некоторых случаях для отчётов показывается общий controller - SrsReportRunController - пример такого отчёта в стандарте Физические запасы по складским аналитикам)

    Метод init подвергся модификации :

    X++:
        #aot
        //+ fix s-nefedo
        MenuItemType            menuItemType;
        SysOperationController  controller;
        //- fix s-nefedo
    ...
    
        this.DetermineCallerName();
        //fix s-nefedo
        /*menuItemName    = editFormRun.args().menuItemName();
    
        if (menuItemName)
        {
            menuItemPath = #MenuItemsPath + #FilePathDelimiter + enum2str(editFormRun.args().menuItemType()) + #AOTDelimiter + menuItemName;
        }*/
        menuItemName = editFormRun.args().menuItemName();
    
        if (menuItemName)
        {
            menuItemType = editFormRun.args().menuItemType();
        }
    
        if (! menuItemName && caller)
        {
            switch(true)
            {
                case SysDictClass::isEqualOrSuperclass(classidget(caller), classnum(SysOperationDialog)):
                    controller   = caller.controller();
                    if (controller.parmArgs())
                    {
                        menuItemName = controller.parmArgs().menuItemName();
                        menuItemType = controller.parmArgs().menuItemType();
                    }
                    break;
                default :
                    break;
            }
        }
    
        if (menuItemName)
        {
            menuItemPath = #MenuItemsPath + #FilePathDelimiter + enum2str(menuItemType) + #AOTDelimiter + menuItemName;
        }
        //fix s-nefedo
    ....
    Запись от SRF размещена 19.06.2020 в 13:21 SRF is offline
    Обновил(-а) SRF 25.06.2020 в 11:43
 


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