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

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

Проглатывает, но без нужного результата.
Если же ручками JoinSource изменяю, то все хорошо :-(
Старый 07.03.2007, 11:11   #2  
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   #3  
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   #4  
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   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Так Вы же не связываете два существующих DataSource, а добавляете новый (третий) DataSource. Естесственно, что тот DataSource который был добавлен в дизайне так и остается не связанным.
Старый 07.03.2007, 14:20   #6  
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   #7  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 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   #8  
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, время: 10:48.