|
![]() |
#1 |
Участник
|
Заднепроходно, но могу предложить такой вариант
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). |
![]() |
#2 |
Участник
|
!!!
Excellent! Работает!
Я был 100% уверен, что внутренний формат представления элемента enum-a - простое целое число, из которого конечно никак не получишь свойства элемента enum-a без указания самого enuma. Видимо ошибался. Andy большое спасибо! Один вопрос, где можно узнать/почитать о вариантах использования продемонстрированной мистической кухни (см. ниже): PHP код:
|
|
|
За это сообщение автора поблагодарили: Borsugg (0). |
![]() |
#3 |
Участник
|
AndyD, а возможно таким способом определить dataareaID табличного буфера в контейнере ?
А то в Аксапте есть прикольный глюк. Если из контейнера достаешь буфер, то он всегда а dataareaid содержит код текущей компании. Причем влияет даже на отладчик. Т.е. 1. берем буфер. 2. Кладем в контейнер. 3. Переключаемся в другую компанию. 4. делаем conpeek - опаньки код компании текущий, а не исходный. 5. Если смотрим содержимое контейнера из под отладчика - то тоже самое - показывает не реальный а текущий код компании. В 3-ке еще такой фигней страдал метод xRecord.data() - констрактил дубликат со значением dataareaid из текущей компании. В 2009-й его поправили - сохраняет исходное значение. |
|
![]() |
#4 |
Участник
|
Цитата:
Только из-за формата упакованной записи невозможно извлечь значение только одного поля (если оно не первое в записи ![]() Во вложении - варианты класса Container2Record для тройки и DAX2009 Класс поддерживает любые типы полей, в том числе контейнерные, содержащие другие контейнеры и BLOB-данные, а так же, для DAX2009, типы int64, guid и UtcDateTime. При создании табличной переменной (метод Container2Record.record()) в нужной компании в DAX2009 используется changeCompany(). В трешке - метод company() Так же, возможно получение идентификатора компании через метод Container2Record.DataAreaId() или через статический метод Container2Record:: DataAreaIdFromCon() PS Подобный вопрос разбирался для получения данных в упакованном поле на MS SQL - Вопрос ConPeek
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: Logger (15). |
![]() |
#5 |
Участник
|
DictEnum::value2id()
|
|
|
За это сообщение автора поблагодарили: Logger (3), gl00mie (3). |