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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.06.2025, 11:21   #1  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
321 / 893 (30) +++++++
Регистрация: 23.10.2012
Переменная типа специфического перечисления
Здравствуйте.
Создаю функцию для получения переменной перечисления из formComboBoxControl'a результатом работы должен быть anyType.
Проблема в сценарии, когда у контрола заполен enumType. Функция selection возвращает int - тип данных не соответствует первоначальному.
Логично использовать функцию enumType в связке с selection для получения нужного значения.
В Аксапте есть функция str2num, которая позволяет получить переменную типа специфического перечисления. Однако, первым параметром вызова она уже ожидает переменную типа целевого перечисления.
Если у контрола заполнен extendedDataType - никакой здесь проблемы нет:
X++:
anyType ret = new Dictionary().typeObject(_formComboBoxControl.extendedDataType()).getValue();
ret = _formComboBoxControl.selection();
Можно, конечно, воспользоваться runBuf, но хочется найти способ попроще.
Старый 04.06.2025, 13:09   #2  
axm2017 is offline
axm2017
Участник
 
2,065 / 296 (14) ++++++
Регистрация: 15.05.2017
Неочевидно что вы хотите.
Плясать имхо стоит от selection
Вы можете зная selection определить значение / метку что соответствует выбранному и потом уже по ней найти соответствующее значение в типе
Старый 04.06.2025, 15:42   #3  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
321 / 893 (30) +++++++
Регистрация: 23.10.2012
any2enum - пробовал, из int (formComboBox.selection()) не получится enum.
Решение придумал на основании похожей ветки, где нужно было из anyType получить enumId (Как получить из элемента enum-а код типа (enum-а)?).

Не удалось придумать что-то проще, чем "закат солнца":
X++:
    str strHexBigToLittleEndian(str _hexStr)
    {
        str ret;
        int jMax = strLen(_hexStr),
            j    = jMax;
        #DEFINE.NEXTCHAR(1)
        #DEFINE.OFFSET(2)
        ;
        
        while (j >= #OFFSET)
        {
            ret += subStr(_hexStr, j - #NEXTCHAR, #OFFSET);
        
            j -= #OFFSET;
        }

        return ret;
    }
X++:
    anyType int2enum(enumId _enumId, int _value)
    {
        #DEFINE.BLOBFORMAT('07fd04\%1ff')
        #DEFINE.ENUMIDOFFSET(8)
        #DEFINE.ENUMIDX(1)
        #DEFINE.HEXWIDTH(6)
        str blobStr = strFmt(#BLOBFORMAT, strHexBigToLittleEndian(int2hex(_enumId << #ENUMIDOFFSET | _value, #HEXWIDTH)));
        ;

        return conPeek(ContainerClass::blob2Container(BinData::stringToData(blobStr)), #ENUMIDX);
    }
Соответственно, вызов: value2enum(formComboBox.enumType(), formComboBox.selection()); тип, в данном случае, переменной будет сохранён.
Конечно, на тему быстродействия заикаться не приходится, ну для разовых операций - вполне.

Последний раз редактировалось Товарищ ♂uatr; 04.06.2025 в 16:03.
За это сообщение автора поблагодарили: S.Kuskov (5), Logger (5).
Старый 04.06.2025, 15:16   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,448 / 1789 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Товарищ ♂uatr Посмотреть сообщение
Функция selection возвращает int - тип данных не соответствует первоначальному.
А не поможет обернуть значение в функцию any2enum()?
Теги
dictenum::value2id(), enum

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Условие в SQL-запросе на поле типа перечисление (Enum) Metrofun DAX: Программирование 6 12.05.2020 17:49
Как получить из элемента enum-а код типа (enum-а)? Romb DAX: База знаний и проекты 12 27.06.2013 16:17
Info: ID полей таблицы типа EDT массив (array elements) SHiSHok DAX: Программирование 4 20.12.2010 12:44
Как получить имя типа расширенного типа velk DAX: Программирование 9 03.08.2006 14:17
Создание нового типа журнала в Управлении запасами vasiliy DAX: Программирование 2 03.11.2005 14:46

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

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

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