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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.09.2021, 13:23   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
toString(), гад, опасный. ax2012
Привет всем.

Выяснилась страшная вещь.
Если на табличке перекрыт метод toString то при вызове на соответствующем treeNode метода toString()

X++:
treeNode.toString()
возникает ошибка.
Цитата:
Ошибка времени выполнения: TreeNode (источник данных), метод toString вызван с недопустимыми параметрами.
Возможно и в других местах есть проблемы. Здесь пишу о том где натолкнулся сам.

Стал исследовать вопрос, оказывается вызов super() внутри табличного toString() возвращает Common !
Но при этом IDE считает что тип должен быть str и генерит такой код
X++:
public str toString()
{
    str ret;

    ret = super();

    return ret;
}
При выполнении ошибка несоответствия типов возникает на вызове
X++:
    ret = super();
Если написать так,
X++:
public Common toString()
{
    Common ret;
    ;
    
    ret = super();

    return ret;
}
то не компилируется на строке
X++:
    ret = super();
с ошибкой несоответствия типов.

Если написать
X++:
public anytype toString()
{
    anytype ret;
    ;
    
    ret = super();

    return ret;
}
то все компилируется и под отладчиком видно что super() вернул табличный буфер.

Это конечно помогает при использовании в коде
X++:
buffer.toString()
Но ошибка на
X++:
treeNode.toString()
никуда не девается.

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

Причем это не только тут
вот еще пример
ClassFactory - queryRunClass
и еще
Использование modifiedFieldValue() и modifiedField(). Как правильно.
Ax2012. Типы операндов не совместимы с оператором

Это все из той же серии когда где то в ядре при передаче параметров что-то ломается.

Т.е. для разработчиков в 2012-й Аксапте обращение с типами сделали более строгим, но в ядре немного недосмотрели, а может уже не стали менять старые баги.
За это сообщение автора поблагодарили: mazzy (5), sukhanchik (5), gl00mie (5), -DocSerzh- (1), S.Kuskov (5).
Теги
ax2012, ax2012r3, debug, tostring, баг

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX2012, D365FO: Способы ограничения финансовых аналитик sukhanchik DAX: Функционал 7 09.03.2021 02:58
dynamicsaxse: November 2018 Release – Dynamics AX2012 R3 update Blog bot DAX Blogs 0 15.11.2018 09:11
stephenmann: Technical History of Dynamics AX - From Axapta 3.0 to AX2012 Blog bot DAX Blogs 5 03.03.2017 10:22
dynamicsax-fico: Invoice search AX2012 vs. AX7 (Part 2) Blog bot DAX Blogs 0 01.04.2016 10:11

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

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

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