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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.07.2020, 13:41   #1  
oleggy is offline
oleggy
Участник
 
276 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
как программно получить список всех наименований / значений у Enum
Подскажите как зная название только поля таблицы и саму таблицу определить через Job какой Enum используется для данного поля?
А дальше зная этот Enum получить список всех возможных значений этого Enum с наименованием.
Это в рамках Job можно как то получить? Или только вручную
Старый 22.07.2020, 14:03   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Перебрать элементы Енум
За это сообщение автора поблагодарили: oleggy (1).
Старый 22.07.2020, 14:11   #3  
oleggy is offline
oleggy
Участник
 
276 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
А как зная название поля и названия таблицы определить есть ли у этого поля Enum и само enumnum этого енум можно как то получить?

Это нужно разработчикам которые не занимаются AX и лазить по системе не умеют. Хочу Job написать что бы сами могли информацию получать.
Старый 22.07.2020, 14:33   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Как получить имя типа расширенного типа

только вам нужен будет не dictField.typeId(), а dictField.enumId() если dictField.baseType() == Types::Enum

Последний раз редактировалось S.Kuskov; 22.07.2020 в 14:36.
Старый 22.07.2020, 15:20   #5  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
How to see enum values in D365
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: wojzeh (3).
Старый 23.07.2020, 18:12   #6  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
сначала 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  
oleggy is offline
oleggy
Участник
 
276 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
.
Старый 13.08.2020, 21:18   #8  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от 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));
        }

    }
Если уж используешь value2Symbol, тогда в качестве максимального значения счетчика цикла надо ставить 255. Иначе если есть разрывы в значениях, то просто все значения не получишь

Т.е. или в цикле i < policyRuleTypeEnum.values(), но тогда внутри policyRuleTypeEnum.index2Value(i)

Или внутри цикла policyRuleTypeEnum.value2Symbol(i), но тогда в самом цикле I < 255

Для примера, подставь Base Enum с именем UtilElementType. Он как раз на 100 элементах и завершит работу, несмотря на тот факт, что есть значения и больше 100
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 14.08.2020, 05:42   #9  
oleggy is offline
oleggy
Участник
 
276 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
в цикле i < policyRuleTypeEnum.values(), но тогда внутри policyRuleTypeEnum.index2Value(i)
Или внутри цикла policyRuleTypeEnum
А как вывести системное название текущего значения Enum если в цикле используешь values() ?
Действительно 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  
oleggy is offline
oleggy
Участник
 
276 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
Цитата:
Сообщение от oleggy Посмотреть сообщение
А как вывести системное название текущего значения Enum если в цикле используешь values() ?
Разобрался.

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));
        }
Теги
enum

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Программно получить обороты по счету propeller DAX: Программирование 13 09.06.2011 14:13
Как программно получить стек вызовов? Bega DAX: Программирование 2 22.12.2010 18:46
Как получить метки всех элементов всех форм (DAX 4) Qaz Qwerty DAX: Программирование 1 09.08.2008 05:39
Как получить список файлов заданной папки demetra DAX: База знаний и проекты 3 01.11.2006 14:51
Список всех окон Artild DAX: Программирование 1 25.06.2003 13:20

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

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

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