04.08.2014, 18:38 | #1 |
Участник
|
Есть ли разница: присоединить 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 |
Участник
|
a) Никакой. Разве что можно в коде ошибок наделать, а вдизайне тяжелее
б) Добавте датасоурс, тогда можно будет по ним фильтровать. Если хотите дисплей методы закешируйте их на init() this.cacheAddMethod() |
|
04.08.2014, 19:13 | #3 |
Участник
|
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 |
Участник
|
Ему все равно ее надо джоинить в пункте 1 так что вопрос про пункт 2 отпадает как бы сам по себе, я про кеширование - вдруг ему захочется дисплей методов
|
|
05.08.2014, 09:38 | #5 |
Administrator
|
Цитата:
Сообщение от 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 формы | 9 | |||
Дизайн формы: Скролл-панель | 4 | |||
обращение к методам датасоурса формы из класса | 5 | |||
что-такое "<имя-формы>_ds"? | 3 | |||
Элемент формы - Таблица, есть ли дока? | 0 |
|