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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.12.2010, 14:45   #1  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
Info: ID полей таблицы типа EDT массив (array elements)
Возможно будет полезно (для DAX 3.0 kr3):

Значение ID для элементов массива поля типа EDT массив находятся в диапазоне выше 65535 (word). Механика ID следующая:

1. ID поля таблицы типа EDT массив имеет значение ID в соответствующем слою диапазоне (в пределах значений типа unsigned word).
2. Элементы массива такого поля (например dimension[1]) тоже имеют свой ID который формируется следующим образом: <№ измерения>*65536+<ID поля> и, который можно узнать с помощью функции FieldName2ID. Другими словами ID полей таблицы имеют как минимум 3х байтовую структуру (а скорее всего dword), где старший байт является номером элемента массива, а младший – ID поля (без индекса)

Пример: id измерения dimension[2] в custTable = 2*65536+ fieldNum(custTable,dimension) = FieldName2ID( tableNum(custTable),"dimension[2]")
__________________
--- SHiSHok
Старый 18.12.2010, 15:06   #2  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Да, так и есть.
Только вместо умножения и сложения можно использовать сдвиг и дизнъюнкцию битов. Например, методы fieldId2Ext и fieldExt2Id класса Global.

Последний раз редактировалось Raven Melancholic; 18.12.2010 в 15:21.
Старый 18.12.2010, 15:09   #3  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
X++:
fieldId2Ext(fieldNum(CustTable, Dimension), 2);
Старый 18.12.2010, 16:04   #4  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от SHiSHok Посмотреть сообщение
Значение ID для элементов массива поля типа EDT массив находятся в диапазоне выше 65535 (word).
Не только ...
Многие методы, возвращающие код поля таблицы, (на контролах, источниках данных и пр.) и для обычных, "немассивных", полей, да и даже без EDT , возвращают 4-байтовое целое число, старшее слово которого является индексом массива, младшее - ID поля в репозитарии.

<ID поля> & 0x0000FFFF = ID поля в репозитарии
<ID поля> & 0xFFFF0000 >> 16 = Индекс поля в массиве EDT, для "немассивных" всегда 1
__________________
Мы летаем, кружимся, нагоняем ужасы ...

Последний раз редактировалось TasmanianDevil; 18.12.2010 в 16:15.
Старый 20.12.2010, 12:44   #5  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
спасибо за информацию о существующих методах. Нашел 3 метода в классе Global:
X++:
static fieldId    fieldId2Ext (fieldId  fieldId, ArrayIdx arrayIndex)  // Returns an extended FieldId, based on the fieldId and the Array index
static int        fieldExt2Idx (fieldId fieldExtId)  // Returns the Array index part of an extended FieldId
static fieldId    fieldExt2Id (fieldId fieldExtId)  // Returns the fieldId part of an extended FieldId
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
<ID поля> & 0xFFFF0000 >> 16 = Индекс поля в массиве EDT, для "немассивных" всегда 1
для "немассивных" полей в таблице, а также для поля типа массив без указания индекса старшее слово = 0, если ж будет 1, то значения Id будут больше 65535.
__________________
--- SHiSHok

Последний раз редактировалось SHiSHok; 20.12.2010 в 12:58.
Теги
array, fieldid, table

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как сильно модифицировано ваше приложение Аксапты? mazzy DAX: Прочие вопросы 30 14.04.2011 17:26
Зачем нужно поле для хранения временной зоны для значений полей типа UtcDateTime? gl00mie DAX: Функционал 4 28.11.2010 19:58
Значение по умолчанию параметра типа EDT c array elements либо просто массива HorrR DAX: Программирование 16 20.02.2008 19:18
Каким образом выцепить айдишку или текстовую репрезентацию EDT поля таблицы. HorrR DAX: Программирование 8 18.02.2008 15:45
Вылетает аxапта 4.0 при завершении работы Delfins DAX: Прочие вопросы 5 27.06.2007 15:43

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

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

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