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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.03.2023, 17:15   #1  
Libovs is offline
Libovs
Участник
 
224 / 53 (2) ++++
Регистрация: 26.03.2018
Как получить 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  
Pandasama is offline
Pandasama
Участник
 
457 / 137 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
Цитата:
Но как получить для значения enum-а его index или value
А что вы под значением энума понимаете? NoYes::Yes - это как раз integer
Старый 20.03.2023, 09:46   #3  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,699 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 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  
Libovs is offline
Libovs
Участник
 
224 / 53 (2) ++++
Регистрация: 26.03.2018
Зачем это нужно:

в модели создал 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  
Libovs is offline
Libovs
Участник
 
224 / 53 (2) ++++
Регистрация: 26.03.2018
В контексте кода на Х++ я уже встречал использование функций enum2Value(NoYes::Yes), enum2str(NoYes::Yes) и т.п. но из конфигуратора я же не могу обращаться к функциям, только к методам класса, объявленного как класс или объект. А найти класс в котором эти функции реализованы как методы мне не удалось.
Может Вы знаете в каком классе это реализовано? В Global их точно нет.
Старый 20.03.2023, 17:25   #6  
LETTO is offline
LETTO
Участник
 
318 / 64 (3) ++++
Регистрация: 14.07.2022
Цитата:
Сообщение от Libovs Посмотреть сообщение
В контексте кода на Х++ я уже встречал использование функций enum2Value(NoYes::Yes), enum2str(NoYes::Yes) А найти класс в котором эти функции реализованы как методы мне не удалось.
Может Вы знаете в каком классе это реализовано? В Global их точно нет.
enum2Value - в GLobal, enum2str в системных функциях (версия 2012 R3)
Старый 21.03.2023, 09:44   #7  
Libovs is offline
Libovs
Участник
 
224 / 53 (2) ++++
Регистрация: 26.03.2018
Так нет в Global такого метода Нажмите на изображение для увеличения
Название: Global.jpg
Просмотров: 42
Размер:	110.3 Кб
ID:	13553
Старый 21.03.2023, 10:46   #8  
LETTO is offline
LETTO
Участник
 
318 / 64 (3) ++++
Регистрация: 14.07.2022
Вот скриншот с абсолютно чистой аксапты с Global

PS Да видно что этот движок подтягивает далеко не весь Global. Уж как выбирает - не знаю. Может коллеги подскажут
Изображения
Тип файла: bmp enum2value.bmp (284.9 Кб, 60 просмотров)

Последний раз редактировалось LETTO; 21.03.2023 в 10:58.
Старый 21.03.2023, 19:32   #9  
axm2017 is offline
axm2017
Участник
 
1,908 / 308 (14) ++++++
Регистрация: 15.05.2017
Предположу, не глядя сильно в код что систему смущает anytype.
Обоснований можно придумать сотню как и способов обхода. На MS с исправлением не надеялся бы.
Старый 22.03.2023, 16:24   #10  
Libovs is offline
Libovs
Участник
 
224 / 53 (2) ++++
Регистрация: 26.03.2018
Можно предположить, что в форме Конструктора ER "пропускаются" те методы классов, у которых тип параметра void/anytype. Может синтакс-контроль Конструктора не умеет такие ситуации корректно обрабатывать.
Но к сожалению способов обхода я придумать не могу, если иметь ввиду действия в интерфейсе модуля ER.
Старый 22.03.2023, 23:34   #11  
axm2017 is offline
axm2017
Участник
 
1,908 / 308 (14) ++++++
Регистрация: 15.05.2017
Цитата:
Сообщение от Libovs Посмотреть сообщение
Но к сожалению способов обхода я придумать не могу, если иметь ввиду действия в интерфейсе модуля ER.
Придумать наверное можно с помощью комбинаций функций без anytype но зачем если можно сделать хоть и слегка топорно.

В идеологии первых копателей-создателей ER собственно стояла идея что весь слой логики отчетов будет на стороне ER так как хотели/хотят сделать это отдельным сервисом. Поэтому полагаться на какие то метки и код из Ax концептуально -зло.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Программно получить label элемента Base Enuma r2d2 DAX: Программирование 2 09.02.2015 12:15
Как программно получить Label MenuItem lkirien DAX: Программирование 4 29.04.2011 09:17
emeadaxsupport: How label flushing works under the hood Blog bot DAX Blogs 0 17.08.2010 16:05
Как получить Label, использованный в текстовом поле отчета? (DAX 4) eugenet DAX: Программирование 8 19.02.2010 18:34
получить label display - метода NetBus DAX: Программирование 2 05.06.2009 19:08
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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