29.07.2011, 09:15 | #1 |
MCTS
|
Перебрать элементы Енум
Как перебрать элементы Енум так, чтобы внутри цикла можно было получить их значения, например, есть енум ABC, у которого есть 5 элементов (None = 0, A=1, B=2, C=3, AA=101):
X++: ABC { : ABC::None ABC::AA . , ABC::None, . } |
|
29.07.2011, 09:30 | #2 |
Участник
|
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)); } } |
|
|
За это сообщение автора поблагодарили: Eldar9x (5), farlander (1). |
29.07.2011, 09:35 | #3 |
MCTS
|
Спасибо!
|
|
29.07.2011, 10:29 | #4 |
Moderator
|
До кучи. Те же "куриные продукты", только в профиль. Нашёл у себя функцию (статический метод) определения значения (числа) енума по его русскому названию:
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 |
Участник
|
Ну, для этого не надо такой огород городить
X++: StatusIssue issue; ; issue = str2enum(issue, 'В заказе'); info(strfmt('%1', issue));
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: Gustav (2). |
29.07.2011, 10:36 | #6 |
Участник
|
Роман Долгополов (здесь он под ником db) еще для Ax2.5 (там у него был ник RDOL) написал очень хорошую формочку для просмотра Base Enum. Не знаю, насколько корректно выкладывать чужое решение, но уж больно удобная штука. Хотя, казалось бы, чего там сложного-то Тем не менее, во вложении слегка адаптированный вариант его решения под Ax2009.
Я добавил в проект также меню SysContextMenu и класс по его обслуживанию SysContextMenu, чтобы показать куда его вставить. Однако у большинства разработчиков это меню уже достаточно сильно изменено. Поэтому следует быть аккуратным при импорте именно этих двух объектов. Ну, и вызывается "Обозреватель перечислимых типов" по правой клавише мыши. Причем как для узла "\Data Dictionary\Base Enums", так и для узла "\System Documentation\Enums" |
|
29.07.2011, 10:54 | #7 |
Moderator
|
Вообще 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) } Последний раз редактировалось Gustav; 29.07.2011 в 11:01. |
|
Теги |
enum, перебор записей |
|
Похожие темы | ||||
Тема | Ответов | |||
Динамические элементы управления? | 3 | |||
перебрать все поля Day1.... Day31 | 7 | |||
Как перебрать строки | 2 | |||
Как создавать элементы формы динамически? | 2 | |||
Основные элементы КИС | 1 |
|