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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.08.2014, 18:38   #1  
kitty is offline
kitty
Участник
 
370 / 30 (2) +++
Регистрация: 24.05.2005
Есть ли разница: присоединить DS в init или добавить в дизайн формы?
есть форма, на ней две таблицы Primary Table, ChildTable( связана с PrimaryTable по foreightKey ParentId)
Данные выводятся из ChildTable в грид
На PrimaryTable накладывается доп фильтр
Собственно, все ..

a) Какая разница добалю я PrimaryTable в дизайн формы или просто присоединю к ChildTable в init() датасоурса ChildTable?

b) Если на гриде вместе с полями из ChildTable нужно вывести будет 3 поля из PrimaryTable,то лучше добавить 3 дисплей метода или добавить PrimaryTable в датасорсы формы и потом добавить 3 поля из нее на грид?
Что смущает: в Primary Table всего только 9 полей, т.е данных не много будет тянуться, если добавить таблицу по Join. А вот если добавлю 3 дисплей метода, то на каждый метод будет по запросу отсылаться на сервер, что не оч хорошо..

c) Почему в стандарте обычно в init датасоурса , query пересоздается с нуля?
Например, если на форме датасоцрс inventTable. Почему в его init вместо добавления доп таблиц и критериев к уже имеющемуся запросу по inventTable, запрос создается с нуля заново (т.е q = new query(). a.addDataSource (inventTable) ... ) и потом все, что получилось запихивается обратно через this.query(q)...

Последний раз редактировалось kitty; 04.08.2014 в 18:56.
Старый 04.08.2014, 18:57   #2  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
a) Никакой. Разве что можно в коде ошибок наделать, а вдизайне тяжелее
б) Добавте датасоурс, тогда можно будет по ним фильтровать. Если хотите дисплей методы закешируйте их на init() this.cacheAddMethod()
Старый 04.08.2014, 19:13   #3  
kitty is offline
kitty
Участник
 
370 / 30 (2) +++
Регистрация: 24.05.2005
b) для меня не очевидно, что присоединить по innerJoin ParentTable и показывать из него 3 поля более накладно, чем закэшированные 3 дисплей метода.
Каждый display метод по сути - перед кэшированием был подсчитан отдельным запросом по parent Table.
Т.е имеем: если в таблице Child N записей это 1 запрос +3 запроса к каждой записи для подсчета display = 3N+1 запросов.
В то время как присоединенный parentTable recordset так и будет 1 запрос (вытягивающий N записей из child+joined parent, только данных будет возвращать на клиент чуть больше.
Старый 04.08.2014, 20:19   #4  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Ему все равно ее надо джоинить в пункте 1 так что вопрос про пункт 2 отпадает как бы сам по себе, я про кеширование - вдруг ему захочется дисплей методов
Старый 05.08.2014, 09:38   #5  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Сообщение от kitty Посмотреть сообщение
c) Почему в стандарте обычно в init датасоурса , query пересоздается с нуля?
Например, если на форме датасоцрс inventTable. Почему в его init вместо добавления доп таблиц и критериев к уже имеющемуся запросу по inventTable, запрос создается с нуля заново (т.е q = new query(). a.addDataSource (inventTable) ... ) и потом все, что получилось запихивается обратно через this.query(q)...
В большинстве случаев такой код написан по незнанию. Несмотря на то, что он стандартный. Майкрософт, очевидно, тоже увлёкся экономией на программистах.

При пересоздании query теряются динамические связи между формами (да, их тоже можно снова добавить, но обычно разработчики об этом забывают). Кроме того, если query в init() пересоздаётся заново, то в дальнейшем могут возникнуть сложности с добавлением в эту форму функциональности. Например, если вы захотите добавить ещё один data source, то придётся модифицировать метод init(). А модифицированный метод стандартного приложения - это автоматически плюс несколько минут ко времени, которое требуется для установки хотфикса или сервис-пака.

В общем, не пересоздавайте query в init(), это плохой тон. А для примеров старайтесь искать более ранний код в стандартном приложении. Лет пять назад разработчики аксапты не только читали best practice, но и применяли на практике. Посмотрите, например, классы InventDimCtrl_Frm.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
За это сообщение автора поблагодарили: S.Kuskov (5).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Создание Lookup формы Maxim Gorbunov DAX: База знаний и проекты 9 26.06.2007 16:44
Дизайн формы: Скролл-панель if_maks DAX: Программирование 4 11.11.2004 10:36
обращение к методам датасоурса формы из класса simply DAX: Программирование 5 03.06.2004 12:02
что-такое "<имя-формы>_ds"? Valia DAX: Программирование 3 21.08.2003 10:48
Элемент формы - Таблица, есть ли дока? skof DAX: Программирование 0 24.06.2002 13:27

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

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

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