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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.08.2024, 20:32   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,924 / 3205 (114) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Оказывается стандартный \Classes\SysDictClass\hasObjectMethod
неправильно работает для методов
FormStringControl.Id()
SysMethodInfo.getAttribute()
SysDictMethod.getAttribute()
DictMethod.getAttribute()

так происходит из-за того, что используемый в нем метод dictMethod.compiledOk()
некорректно работает для случаев когда метод не определен на классе, но наследуется от родительского класса,
который является системным (для обычных классов все ок)

Вот исправление

X++:
public boolean hasObjectMethod_MRC(
    IdentifierName  methodName
    )
{
    SysDictMethod   dictMethod = new SysDictMethod(UtilElementType::ClassInstanceMethod, this.id(), methodName);
    ClassId         actualClassId;
    ;
    
    if (!dictMethod)
    {
        return false;
    }
    
    // JEV008634 "Tech_Автоматическое убирание Bold шрифта на формах", PKoz 16.08.2024 -->
    // данное изменение потребовалось потому что стандартный метод hasObjectMethod неверно работает для методов
    // FormStringControl.Id()
    // SysMethodInfo.getAttribute()
    // SysDictMethod.getAttribute()
    // DictMethod.getAttribute()
    
    // так происходит из-за того, что используемый в нем метод dictMethod.compiledOk()
    // некорреткно работает для случаев когда метод не определен на классе, но наследуется от родительского класса,
    // который является системным (для обычных классов все ок)
    
    // но работать будет медленнее из медленного вызова methodsActualClassId
    // поэтому результат лучше кешировать
    if (!dictMethod.compiledOk())
    {
        actualClassId = this.methodsActualClassId(methodName);
        if (!actualClassId)
        {
            return false;
        }
        dictMethod = new SysDictMethod(UtilElementType::ClassInstanceMethod, actualClassId, methodName);
    }
    // JEV008634 "Tech_Автоматическое убирание Bold шрифта на формах", PKoz 16.08.2024 <--
    
    if (!dictMethod.compiledOk())
    {
        return false;
    }
    
    return true;
}
За это сообщение автора поблагодарили: S.Kuskov (10), Pandasama (3).
Теги
formhasmethod, sysdictclass, метод, проверка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка при вызове COM-метода koraman DAX: Программирование 8 23.10.2014 09:57
Проблема вызова метода доступа (Enum'ы!) Zoe DAX: Программирование 4 14.04.2008 23:48
Проверить существование значения Himan DAX: Программирование 8 20.11.2006 16:49
lookup не закрывается до завершения метода modified Morpheus DAX: Программирование 4 09.08.2006 16:43
Есть ли таблица соответствий ID -объекта - Имя объекта в Аксапта? coja DAX: Администрирование 5 26.04.2005 15:25

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

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

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