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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.07.2011, 09:15   #1  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Перебрать элементы Енум
Как перебрать элементы Енум так, чтобы внутри цикла можно было получить их значения, например, есть енум ABC, у которого есть 5 элементов (None = 0, A=1, B=2, C=3, AA=101):
X++:
   ABC
{
   :  ABC::None  ABC::AA .      , ABC::None, .
}
Значения могут идти не по порядку. 101 к примеру.
Старый 29.07.2011, 09:30   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
X++:
static void Job99(Args _args)
{
    Counter     i;
    DictEnum    dictEnum = new DictEnum(enumnum(StatusIssue));
    StatusIssue statusIssue;
    ;

    for (i = 0; i < dictEnum.values(); i++) // вместо dictEnum.values() можно использовать enumcnt(StatusIssue)
    {
        statusIssue = dictEnum.index2Value(i);
        info(strfmt("%1 %2", i, statusIssue));
    }
}
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: Eldar9x (5), farlander (1).
Старый 29.07.2011, 09:35   #3  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Спасибо!
Старый 29.07.2011, 10:29   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
До кучи. Те же "куриные продукты", только в профиль. Нашёл у себя функцию (статический метод) определения значения (числа) енума по его русскому названию:
X++:
// преобразует значение метки перечисления в значение (0-250)
// например для перечисления InventType
// "Номенклатура" => 0 (ItemType::Item)
// "Услуга" => 2 (ItemType::Service)
static int enumLabel2Value( DictEnum _dictEnum, str _label )
{
    int enumValue = 255;
    int ind;
    ;
    for (ind=0; ind<_dictEnum.values(); ind++)
    {
        if ( _dictEnum.index2Label(ind) == _label )
        {
            enumValue = _dictEnum.index2Value(ind);
            break;
        }
    }
    return enumValue;
}
// пример вызова:  box::info(int2str(KKu::enumLabel2Value(new DictEnum(enumnum(ItemType)), 'Услуга')));
Старый 29.07.2011, 10:35   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Ну, для этого не надо такой огород городить
X++:
StatusIssue issue;
;
issue = str2enum(issue, 'В заказе');
info(strfmt('%1', issue));
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Gustav (2).
Старый 29.07.2011, 10:36   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Роман Долгополов (здесь он под ником db) еще для Ax2.5 (там у него был ник RDOL) написал очень хорошую формочку для просмотра Base Enum. Не знаю, насколько корректно выкладывать чужое решение, но уж больно удобная штука. Хотя, казалось бы, чего там сложного-то Тем не менее, во вложении слегка адаптированный вариант его решения под Ax2009.

Я добавил в проект также меню SysContextMenu и класс по его обслуживанию SysContextMenu, чтобы показать куда его вставить. Однако у большинства разработчиков это меню уже достаточно сильно изменено. Поэтому следует быть аккуратным при импорте именно этих двух объектов.

Ну, и вызывается "Обозреватель перечислимых типов" по правой клавише мыши. Причем как для узла "\Data Dictionary\Base Enums", так и для узла "\System Documentation\Enums"
Вложения
Тип файла: xpo SharedProject_RDOL_EnumBrowser.xpo (95.1 Кб, 365 просмотров)
Старый 29.07.2011, 10:54   #7  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Вообще DictEnum когда-то показался мне несколько запутанным в терминах и методах конвертации. Нашёл у себя джобик, при помощи которого я разбирался who is who:
X++:
static void Job274_DictEnum(Args _args)
{
    DictEnum    e = new DictEnum(enumnum(LedgerTransType));
    // DictEnum    e = new DictEnum(enumName2Id('LedgerTransType'));
    int         i;

    int v2i(int _value)
    {
        int idx;
        for (idx=0;idx<e.values();idx++)
            if (e.index2Value(idx)==_value) return idx;
        return 255;
    }
    ;

    for (i=0; i<e.values(); i++)
    {
        info(strFmt('%1 | %2 | %3 | %4 | %5 | %6',
            i,
            e.index2Name(i), // for backwards compatibility only; use the index2label
            e.index2Label(i),
            configurationKeyId2Name(e.index2ConfigurationKey(i)),
            e.index2Symbol(i),
            e.index2Value(i)
            ));
    }
    info(strFmt('name2Value   = %1', e.name2Value  ( 'Перенос'  ))); // 1
    info(strFmt('symbol2Value = %1', e.symbol2Value( 'Transfer' ))); // 1

    info(strFmt('value2Label  = %1', e.value2Label ( 1 ))); // Перенос
    info(strFmt('value2Name   = %1', e.value2Name  ( 1 ))); // Перенос

    info(strFmt('value2Symbol = %1', e.value2Symbol( 1 ))); // Transfer

    info(strFmt('%1' , LedgerTransType::Transfer == 1)); // 1 (true)
    info(strFmt('value2Symbol = %1', e.value2Symbol( LedgerTransType::Transfer ))); // Transfer

    info(strFmt('VALUE 2 INDEX = %1', v2i( 79 ))); // 21 (т.е. 21 | Основные средства | Основные средства | RAsset | FixedAssets_RU | 79)
}
Т.е. получается, что если не прибегать к услугам функции strFmt, то для Eldar9x подошёл бы метод value2Symbol.

Последний раз редактировалось Gustav; 29.07.2011 в 11:01.
Теги
enum, перебор записей

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Динамические элементы управления? Yegor DAX: Программирование 3 23.08.2004 15:27
перебрать все поля Day1.... Day31 Omeo DAX: Программирование 7 22.03.2004 19:29
Как перебрать строки bolt DAX: Программирование 2 02.03.2004 19:24
Как создавать элементы формы динамически? vitk DAX: Программирование 2 23.01.2002 01:41
Основные элементы КИС Rafael DAX: Прочие вопросы 1 27.12.2001 15:03

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

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

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