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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.12.2011, 18:02   #1  
alvares is offline
alvares
Участник
 
45 / 12 (1) ++
Регистрация: 27.10.2011
QueryRun, получить field квери по имени
Вечер добрый.

Есть большая QueryRun в АОТ, состоящая из 5 таблиц.
Есть табличка с пользовательскими форматами (для различных экспортов), где определяются поля из той большой квери и их порядок вывода. Табличку заполняли руками

Вопрос: как в цикле получить поле из квери зная имя поля и имя DS, чтобы не писать switch и не обрабатывать руками?

Спасибо.
Старый 20.12.2011, 18:40   #2  
alvares is offline
alvares
Участник
 
45 / 12 (1) ++
Регистрация: 27.10.2011
Спасибо _scorp_ подсказал что есть замечательный способ доступа к полям курсора через
X++:
cursor.(fieldname2id(tablenum(Table), 'ItemId'));
Старый 20.12.2011, 21:04   #3  
pedrozzz is offline
pedrozzz
Молодой, подающий надежды
Аватар для pedrozzz
MCBMSS
Лучший по профессии 2015
 
164 / 218 (8) ++++++
Регистрация: 18.02.2010
Адрес: Краснодар
Можно проще:
X++:
cursor.(fieldnum(Table, Field))
За это сообщение автора поблагодарили: alvares (1).
Старый 21.12.2011, 08:14   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от pedrozzz Посмотреть сообщение
Можно проще:
X++:
cursor.(fieldnum(Table, Field))
Это только если на этапе компиляции знаешь имя поля.
Но если это так, то тогда можно ещё проще
X++:
cursor.Field

Последний раз редактировалось S.Kuskov; 21.12.2011 в 08:35.
Старый 21.12.2011, 10:37   #5  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Это только если на этапе компиляции знаешь имя поля.
Но если это так, то тогда можно ещё проще
X++:
cursor.Field
Это только если на момент компиляции cursor - конкретная таблица\мап.
Возможно - это Common. Смотря как организовать цикл - автор не уточняет...
__________________
Zhirenkov Vitaly
Старый 21.12.2011, 11:52   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от ZVV Посмотреть сообщение
Это только если на момент компиляции cursor - конкретная таблица\мап.
Возможно - это Common. Смотря как организовать цикл - автор не уточняет...
Использование метафункции fieldnum всё-таки подразумевает, что и имя таблицы так же известно на этапе компиляциии. А если так, то любой обезличенный курсор можно типизировать простым присваиванием.
X++:
MyTable MyTable;

MyTable = common; // типизируем "обезличенный" курсор
MyTable.Field // вуаля
В общем, я не вижу причин для использования такой конструкции cursor.(fieldnum(Table, Field)) .

P.S.: Кроме может быть обхода ошибки компиляции "Поле должно быть элементом данных, допускающим использование в операторе присвоения." при присваивании значений системным полям
Старый 21.12.2011, 12:19   #7  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Просто как я понял ситуацию автора:

- есть квериРан с рядом таблиц и есть настроечная таблица в которой есть данные типа Таблица+Поле - данные поля должны быть взяты из нашего квериРана и куда-то выведены
- есть цикл по этим таблицам внутри цикла по квериРану, т.к. автор не хочет писать явных свитчей, то соответсвенно он не хочет писать и явной типизации курсоров.
т.е. он последовательно получит ряд нетипизированных курсоров. Сравнит TableId. Выведет поле.
И в общем случае большого кол-ва таблиц в квере вероятно он прав.

Как-то так.

Upd: Т.е. в данном случае понятно, что функция fieldnum в чистом виде ему не нужна, а скорее понадобится fieldName2Id или что-то в этом роде, зависит от реализации.
Но сути это сильно не меняет...
__________________
Zhirenkov Vitaly

Последний раз редактировалось ZVV; 21.12.2011 в 12:23.
За это сообщение автора поблагодарили: S.Kuskov (2), alvares (1).
Старый 21.12.2011, 19:10   #8  
alvares is offline
alvares
Участник
 
45 / 12 (1) ++
Регистрация: 27.10.2011
Цитата:
Сообщение от ZVV Посмотреть сообщение
Просто как я понял ситуацию автора:

- есть квериРан с рядом таблиц и есть настроечная таблица в которой есть данные типа Таблица+Поле - данные поля должны быть взяты из нашего квериРана и куда-то выведены
- есть цикл по этим таблицам внутри цикла по квериРану, т.к. автор не хочет писать явных свитчей, то соответсвенно он не хочет писать и явной типизации курсоров.
т.е. он последовательно получит ряд нетипизированных курсоров. Сравнит TableId. Выведет поле.
И в общем случае большого кол-ва таблиц в квере вероятно он прав.

Как-то так.

Upd: Т.е. в данном случае понятно, что функция fieldnum в чистом виде ему не нужна, а скорее понадобится fieldName2Id или что-то в этом роде, зависит от реализации.
Но сути это сильно не меняет...
Да, ситуация совершенно верно описана, не хотелось писать много кода, а про fieldName2Id не знал

Ведь к DS мы может обратиться через его имя (строку),
X++:
qbds = query.dataSourceName('NameDS');
а с полями искал способ типа:
X++:
cursor.fieldName('Field1');
Всем спасибо за помощь.
Старый 21.12.2011, 19:55   #9  
pedrozzz is offline
pedrozzz
Молодой, подающий надежды
Аватар для pedrozzz
MCBMSS
Лучший по профессии 2015
 
164 / 218 (8) ++++++
Регистрация: 18.02.2010
Адрес: Краснодар
fieldName2Id() возможен, если во всех таблицах поля имеют одинаковое название. Если в названии по сути одинаковых полей имеются вариации (возможно не сейчас, но в будущее тоже стоит смотреть), то лучше наверное создать Map с необходимым набором полей и замапить все необходимые таблицы. В цикле присваивать значение мапу и делать просто:
X++:
cursor.Field
Теги
queryrun

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Получить Transact-SQL из QueryRun imir DAX: Программирование 12 21.12.2011 16:45
axaptapedia: Table Field Group Blog bot DAX Blogs 0 02.07.2011 05:37
axaptapedia: Table Field Group Blog bot DAX Blogs 0 25.06.2011 06:33
Халтура в AX2009: идентификаторы из USR в GLS, GLP и даже SYS-слоях EVGL DAX: Программирование 2 21.02.2011 19:44
DynamicsAxSCM: The InventTrans table. Explore various field usages. Blog bot DAX Blogs 0 09.11.2010 19:10

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

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

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