10.05.2007, 17:45 | #1 |
SAP
|
Динамически join Data Sources
Есть две таблицы HeadTable и LineTable. Есть форма на которую добавлены 2-е эти таблицы. Хочу по кнопочке ну к примеру join их связать.
Как это лучше сделать? делаю по нажатии кнопочки вот так X++: lineTable_ds.query().dataSourceNo(1).addDynalink(fieldnum(LineTable, Key), headTable, fieldnum(HeadTable, key)); Как правильней это сделать? |
|
10.05.2007, 18:31 | #2 |
Microsoft Dynamics
|
Хм, а почему бы не там же в кликде кнопки вызвать екзекьютКвери?
|
|
11.05.2007, 00:17 | #3 |
Участник
|
executeQuery
Мариночка, так низзя. Если он будет вызывать екзекьютквери на клике, юзеру придется нажимать на кнопку после каждого перехода на хедере с одной строки на другую
Konopello, вообще нет ничего зазорного в том, чтобы вызывать executeQuery линий на active хедера, ведь он сам вызывается, когда вы джойните датасорсы линий к хедерам мышью, в АОТ (можете попробовать обдебажить). Также можете для эстетического удовлетворения взглянуть на форму BudgetModel - там используется addDynalink, правда вам врядли подойтет. Вобщем, юзайте executeQuery на эктиве. Это вполне правильный способ. Последний раз редактировалось Artem Kurginyan; 11.05.2007 в 01:16. |
|
11.05.2007, 10:14 | #4 |
Участник
|
Как мне кажется, в этом случае как раз таки могут подойти динамические связи. Например Включение и отключение relation между двумя таблицами?
|
|
11.05.2007, 10:22 | #5 |
SAP
|
Цитата:
Хм, а почему бы не там же в кликде кнопки вызвать екзекьютКвери?
Цитата:
Вобщем, юзайте executeQuery на эктиве. Это вполне правильный способ.
Хотел бы услышать мнение проффесионалов. |
|
11.05.2007, 11:01 | #6 |
Microsoft Dynamics
|
Ну-ну, обижаете
Цитата:
ЗЫ: вы выставили JoinSource датасорсов на форме и вызвали clearDynalinks? Цитата:
Сообщение от tricky
Как мне кажется, в этом случае как раз таки могут подойти динамические связи. Например Включение и отключение relation между двумя таблицами?
Имхо, на активе переколбашивать кверю некрасиво и напряжно. Есть но, конечно. Какой тип JoinType вы хотите? Delayed? |
|
11.05.2007, 11:17 | #7 |
SAP
|
Цитата:
Например Включение и отключение relation между двумя таблицами?
Цитата:
Ну-ну, обижаете
Цитата:
Почему? ЕкзекьюКвери заменит текущую квери вашей с линком, поставит условие where table1.field1 = table2.field2. и уже будет ее всегда выполнять. Для неверующих могу выслать хро.
ЗЫ: вы выставили JoinSource датасорсов на форме и вызвали clearDynalinks? Цитата:
Имхо, на активе переколбашивать кверю некрасиво и напряжно.
Цитата:
Есть но, конечно. Какой тип JoinType вы хотите? Delayed?
|
|
11.05.2007, 11:25 | #8 |
Microsoft Dynamics
|
Цитата:
П.С. если что-то не включила или хотите под 3ку, пишите в личку. |
|
|
За это сообщение автора поблагодарили: r0mas (0). |
11.05.2007, 11:40 | #9 |
SAP
|
Цитата:
Я ж и грю, на кликде надо . Приаттачила проект под 4ку, посмотрите, пожалуйста.
|
|
11.05.2007, 12:14 | #10 |
Участник
|
а что если вместо headTable передавать headTable_ds.cursor()?
|
|
11.05.2007, 12:22 | #11 |
Microsoft Dynamics
|
Выяснили, что проблема в том, что JoinSource не прописан. Но автор не хочет его использовать в сочетании с clearDynalinks почему-то.
|
|
11.05.2007, 12:53 | #12 |
Участник
|
Я думаю Мариночко как всегда (почти) права . От только объяснить не могу
__________________
-- regards, Oleksandr |
|
11.05.2007, 13:25 | #13 |
SAP
|
Цитата:
а что если вместо headTable передавать headTable_ds.cursor()?
Теоретически надо использовать метод X++: confirmAMLineDetail_ds.joinSource(HeadTable_ds); X++: confirmAMLineDetail_ds.joinSource(HeadTable_ds.name()); X++: confirmAMLineDetail_ds.joinSource(HeadTable_ds.id()); |
|
11.05.2007, 13:36 | #14 |
Участник
|
Цитата:
Но так второй датасорс будет дергаться все время - даже не смотря на отключенный диналинк
__________________
Axapta v.3.0 sp5 kr2 |
|
11.05.2007, 13:41 | #15 |
Участник
|
Цитата:
Сообщение от konopello
попробовал результат один и тот же.
Теоретически надо использовать метод X++: confirmAMLineDetail_ds.joinSource(HeadTable_ds); X++: confirmAMLineDetail_ds.joinSource(HeadTable_ds.name()); X++: confirmAMLineDetail_ds.joinSource(HeadTable_ds.id()); После - изменение этого свойства ни на что не влияет. Может, вам открывать повторно форму в той же позиции экрана и, до вызова init(), уснанавливать нужные связи (попутно восстанавливая пользвательские фильтры и передавая данные для инициализации), а старую закрывать? Хотя, это намного геморойнее простого вызова execute в актив
__________________
Axapta v.3.0 sp5 kr2 |
|
11.05.2007, 13:51 | #16 |
Microsoft Dynamics
|
Цитата:
Все равно не понимаю... Нужно ведь просто обновить связь или очистить связь . ДжойнСорс ведь ни на что не повлияет, если мы сделаем очистку линков. Делаем мы это по кнопке. Обновляем квери по той же кнопке и ФСЕ. Может, я не вижу какой-то грандиозной проблемы, что аж нужно переиничивать форму итд? |
|
11.05.2007, 14:00 | #17 |
Участник
|
Ну, на форме первоначально датасорсы должны работать независимо (исходя из условий задачи).
Если установить в дизайне свойство JoinSource() и вызвать ClearDynalink(), то это условие выполняется. Но, при хождении по первому (несвязанному) датасорсу для второго все равно будет вызваться ExecuteQuery() - при этом будут сбиваться пользовательские фильтры для него, да и позиционироваться будет на первую запись (что естественно)
__________________
Axapta v.3.0 sp5 kr2 |
|
11.05.2007, 14:11 | #18 |
Microsoft Dynamics
|
Про то что вызывается выполнение квери даже без линки - это да.
А насчет сбивания фильтров? Если я фильтрую по первому, потом кнопку кликаю, то во втором выберется все связанное с первым, но фильтр на первом не потеряется... вызывается выполнение квери ведь на втором дсе, а не на первом. |
|
11.05.2007, 14:17 | #19 |
Участник
|
Фильтры будут сбиваться для второго датасорса.
Опять-же речь идет о "несвязанном" режиме, когда датасорсы не должны влиять друг на друга
__________________
Axapta v.3.0 sp5 kr2 |
|
11.05.2007, 14:24 | #20 |
SAP
|
Цитата:
Опять-же речь идет о "несвязанном" режиме, когда датасорсы не должны влиять друг на друга
Т.е. получается это можно реализовать только как я это реализовал либо есть другие способы получше моего. В принципе я про это с самого начала и спрашивал |
|
|
Похожие темы | ||||
Тема | Ответов | |||
axStart: Change data on a data source on a Form | 0 | |||
Data Sources | 11 | |||
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? | 10 | |||
Data Sources и ODBC | 1 | |||
Data Sources | 8 |
|