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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.04.2012, 16:17   #13  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,449 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Я правильно понимаю, что список контейнеров в данном случае - это способ организации хранения/передачи неоднородной структуры.

При работе с неоднородными структурами нужно помнить, что какой бы неоднородной не была бы структура данных вы же всё равно будете обрабатывать её по заранее определённым правилам. Так зачем же тогда создавать иллюзию универсальности если правила обработки фиксированы и предопределены.

Я бы данную структуру данных преобразовал бы в список классов (List = new List(Types::Class)) поместил бы этот список в класс обёртку, который бы контролировал типы хранящихся в списке значений. Для представления элементов списка сделал бы иерархию классов: Базовый класс представляет общий интерфейс для формирования вкладки, а его наследники реализуют каждый конкретный способ организации вкладки. Для удобства использования можно добавить статические методы, создающие экземпляры необходимых классов. После всего этого привидённый вами код мог бы выглядеть например так

X++:
Lookup = new Lookup();
Lookup.addTab(Lookup::newdatasource(tablenum(InventTable), fieldnum(InventTable, ItemName));
Lookup.addTab(Lookup::newdatasourcequery(tablenum(InventTable), query.pack(), fieldnum(InventTable, ItemId));
Lookup.addTab(Lookup::newdatasourcetmp(tablenum(anytable), anytable, fieldnum(anytable, anyfield));
Lookup.parmCaller(this);
Lookup.run();
Конечнор всё это требует глобального перестроения существующей архитектуры. Если оставлять существующую архитктуру решения, то можно по крайней мере заменить контейнер на чтонибудь более гибкое. Например Struct
X++:
List param = new List(Types::Class);
Struct Struct;

Struct = new Struct();
Struct.add("type", "newdatasource");
Struct.add("tablenum", tablenum(InventTable));
Struct.add("fieldnum", fieldnum(InventTable, ItemName));
List.addEnd(Struct);

Struct = new Struct();
Struct.add("type", "newdatasourcequery");
Struct.add("tablenum", tablenum(InventTable));
Struct.add("query", query);
Struct.add("fieldnum", fieldnum(InventTable, ItemId));
List.addEnd(Struct);

Struct = new Struct();
Struct.add("type", "newdatasourcetmp");
Struct.add("tablenum", tablenum(anytable));
Struct.add("cursor", anytable);
Struct.add("fieldnum", fieldnum(anytable, anyfield));
List.addEnd(Struct);

Lookup::run(param, this);
P.S.: О способах структурирования данных интересная ветка есть Как правильно хранить статичный набор начальных данных в классах?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Таблица, расширенный тип данных, базовый перечислимый тип или класс, вызванные test_Sdelka, уже существуют. Импортирование Table прервано. Poleax DAX: Программирование 4 17.05.2011 17:57
Временная таблица Antoncheg DAX: Программирование 21 15.08.2008 18:25
Чтение данных за пределами файла, временная таблица zemlyn DAX: Программирование 0 05.12.2005 18:32
Форма - источник данных - таблица nikbik DAX: Программирование 2 26.09.2005 10:51
select sum(amount) from временная таблица ATimTim DAX: Программирование 6 11.06.2004 14:16

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

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

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