22.07.2020, 13:41 | #1 |
Участник
|
как программно получить список всех наименований / значений у Enum
Подскажите как зная название только поля таблицы и саму таблицу определить через Job какой Enum используется для данного поля?
А дальше зная этот Enum получить список всех возможных значений этого Enum с наименованием. Это в рамках Job можно как то получить? Или только вручную |
|
22.07.2020, 14:03 | #2 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: oleggy (1). |
22.07.2020, 14:11 | #3 |
Участник
|
А как зная название поля и названия таблицы определить есть ли у этого поля Enum и само enumnum этого енум можно как то получить?
Это нужно разработчикам которые не занимаются AX и лазить по системе не умеют. Хочу Job написать что бы сами могли информацию получать. |
|
22.07.2020, 14:33 | #4 |
Участник
|
Как получить имя типа расширенного типа
только вам нужен будет не dictField.typeId(), а dictField.enumId() если dictField.baseType() == Types::Enum Последний раз редактировалось S.Kuskov; 22.07.2020 в 14:36. |
|
22.07.2020, 15:20 | #5 |
Модератор
|
__________________
-ТСЯ или -ТЬСЯ ? |
|
|
За это сообщение автора поблагодарили: wojzeh (3). |
23.07.2020, 18:12 | #6 |
Участник
|
сначала dictField.typeId();
потом: X++: public void populateTree() { DictEnum policyRuleTypeEnum; int i; policyRuleTypeEnum = new DictEnum(enumNum(SysPolicyRuleTypeEnum)); for(i = 0; i < policyRuleTypeEnum.values(); i++) { str sym = policyRuleTypeEnum.value2Symbol(i); info(strFmt("%1 %2 %3", i, policyRuleTypeEnum.value2Name(i), sym)); } }
__________________
Felix nihil admirari |
|
13.08.2020, 13:47 | #7 |
Участник
|
.
|
|
13.08.2020, 21:18 | #8 |
Участник
|
Цитата:
Сообщение от wojzeh
сначала dictField.typeId();
потом: X++: public void populateTree() { DictEnum policyRuleTypeEnum; int i; policyRuleTypeEnum = new DictEnum(enumNum(SysPolicyRuleTypeEnum)); for(i = 0; i < policyRuleTypeEnum.values(); i++) { str sym = policyRuleTypeEnum.value2Symbol(i); info(strFmt("%1 %2 %3", i, policyRuleTypeEnum.value2Name(i), sym)); } } Т.е. или в цикле i < policyRuleTypeEnum.values(), но тогда внутри policyRuleTypeEnum.index2Value(i) Или внутри цикла policyRuleTypeEnum.value2Symbol(i), но тогда в самом цикле I < 255 Для примера, подставь Base Enum с именем UtilElementType. Он как раз на 100 элементах и завершит работу, несмотря на тот факт, что есть значения и больше 100
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
14.08.2020, 05:42 | #9 |
Участник
|
Цитата:
Действительно value2Symbol(i) пишет фигню. X++: Name enumName = 'InventTransType'; DictEnum dictEnum = new DictEnum(enumName2Id(enumName)); Name nameLabel, nameSys; AnyType enumValue; Counter i; ; setprefix('Сообщения'); if (true) // 255 { for (i = 0; i < 255; i++) { nameLabel = dictEnum.value2Name(i); nameSys = dictEnum.value2Symbol(i); if (nameSys) info(strfmt('%1\t%2 ("%3") = %4', enumName, nameSys, nameLabel, i)); } } else // values() { for (i = 0; i < dictEnum.values(); i++) { enumValue = dictEnum.index2Value(i); //nameSys = dictEnum.value2Symbol(i); // некорректно выводит info(strfmt('%1\t%2 = %3', enumName, nameSys, enumValue)); } } Последний раз редактировалось oleggy; 14.08.2020 в 05:49. |
|
14.08.2020, 08:53 | #10 |
Участник
|
Цитата:
X++: for (i = 0; i < dictEnum.values(); i++) { enumValue = dictEnum.index2Value(i); nameLabel = dictEnum.index2Label(i); nameSymbol = dictEnum.index2Symbol(i); info(strfmt('%1\t%2 ("%3") = %4', enumName, nameSymbol, nameLabel, enumValue)); } |
|