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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.05.2007, 17:45   #1  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Динамически join Data Sources
Есть две таблицы HeadTable и LineTable. Есть форма на которую добавлены 2-е эти таблицы. Хочу по кнопочке ну к примеру join их связать.

Как это лучше сделать?

делаю по нажатии кнопочки вот так

X++:
lineTable_ds.query().dataSourceNo(1).addDynalink(fieldnum(LineTable, Key), headTable, fieldnum(HeadTable, key));
Data Sources связываются. Но в методе headTable_ds.active() приходится вызывать lineTable_ds.executeQery();

Как правильней это сделать?
Старый 10.05.2007, 18:31   #2  
Мариночка is offline
Мариночка
Microsoft Dynamics
Аватар для Мариночка
Сотрудники Microsoft Dynamics
 
75 / 56 (2) ++++
Регистрация: 31.01.2005
Адрес: Киев
Хм, а почему бы не там же в кликде кнопки вызвать екзекьютКвери?
Старый 11.05.2007, 00:17   #3  
Artem Kurginyan is offline
Artem Kurginyan
Участник
 
2 / 11 (1) +
Регистрация: 10.05.2007
executeQuery
Цитата:
Сообщение от Мариночка Посмотреть сообщение
Хм, а почему бы не там же в кликде кнопки вызвать екзекьютКвери?
Мариночка, так низзя. Если он будет вызывать екзекьютквери на клике, юзеру придется нажимать на кнопку после каждого перехода на хедере с одной строки на другую

Konopello, вообще нет ничего зазорного в том, чтобы вызывать executeQuery линий на active хедера, ведь он сам вызывается, когда вы джойните датасорсы линий к хедерам мышью, в АОТ (можете попробовать обдебажить).

Также можете для эстетического удовлетворения взглянуть на форму BudgetModel - там используется addDynalink, правда вам врядли подойтет.

Вобщем, юзайте executeQuery на эктиве. Это вполне правильный способ.

Последний раз редактировалось Artem Kurginyan; 11.05.2007 в 01:16.
Старый 11.05.2007, 10:14   #4  
tricky is offline
tricky
Участник
 
140 / 64 (3) ++++
Регистрация: 03.05.2005
Адрес: Гуково
Как мне кажется, в этом случае как раз таки могут подойти динамические связи. Например Включение и отключение relation между двумя таблицами?
Старый 11.05.2007, 10:22   #5  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Цитата:
Хм, а почему бы не там же в кликде кнопки вызвать екзекьютКвери?
Да мне не зачем юзать executeQuery на кликеде. Я хочу чтобы я нажал на кнопочку и 2-а источника данных стали связанными.

Цитата:
Вобщем, юзайте executeQuery на эктиве. Это вполне правильный способ.
У меня как бы все работает, но мне кажется что есть более правельный способ динамически зажойнить и отображать в гридах.

Хотел бы услышать мнение проффесионалов.
Старый 11.05.2007, 11:01   #6  
Мариночка is offline
Мариночка
Microsoft Dynamics
Аватар для Мариночка
Сотрудники Microsoft Dynamics
 
75 / 56 (2) ++++
Регистрация: 31.01.2005
Адрес: Киев
Цитата:
Сообщение от konopello Посмотреть сообщение
Хотел бы услышать мнение проффесионалов.
Ну-ну, обижаете

Цитата:
Сообщение от Artem Kurginyan Посмотреть сообщение
Мариночка, так низзя. Если он будет вызывать екзекьютквери на клике, юзеру придется нажимать на кнопку после каждого перехода на хедере с одной строки на другую
Почему? ЕкзекьюКвери заменит текущую квери вашей с линком, поставит условие where table1.field1 = table2.field2. и уже будет ее всегда выполнять. Для неверующих могу выслать хро.
ЗЫ: вы выставили JoinSource датасорсов на форме и вызвали clearDynalinks?

Цитата:
Сообщение от tricky Посмотреть сообщение
Как мне кажется, в этом случае как раз таки могут подойти динамические связи. Например Включение и отключение relation между двумя таблицами?
ммм, а разве это не было предложено изначально?

Имхо, на активе переколбашивать кверю некрасиво и напряжно.

Есть но, конечно. Какой тип JoinType вы хотите? Delayed?
Старый 11.05.2007, 11:17   #7  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Цитата:
Например Включение и отключение relation между двумя таблицами?
В принципе я все так и делал. Но проблема в том что приходится при переходе в шапки с записи на запись ручками вызывать executeQuery подчиненого источника данных. А по идее это должна делать сама Axapta

Цитата:
Ну-ну, обижаете
прошу прщение не хотел

Цитата:
Почему? ЕкзекьюКвери заменит текущую квери вашей с линком, поставит условие where table1.field1 = table2.field2. и уже будет ее всегда выполнять. Для неверующих могу выслать хро.
ЗЫ: вы выставили JoinSource датасорсов на форме и вызвали clearDynalinks?
еще раз говорю проблем с этим у меня нет, все запросы хорошо формируются. Мне не нравится вызывать ручками в методе active executeQuery тот которы Axapta должна вызывать сама. Вот я и хочу услышать как этого добится

Цитата:
Имхо, на активе переколбашивать кверю некрасиво и напряжно.
вот в этом то и вопрос

Цитата:
Есть но, конечно. Какой тип JoinType вы хотите? Delayed?
с этим мне все равно главно что бы Axapta сама отображала записи подчененого источника
Старый 11.05.2007, 11:25   #8  
Мариночка is offline
Мариночка
Microsoft Dynamics
Аватар для Мариночка
Сотрудники Microsoft Dynamics
 
75 / 56 (2) ++++
Регистрация: 31.01.2005
Адрес: Киев
Цитата:
Сообщение от konopello Посмотреть сообщение
еще раз говорю проблем с этим у меня нет, все запросы хорошо формируются. Мне не нравится вызывать ручками в методе active executeQuery тот которы Axapta должна вызывать сама. Вот я и хочу услышать как этого добится
Я ж и грю, на кликде надо . Приаттачила проект под 4ку, посмотрите, пожалуйста.
П.С. если что-то не включила или хотите под 3ку, пишите в личку.
Вложения
Тип файла: xpo SharedProject_SuperProject.xpo (10.5 Кб, 177 просмотров)
За это сообщение автора поблагодарили: r0mas (0).
Старый 11.05.2007, 11:40   #9  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Цитата:
Я ж и грю, на кликде надо . Приаттачила проект под 4ку, посмотрите, пожалуйста.
Спосибо конечно. У меня все примерно анологично. НО ЕЩЕ РАЗ ПОВТАРЯЮ проблема в том что когдая бегаю по верхнему гриду записи Axapta сама не обнавляет у подчененго источника и вот именно по этому у меня и возник этот вопрос. Так как обновление нижнего grida я делаю ручками
Старый 11.05.2007, 12:14   #10  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
а что если вместо headTable передавать headTable_ds.cursor()?
Старый 11.05.2007, 12:22   #11  
Мариночка is offline
Мариночка
Microsoft Dynamics
Аватар для Мариночка
Сотрудники Microsoft Dynamics
 
75 / 56 (2) ++++
Регистрация: 31.01.2005
Адрес: Киев
Выяснили, что проблема в том, что JoinSource не прописан. Но автор не хочет его использовать в сочетании с clearDynalinks почему-то.
Старый 11.05.2007, 12:53   #12  
Oleksandr is offline
Oleksandr
Участник
Аватар для Oleksandr
 
68 / 17 (1) ++
Регистрация: 19.03.2005
Адрес: Киев
!
Я думаю Мариночко как всегда (почти) права . От только объяснить не могу
__________________
--
regards, Oleksandr
Старый 11.05.2007, 13:25   #13  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Цитата:
а что если вместо 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  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от Мариночка Посмотреть сообщение
Выяснили, что проблема в том, что JoinSource не прописан. Но автор не хочет его использовать в сочетании с clearDynalinks почему-то.
Интересный подход.
Но так второй датасорс будет дергаться все время - даже не смотря на отключенный диналинк
__________________
Axapta v.3.0 sp5 kr2
Старый 11.05.2007, 13:41   #15  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от 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  
Мариночка is offline
Мариночка
Microsoft Dynamics
Аватар для Мариночка
Сотрудники Microsoft Dynamics
 
75 / 56 (2) ++++
Регистрация: 31.01.2005
Адрес: Киев
Цитата:
Сообщение от AndyD Посмотреть сообщение
Интересный подход.
Но так второй датасорс будет дергаться все время - даже не смотря на отключенный диналинк
Все время - это когда?

Все равно не понимаю... Нужно ведь просто обновить связь или очистить связь . ДжойнСорс ведь ни на что не повлияет, если мы сделаем очистку линков. Делаем мы это по кнопке. Обновляем квери по той же кнопке и ФСЕ.
Может, я не вижу какой-то грандиозной проблемы, что аж нужно переиничивать форму итд?
Старый 11.05.2007, 14:00   #17  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Ну, на форме первоначально датасорсы должны работать независимо (исходя из условий задачи).
Если установить в дизайне свойство JoinSource() и вызвать ClearDynalink(), то это условие выполняется.
Но, при хождении по первому (несвязанному) датасорсу для второго все равно будет вызваться ExecuteQuery() - при этом будут сбиваться пользовательские фильтры для него, да и позиционироваться будет на первую запись (что естественно)
__________________
Axapta v.3.0 sp5 kr2
Старый 11.05.2007, 14:11   #18  
Мариночка is offline
Мариночка
Microsoft Dynamics
Аватар для Мариночка
Сотрудники Microsoft Dynamics
 
75 / 56 (2) ++++
Регистрация: 31.01.2005
Адрес: Киев
Про то что вызывается выполнение квери даже без линки - это да.
А насчет сбивания фильтров? Если я фильтрую по первому, потом кнопку кликаю, то во втором выберется все связанное с первым, но фильтр на первом не потеряется... вызывается выполнение квери ведь на втором дсе, а не на первом.
Старый 11.05.2007, 14:17   #19  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Фильтры будут сбиваться для второго датасорса.
Опять-же речь идет о "несвязанном" режиме, когда датасорсы не должны влиять друг на друга
__________________
Axapta v.3.0 sp5 kr2
Старый 11.05.2007, 14:24   #20  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Цитата:
Опять-же речь идет о "несвязанном" режиме, когда датасорсы не должны влиять друг на друга
так и есть.

Т.е. получается это можно реализовать только как я это реализовал либо есть другие способы получше моего.

В принципе я про это с самого начала и спрашивал
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axStart: Change data on a data source on a Form Blog bot DAX Blogs 0 04.09.2008 15:05
Data Sources KpecT DAX: Программирование 11 02.09.2008 17:56
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? soin DAX: Прочие вопросы 10 13.10.2003 10:43
Data Sources и ODBC art DAX: Программирование 1 27.08.2002 13:38
Data Sources art DAX: Программирование 8 14.06.2002 15:06
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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