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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.08.2015, 11:05   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
fieldnum и map custVendTrans - как получить идентификатор поля таблицы по мапу?
Дурной вопрос. Понял, что я не знаю красивого ответа. Может подскажете?

Есть:
= код, в котором объявлена переменная типа map CustVendTrans
= запрос, который содержит либо custTrans, либо vendTrans в зависимости от внешних
= метод, который устанавливает range в этом запросе
= для range нужно получить fieldnum

вопрос:
а как проще и красивше получить fieldnum?

X++:
    CustVendTrans           custVendTrans           = custVendTransStatic.custVendTrans();
    Query                   q;
    QueryBuildDataSource    qbds;
;
    switch( _journalTable.JournalModule)
    {
        case ModuleCustVend::Cust:
            q = new Query(querystr(myCustQuery));
            break;
        case ModuleCustVend::Vend:
            q = new Query(querystr(myVendQuery));
            break;
        default:
            throw Error::unsupportedEnumValue(_journalTable.JournalModule);
    }

    qbds = q.dataSourceTable(custVendTrans.TableId);

    // здесь возвращает fieldid из мапа = 39, а нужно для CustTrans = 41, а для VendTrans = 78
    SysQuery::findOrCreateRange(qbds, fieldnum(custVendTrans, ExchRate)       ).value(myValue);

    // есть еще много критериев. как бы красиво оформить?
    SysQuery::findOrCreateRange(qbds, fieldnum(custVendTrans, ....
    SysQuery::findOrCreateRange(qbds, fieldnum(custVendTrans, ....
    SysQuery::findOrCreateRange(qbds, fieldnum(custVendTrans, ....
    SysQuery::findOrCreateRange(qbds, fieldnum(custVendTrans, ....
понятно, что можно вставить в switch. но тогда код будет дублироваться. некрасиво. хотя везде в стандартной аксапте именно так и делается

понятно, что можно через DictField, но получается слишком длинный код, когда критериев (range) достаточно много.

есть еще какой-нибудь способ?

Последний раз редактировалось mazzy; 13.08.2015 в 11:07.
Теги
ax2012, map, законченный пример, как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Классы коллекций (инициализация, сериализация): List, Set, Map. petergunn DAX: База знаний и проекты 12 06.11.2024 18:38
Получить значение поля по TableId, FieldId, RecId bodeaux DAX: Программирование 8 08.07.2014 10:47
Некорректно отображается значение текстового поля их приджойненой таблицы в вэб-гриде... glibs DAX: Программирование 0 20.04.2009 19:13
Каким образом можно получить значение поля, зная fieldId? Lemming DAX: Программирование 10 19.06.2006 12:25
Не устанавливается EDT для поля таблицы Filip DAX: Программирование 3 29.10.2004 13:52

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

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

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