19.03.2023, 17:15 | #1 |
Участник
|
Как получить Name и Label по значению enuma
Можно ли по значению enum-а получить текстовое значение Name и Label?
Есть системный класс SysDictEnum, который содержит методы возвращающие Name и Label, но параметры этих методов или Index или Value, т.е. значение типа int. Например: Классы SysDictEnum:Класс SysDictEnum Вычисляемые поля $EnumNoYes:Вычисляемое поле = SysDictEnum.newName("NoYes"): Запись Методы index2Label:Строка (_index: Integer) index2LabelId:Строка (_index: Integer) index2Name:Строка (_index: Integer) index2Symbol:Строка (_index: Integer) index2Value:Integer (_index: Integer) value2Index:Integer (value: Integer) value2Label:Строка (_value: Integer) value2Name:Строка (_value: Integer) Но как получить для значения enum-а его index или value? Не могу найти такого метода - может кто-то может подсказать? И можно ли тоже самое получить не для enum-а АХ, а для enum-а модели ER? |
|
19.03.2023, 17:44 | #2 |
Участник
|
Цитата:
Но как получить для значения enum-а его index или value
|
|
20.03.2023, 09:46 | #3 |
Участник
|
Тоже не очень понимаю сам вопрос. Но, может быть, помогут такие примеры
X++: SysDictEnum sysDictEnum; ; sysDictEnum = new SysDictEnum(enumNum(NoYes)); info(strFmt("sysDictEnum.value2Symbol(NoYes::Yes) = %1",sysDictEnum.value2Symbol(NoYes::Yes))); info(strFmt("sysDictEnum.value2Name(NoYes::Yes) = %1",sysDictEnum.value2Name(NoYes::Yes))); X++: info(strFmt("NoYes::Yes = %1", NoYes::Yes)); info(strFmt("NoYes::Yes+0 = %1", NoYes::Yes+0)); info(strFmt("any2int(NoYes::Yes) = %1", any2int(NoYes::Yes))); info(strFmt("enum2int(NoYes::Yes) = %1", enum2int(NoYes::Yes))); info(strFmt("enum2str(NoYes::Yes) = %1", enum2str(NoYes::Yes))); info(strFmt("enum2Symbol(enumNum(NoYes), NoYes::Yes) = %1", enum2Symbol(enumNum(NoYes),NoYes::Yes))); info(strFmt("enum2Value(NoYes::Yes) = %1", enum2Value(NoYes::Yes)));
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
20.03.2023, 17:09 | #4 |
Участник
|
Зачем это нужно:
в модели создал enum ER_NoYes Значение Метка Описание Yes Yes Да No No Нет В маппинге модели в источниках объявил Перечисления Dynamics 365 for Operations NoYes:Перечисление Dynamics 365 for Operations NoYes Перечисления модели данных ER_NoYes:Перечисление модели данных ER_NoYes Полю модели Status присвоил значение Status:Status Значение перечисления = CASE(@.Status, NoYes.Yes, ER_NoYes.Yes, NoYes.No, ER_NoYes.No) Теперь в маппинге формата нужно в Excel-ячейку вывести значение поля модели Status в текстовом виде (Да или Нет). Можно, конечно написать "обратный" CASE Ячейка<Status> = CASE(@.Status, ER_NoYes.Yes, "Да", ER_NoYes.No, "Нет") Но хочется избежать задание одного и того же текста и в модели при описании enum-а и в формате для выражения значения ячейки. Хочется получить что-то типа Ячейка<Status> = Label(@.Status) и/или Ячейка<Status> = Name(@.Status) Это на примере enum-a с 2 значениями, а когда в нем 20-30 значений то CASE получается очень уж громоздкий. |
|
20.03.2023, 17:17 | #5 |
Участник
|
В контексте кода на Х++ я уже встречал использование функций enum2Value(NoYes::Yes), enum2str(NoYes::Yes) и т.п. но из конфигуратора я же не могу обращаться к функциям, только к методам класса, объявленного как класс или объект. А найти класс в котором эти функции реализованы как методы мне не удалось.
Может Вы знаете в каком классе это реализовано? В Global их точно нет. |
|
20.03.2023, 17:25 | #6 |
Участник
|
enum2Value - в GLobal, enum2str в системных функциях (версия 2012 R3)
|
|
21.03.2023, 09:44 | #7 |
Участник
|
|
|
21.03.2023, 10:46 | #8 |
Участник
|
Вот скриншот с абсолютно чистой аксапты с Global
PS Да видно что этот движок подтягивает далеко не весь Global. Уж как выбирает - не знаю. Может коллеги подскажут Последний раз редактировалось LETTO; 21.03.2023 в 10:58. |
|
21.03.2023, 19:32 | #9 |
Участник
|
Предположу, не глядя сильно в код что систему смущает anytype.
Обоснований можно придумать сотню как и способов обхода. На MS с исправлением не надеялся бы. |
|
22.03.2023, 16:24 | #10 |
Участник
|
Можно предположить, что в форме Конструктора ER "пропускаются" те методы классов, у которых тип параметра void/anytype. Может синтакс-контроль Конструктора не умеет такие ситуации корректно обрабатывать.
Но к сожалению способов обхода я придумать не могу, если иметь ввиду действия в интерфейсе модуля ER. |
|
22.03.2023, 23:34 | #11 |
Участник
|
Цитата:
В идеологии первых копателей-создателей ER собственно стояла идея что весь слой логики отчетов будет на стороне ER так как хотели/хотят сделать это отдельным сервисом. Поэтому полагаться на какие то метки и код из Ax концептуально -зло. |
|