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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.09.2018, 13:48   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Я в свое время столкнулся с тем, что buffer.TableId для таблиц, использующих наследование, зачастую возвращает идентификатор не совсем той таблицы, к которой относится буфер. Вместо этого обычно возвращается идентификатор одной из родительских таблиц, явно фигурирующих в коде во время компиляции - см. также А что такого принципиального в 2012? По моему хороший разработчик без труда в ней разберется Нужную информацию содержит поле buffer.RelationType, но тут есть нюанс: в интерпретаторе Х++ обращение к этому полю безопасно даже для Common, а вот при генерации CIL это приводит к ошибке компиляции. Более безопасным оказалось вызывать buffer.getInstanceRelationType() - он возвращает название конкретной таблицы-наследника либо пустую строку, если таблица не входит в иерархию наследования. В итоге для определения во время выполнения "настоящего" типа табличного буфера с учетом возможного наследования получился такой вспомогательный метод:
X++:
// возвращает tableId таблицы либо, если таблица поддерживает наследование, то tableId конкретного "наследника"
// safe тут относится к генерации кода CIL, которая валится на простом обращении к Common.RelationType
public static TableId getTableIdOrReltaionTypeSafe(Common _record)
{
    TableNameShort  tableName = _record.getInstanceRelationType();
    TableId         ret = tableName2id(tableName);
    ;
    if (!ret)
    {
        ret = _record.TableId;
    }
    return ret;
}
Полученное значение уже можно использовать, скажем, в new DictTable(tableId).makeRecord()
За это сообщение автора поблагодарили: AlGol (3), raz (10), sukhanchik (8), Logger (8).
Теги
inheritance, table inheritance, type cast

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
[AX2012] Наследование таблиц. iCloud DAX: Программирование 4 26.03.2014 15:28
AX2012 - изменение связи таблиц на форме DTD DAX: Программирование 4 10.12.2013 16:30
Как сравнить financials dimensions у двух таблиц (AX2012) ? DTD DAX: Программирование 0 17.07.2013 15:16
AX2012: drag'n'drop и поля таблиц wojzeh DAX: Программирование 2 18.01.2012 22:07
приведение типов в select simply2double DAX: Программирование 3 30.09.2004 11:24

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

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

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