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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.03.2022, 08:36   #21  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
644 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Инкрементная компиляция базового класса приводит к компиляции подклассов. А т.к. я пробовал компилировать подкласс отдельно, то результат по идее был бы тот же.
Сейчас никак не получается снова воспроизвести такую ошибку, все работает идеально.
Что было вчера? Запара наверное...))
__________________
// no comments
Старый 18.03.2022, 09:34   #22  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
644 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Поигрался со static, получается, если убрать данный признак или наоборот добавить, в классе будут присутствовать оба метода с одинаковым именем. Один - явно, другой - неявно. Неявный будет существовать до тех пор, пока не создать такой же явно, а затем удалить.
Соответственно, если был static description() и по какой-то причине сделали его виртуальным (не static), то hasStaticMethod() будет возвращать true до тех пор, пока вручную не создать снова static description() и затем вручную его удалить.
Попробовал разные варианты клиент/сервер, во всех случаях вызов hasStaticMethod() ведет себя стабильно как описано выше. Однако при запуске кода аксапта ведет себя нестабильно. Запустив класс на клиенте через контекстно меню не существующий код отрабатывает даже при отладке в дебаггере, однако по F5 сам вылетает в дебаггер с ошибкой, запустив еще раз по F5 клиент аскапты не справился и рухнул. :-)
Иногда аксапта падает просто при изменении свойства RunOn.
Все это касается AX4. Остальные версии не пробовал.
__________________
// no comments
Старый 16.08.2024, 20:32   #23  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,918 / 3189 (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;
}
Теги
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, время: 07:17.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.