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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.08.2003, 18:24   #1  
Anders
Гость
 
n/a
Ка программно изменить свойство JoinSource у DataSource формы
Пишу:
My_ds.JoinSource(Parent_ds);

Проглатывает, но без нужного результата.
Если же ручками JoinSource изменяю, то все хорошо :-(
Старый 19.08.2003, 19:49   #2  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Может попробовать решить задачу с помощью методов addLink, addDynalink ? Хотя я не знаю Вашей задачи и могу ошибаться.
Старый 19.08.2003, 20:38   #3  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
JoinSource
Изменение joinSource и joinType из кода не дают никакого результата.
Следует изменять query в самом DS
Старый 20.08.2003, 11:25   #4  
Anders
Гость
 
n/a
Задача для знающего может и простая, а для начинающего..... :-(

Есть DataSource 1. К нему через JoinSource привязан DataSource 2, к которому так же
через JoinSource привязан DataSource 3.

Мне необходимо DataSource 4 по нажатию на чек-бокс прикручивать и откручивать
к DataSource 2, у которого (вернее у таблицы) есть relation c DataSource 4 (таблицы)
по двум полям.
Старый 20.08.2003, 13:44   #5  
Anders
Гость
 
n/a
Неужели никто не скажет.....

Как программно к одному источнику данных прикрутить два зависимых источника
данных?

Пробовал даже так:

QueryBuildDataSource qbds;
QueryBuildDataSource qbdsIS;
QueryBuildDataSource qbdsIR;

qry = new Query();
qbds = qry.addDataSource(TableNum(T1),"T1");
qbdsIS = qbds.addDataSource(TableNum(T2),"T2");
qbdsIS.relations(true);

T2 к Т1 благополучно цепляется :-)

Но если добавить и

qbdsIR = qbds.addDataSource(TableNum(T3),"T3");
qbdsIR.relations(true);

То и Т3 не цепляется, и Т2 благополучно отваливается :-(

И обидно, что не программно, а ручками через датасорсе на форме все проходит.....
Старый 20.08.2003, 15:09   #6  
Berty Wooster is offline
Berty Wooster
Участник
Аватар для Berty Wooster
 
82 / 16 (1) ++
Регистрация: 15.12.2002
Просто добавь fetchMode
PHP код:
QueryBuildDataSource qbds
QueryBuildDataSource qbdsIS;
QueryBuildDataSource qbdsIR;

qry = new Query();
qbds qry.addDataSource(TableNum(T1),"T1");
qbdsIS qbds.addDataSource(TableNum(T2),"T2");
qbdsIS.relations(true);
qbdsIS.fetchMode(0); 

qbdsIR qbds.addDataSource(TableNum(T3),"T3");
qbdsIR.relations(true);
qbdsIR.fetchMode(0); 
Все должно заработать
За это сообщение автора поблагодарили: Oz (1).
Старый 20.08.2003, 15:24   #7  
Anders
Гость
 
n/a
:)
Большое человеческое СПАСИБО, действительно заработало.
Старый 07.03.2007, 11:11   #8  
cherv is offline
cherv
MCTS
MCBMSS
1C
 
88 / 25 (1) +++
Регистрация: 24.05.2006
Добрый время суток!
Извиняюсь, но возможно не понимаю одной простой вещи. Как при программном связывании нескольких датасурсов указать, что данные датасурсы - это датасурсы из макета?
Пример. На форме есть DataSource1 (родительский) и DataSource2 (подчиненный). В int-методе DataSource1 пишу:

X++:
public void init()
{
    Query q = new Query();
    QueryBuildDataSource qbds;
    ;
    super();
    
    q = this.query();
    qbds = q.addDataSource(tablenum(DataSource2), "DataSource2");
    qbds.joinMode(JoinMode::OuterJoin);
    qbds.fetchMode(QueryFetchMode::One2One);
    qbds.relations(true);
}
На форме есть Grid, где выводятся поля из обоих датасурсов, но данные в них выводятся без связывания (параллельно). Подскажите, пожалуйста, что не так делаю. Спасибо заранее!
Старый 07.03.2007, 11:19   #9  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
1. А зачем вы их программно связываете? все эти свойства можно задать и в дизайне.
2. может просто свойство DataSource на гридах неверно установлено?
Старый 07.03.2007, 11:32   #10  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Датасоурс, созданный в коде не имеет отношения к датасорсу в дизайне.
Если хотите их связывать программно, то указывайте свойство joinMode для датасорса из дизайна. Т.е. DataSource2_ds.JoinMode() и т.д.
__________________
Axapta v.3.0 sp5 kr2
Старый 07.03.2007, 11:37   #11  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Так Вы же не связываете два существующих DataSource, а добавляете новый (третий) DataSource. Естесственно, что тот DataSource который был добавлен в дизайне так и остается не связанным.
Старый 07.03.2007, 14:20   #12  
cherv is offline
cherv
MCTS
MCBMSS
1C
 
88 / 25 (1) +++
Регистрация: 24.05.2006
Спастбо за ответы.

Владимир Максимов, AndyD, я, в-общем, так и предполагал, что в данном случае (при использовании addDataSource) нельзя присоединить уже существующий в макете датасурс. Теперь подтвердилось.

AndyD, не совсем понятно про JoinMode. С его помощью, насколько я понимаю, возможно поменять тип связи (с OuterJoin на InnerJoin, например). Мне необходимо изменить сами связи (т.е. связать определенный DataSource с другим, отличным от изначального).

kashperuk
Просто на форме есть несколько повторяющихся датасурсов (несколько гридов на разных закладках), хотелось для повышения производительности убрать некоторые и динамически менять связи между ними (форма грузится очень долго). Понятно, что форму можно разбить на несколько мелких, но хотелось опробовать другие варианты и по возможности оставить все же одну.

Последний раз редактировалось cherv; 07.03.2007 в 14:25.
Старый 07.03.2007, 15:28   #13  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от cherv Посмотреть сообщение
Просто на форме есть несколько повторяющихся датасурсов (несколько гридов на разных закладках), хотелось для повышения производительности убрать некоторые и динамически менять связи между ними (форма грузится очень долго). Понятно, что форму можно разбить на несколько мелких, но хотелось опробовать другие варианты и по возможности оставить все же одну.
Блокируй заполнение тех DataSource которые не используются при загрузке формы.

Для этого, если эти дополнительные DataSource - "цепочки" связанных таблиц в событии DataSource.init() главной таблицы цепочки напиши

PHP код:
// DataSource.init() главной таблицы

if (данный DataSource НЕ используется)
 
this.autoSearch(false);

super() 
Кроме того, заблокируй выполнение событий ExecuteQuery() для не используемых DataSource

PHP код:
// DataSource.executeQuery()

if (данный DataSource используется)
 
super() 
Т.е. super() выполняется только если данный DataSource нужен для работы

В результате, по тем DataSource которые не нужны в данный момент не будет выполняться никаких запросов к серверу. Как следствие - уменьшается время открытия формы
За это сообщение автора поблагодарили: kashperuk (2), cherv (1).
Старый 07.03.2007, 16:45   #14  
cherv is offline
cherv
MCTS
MCBMSS
1C
 
88 / 25 (1) +++
Регистрация: 24.05.2006
Владимир Максимов
Огромнейшее спасибо! Управление свойством AutoSearch решило часть проблем, над которыми бились уже много дней!
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Программное добавление range в DataSource формы Lucky13 DAX: Программирование 2 09.02.2007 12:01
Как программно добавить DataSource в процессе работы формы Владимир Максимов DAX: Программирование 1 29.11.2006 18:28
Как программно изменить к-во в строке заказа в форме SalesTable BorDark DAX: Программирование 2 13.01.2005 17:02
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Как получить доступ к текущей строке в DataSource формы Maxim Gorbunov DAX: База знаний и проекты 0 28.11.2001 13:46
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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