![]() |
#1 |
SAP
|
Динамически join Data Sources
Есть две таблицы HeadTable и LineTable. Есть форма на которую добавлены 2-е эти таблицы. Хочу по кнопочке ну к примеру join их связать.
Как это лучше сделать? делаю по нажатии кнопочки вот так X++: lineTable_ds.query().dataSourceNo(1).addDynalink(fieldnum(LineTable, Key), headTable, fieldnum(HeadTable, key)); Как правильней это сделать? |
|
![]() |
#2 |
Microsoft Dynamics
|
Хм, а почему бы не там же в кликде кнопки вызвать екзекьютКвери?
|
|
![]() |
#3 |
Участник
|
executeQuery
Мариночка, так низзя. Если он будет вызывать екзекьютквери на клике, юзеру придется нажимать на кнопку после каждого перехода на хедере с одной строки на другую
![]() Konopello, вообще нет ничего зазорного в том, чтобы вызывать executeQuery линий на active хедера, ведь он сам вызывается, когда вы джойните датасорсы линий к хедерам мышью, в АОТ (можете попробовать обдебажить). Также можете для эстетического удовлетворения взглянуть на форму BudgetModel - там используется addDynalink, правда вам врядли подойтет. Вобщем, юзайте executeQuery на эктиве. Это вполне правильный способ. Последний раз редактировалось Artem Kurginyan; 11.05.2007 в 01:16. |
|
![]() |
#4 |
Участник
|
Как мне кажется, в этом случае как раз таки могут подойти динамические связи. Например Включение и отключение relation между двумя таблицами?
|
|
![]() |
#5 |
SAP
|
Цитата:
Хм, а почему бы не там же в кликде кнопки вызвать екзекьютКвери?
Цитата:
Вобщем, юзайте executeQuery на эктиве. Это вполне правильный способ.
Хотел бы услышать мнение проффесионалов. |
|
![]() |
#6 |
Microsoft Dynamics
|
Ну-ну, обижаете
Цитата:
ЗЫ: вы выставили JoinSource датасорсов на форме и вызвали clearDynalinks? Цитата:
Сообщение от tricky
![]() Как мне кажется, в этом случае как раз таки могут подойти динамические связи. Например Включение и отключение relation между двумя таблицами?
Имхо, на активе переколбашивать кверю некрасиво и напряжно. Есть но, конечно. Какой тип JoinType вы хотите? Delayed? |
|
![]() |
#7 |
SAP
|
Цитата:
Например Включение и отключение relation между двумя таблицами?
Цитата:
Ну-ну, обижаете
Цитата:
Почему? ЕкзекьюКвери заменит текущую квери вашей с линком, поставит условие where table1.field1 = table2.field2. и уже будет ее всегда выполнять. Для неверующих могу выслать хро.
ЗЫ: вы выставили JoinSource датасорсов на форме и вызвали clearDynalinks? Цитата:
Имхо, на активе переколбашивать кверю некрасиво и напряжно.
Цитата:
Есть но, конечно. Какой тип JoinType вы хотите? Delayed?
|
|
![]() |
#8 |
Microsoft Dynamics
|
Цитата:
![]() П.С. если что-то не включила или хотите под 3ку, пишите в личку. |
|
|
За это сообщение автора поблагодарили: r0mas (0). |
![]() |
#9 |
SAP
|
Цитата:
Я ж и грю, на кликде надо . Приаттачила проект под 4ку, посмотрите, пожалуйста.
|
|
![]() |
#10 |
Участник
|
а что если вместо headTable передавать headTable_ds.cursor()?
|
|
![]() |
#11 |
Microsoft Dynamics
|
Выяснили, что проблема в том, что JoinSource не прописан. Но автор не хочет его использовать в сочетании с clearDynalinks почему-то.
|
|
![]() |
#12 |
Участник
|
![]()
Я думаю Мариночко как всегда (почти) права . От только объяснить не могу
![]()
__________________
-- regards, Oleksandr |
|
![]() |
#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()); |
|
![]() |
#14 |
Участник
|
Цитата:
Но так второй датасорс будет дергаться все время - даже не смотря на отключенный диналинк
__________________
Axapta v.3.0 sp5 kr2 |
|
![]() |
#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 |
|
![]() |
#16 |
Microsoft Dynamics
|
Цитата:
Все равно не понимаю... Нужно ведь просто обновить связь или очистить связь ![]() Может, я не вижу какой-то грандиозной проблемы, что аж нужно переиничивать форму итд? |
|
![]() |
#17 |
Участник
|
Ну, на форме первоначально датасорсы должны работать независимо (исходя из условий задачи
![]() Если установить в дизайне свойство JoinSource() и вызвать ClearDynalink(), то это условие выполняется. Но, при хождении по первому (несвязанному) датасорсу для второго все равно будет вызваться ExecuteQuery() - при этом будут сбиваться пользовательские фильтры для него, да и позиционироваться будет на первую запись (что естественно)
__________________
Axapta v.3.0 sp5 kr2 |
|
![]() |
#18 |
Microsoft Dynamics
|
Про то что вызывается выполнение квери даже без линки - это да.
А насчет сбивания фильтров? Если я фильтрую по первому, потом кнопку кликаю, то во втором выберется все связанное с первым, но фильтр на первом не потеряется... вызывается выполнение квери ведь на втором дсе, а не на первом. |
|
![]() |
#19 |
Участник
|
Фильтры будут сбиваться для второго датасорса.
Опять-же речь идет о "несвязанном" режиме, когда датасорсы не должны влиять друг на друга
__________________
Axapta v.3.0 sp5 kr2 |
|
![]() |
#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 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|