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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.03.2009, 14:44   #1  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
То есть вот чего хочу:
X++:
    TableName tableName;
    Common  common;
    ;
    ttsbegin;
    while select forupdate common
    {
        common.(fieldname2id(tablename2id(tableName), "TMN_ImportStatus")) = 100;
        common.doUpdate();
    }
    ttscommit;
как указать, какая таблица будет в common?
Хотя технически это достижимо, но тут в угоду некой универсальности и простоте реализации приносится в жертву смысл выполняемых действий, реализуемая бизнес-логика (то, что mazzy называет "программистский подход"). Во-первых, обвновление по doUpdate() смотрится странно, потому что обход триггера обновления на таблице имеет смысл, если вы абсолютно точно знаете, что делаете, а если даже неизвестно, какая именно таблица будет обновляться, то, очевидно, это условие в общем случае не выполняется. Подумайте о том, что реализуемый функционал и, соотв., список используемых таблиц будет расширяться - появятся таблицы, о которых вы сейчас и не подозреваете, а разработчики, расширяющие функционал, весьма вероятно, не будут подозревать о наличии такого "каверзного" кода. Весьма вероятно, изменение TMN_ImportStatus на той или иной таблице должно будет сопровождаться дополнительными действиями, которые нельзя предвидеть заранее.
Мне кажется, было бы корректнее реализовать некую иерархию классов-обработчиков этого изменения, каждый из которых мог бы создаваться под свою конкретную таблицу (в любом случае изначально на все существующие таблицы может быть один-единственный класс), и в любом случае жестко зашить весь список таблиц, о которых вы сейчас знаете:
X++:
static TMN_ImportStatusUpdater_Base construct(TableId _tableId)
{
    TMN_ImportStatusUpdater_Base    ret;
    ;
    switch(_tableId)
    {
        case tablenum(TMN_Table1) :
        case tablenum(TMN_Table2) :
        case tablenum(TMN_Table3) :
            ret = new TMN_ImportStatusUpdater_Base();
            break;
        default :
            throw error(error::wrongUseOfFunction(funcname()));
    }
    ret.parmTableId( _tableId );
    return ret;
}

// ...
tableId     = dfTableId.value();
newStatus   = dfStatus.value();
TMN_ImportStatusUpdater_Base::construct( tableId ).updateImportStatus( newStatus );

Последний раз редактировалось gl00mie; 13.03.2009 в 15:14. Причина: исправление кода примера
За это сообщение автора поблагодарили: mazzy (2), oip (1).
Старый 13.03.2009, 15:14   #2  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от gl00mie Посмотреть сообщение
...
В общем случае - согласен. Но в каком-то конкретном, такое решение через common может и иметь смысл, надо на постановку задачи смотреть. Если это функция, типа "очистить все" в каком-нибудь функционале, расположенном сбоку, то why not?

Там в "поблагодарить..." текст левый случайно попал, рука дрогнула. Не обращайте внимание.
Теги
шаблон

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Пропавшие поля в таблице Андре DAX: Программирование 10 03.03.2016 10:32
Вопрос по перегрузке лукапа поля прям на таблице HorrR DAX: Программирование 3 03.06.2008 18:02
Поля CreatedTransactionID, BondBatch в таблице LedgerTrans tolstjak DAX: Программирование 21 04.04.2007 08:03
После перекрытия JumpRef поля на DataSource в контекстном меню так и не появился переход к основной таблице. Кирилл DAX: Программирование 7 01.02.2007 11:42
Basics: обновление отдельного поля в гриде Dymm DAX: Программирование 19 10.08.2005 15:37

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

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

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