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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.03.2006, 14:38   #1  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2480 (88) +++++++++
Регистрация: 20.08.2005
Заднепроходно, но могу предложить такой вариант
X++:
static void Job90(Args _args)
{
    EnumId  GetEnumId(AnyType enum)
    {
        ContainerClass  contClass;
        str             sEnum;
        EnumId          enumId = 0;
        ;
        if (typeOf(enum) != Types::Enum)
            return 0;

        contClass = New ContainerClass([enum]);
        sEnum = BinData::dataToString(contClass.toBlob());
        if (sEnum && strlen(sEnum) == 12)
        {
            if (hex2int(substr(sEnum, 1, 2)) == 0x07 && hex2int(substr(sEnum, 3, 2)) == 0x04)
            {
                enumId = (hex2int(substr(sEnum, 9, 2)) << 8) | hex2int(substr(sEnum, 7, 2));
            }
        }
        return enumId;
    }
    ;
    info(int2str(enumnum(NoYesCombo)));
    info(int2str(GetEnumId(NoYesCombo::No)));
}
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Logger (5), Borsugg (0).
Старый 02.03.2006, 10:44   #2  
Romb is offline
Romb
Участник
Аватар для Romb
 
79 / 22 (1) +++
Регистрация: 06.01.2004
!!!
Excellent! Работает!
Я был 100% уверен, что внутренний формат представления элемента enum-a - простое целое число, из которого конечно никак не получишь свойства элемента enum-a без указания самого enuma. Видимо ошибался.

Andy большое спасибо!
Один вопрос, где можно узнать/почитать о вариантах использования продемонстрированной мистической кухни (см. ниже):

PHP код:

if (hex2int(substr(sEnum12)) == 0x07 && hex2int(substr(sEnum32)) == 0x04)
{
    
enumId = (hex2int(substr(sEnum92)) << 8) | hex2int(substr(sEnum72));

2Dn. Да, спасибо. Именно это я и пытался сказать.
За это сообщение автора поблагодарили: Borsugg (0).
Старый 05.08.2011, 18:05   #3  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,971 / 3267 (116) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от AndyD Посмотреть сообщение
Заднепроходно, но могу предложить такой вариант
AndyD, а возможно таким способом определить dataareaID табличного буфера в контейнере ?

А то в Аксапте есть прикольный глюк. Если из контейнера достаешь буфер, то он всегда а dataareaid содержит код текущей компании.

Причем влияет даже на отладчик.
Т.е.
1. берем буфер.
2. Кладем в контейнер.
3. Переключаемся в другую компанию.
4. делаем conpeek - опаньки код компании текущий, а не исходный.
5. Если смотрим содержимое контейнера из под отладчика - то тоже самое - показывает не реальный а текущий код компании.

В 3-ке еще такой фигней страдал метод xRecord.data() - констрактил дубликат со значением dataareaid из текущей компании. В 2009-й его поправили - сохраняет исходное значение.
Старый 07.08.2011, 15:51   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2480 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от Logger Посмотреть сообщение
AndyD, а возможно таким способом определить dataareaID табличного буфера в контейнере ?
Угум.

Только из-за формата упакованной записи невозможно извлечь значение только одного поля (если оно не первое в записи). Так что, как побочный продукт, получился класс, извлекающий значения всех полей из контейнера и возвращающий табличную переменную с этими значениям.

Во вложении - варианты класса Container2Record для тройки и DAX2009

Класс поддерживает любые типы полей, в том числе контейнерные, содержащие другие контейнеры и BLOB-данные, а так же, для DAX2009, типы int64, guid и UtcDateTime.

При создании табличной переменной (метод Container2Record.record()) в нужной компании в DAX2009 используется changeCompany(). В трешке - метод company()

Так же, возможно получение идентификатора компании через метод Container2Record.DataAreaId() или через статический метод Container2Record:: DataAreaIdFromCon()

PS Подобный вопрос разбирался для получения данных в упакованном поле на MS SQL - Вопрос ConPeek
Вложения
Тип файла: zip Container2Record.zip (9.3 Кб, 221 просмотров)
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Logger (15).
Старый 27.06.2013, 16:17   #5  
mista is offline
mista
Участник
 
8 / 20 (1) +++
Регистрация: 03.09.2007
Адрес: Switzerland
DictEnum::value2id()
За это сообщение автора поблагодарили: Logger (3), gl00mie (3).
Теги
ax2009, ax3.0, enum

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Можно сделать lookup по полю типа Base Enum? Hidden DAX: Программирование 25 04.10.2017 13:06
multiselect при lookup-е значения типа enum nebula DAX: Программирование 4 14.12.2006 18:56
Получить код метки узла Enum-а MironovI DAX: Программирование 2 23.11.2006 15:24
Как получить имя типа расширенного типа velk DAX: Программирование 9 03.08.2006 14:17
Каким образом можно получить код для работы в конкретном слое ? Андре DAX: Функционал 9 18.02.2003 15:58

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

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

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