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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.07.2006, 15:54   #1  
Ихъ бин программикеер is offline
Ихъ бин программикеер
Участник
 
23 / 10 (1) +
Регистрация: 12.07.2006
Form, Datasource
Разбираюсь в аксапте... доков нету... в структуре продукта нифига не понимаю... Поэтому задаю вопросы:

1) В примерах я частенько вижу следующее:
...init ()
{
...
this.query()
...
}
this - это форма? или нет?

2) "?_ds" - это датасорсы формы или нет?

3) Что такое датасорсы на форме? Это объекты, с помощью которых данные передаются из базы в аксапту и из аксапты в базу? Или они сначала взаимодействуют с т.н. "тейблами" в DataDictionary? Или это просто table? И можно ли их перенастроить по своему желанию на лету?

4) Как взаимосвязаны датасорсы на форме? Они вообще независимы? Или они зависят только на этапе загрузки формы? или все-таки у них есть внутренние сылки друг на друга?

5) Где можно найти подробное описание свойств и методов системы датасорсов? в частности, интересует addRange, addDatasource.

Вопросов много и они не очень конкретные, но так как я еще ничего о системе не знаю, боюсь, они другими и не могут быть....
Старый 13.07.2006, 16:02   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
this - это активный объект - в методе init() формы - это понятное дело форма.
А вот если метод на контроле - lookup(), к примеру, то this - это этот контрол
Старый 13.07.2006, 16:04   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Имя_Датасорса - текущая строка,
Имя_Датасорса_DS - это сам датасорс, да.
Имя_Датасорса_Q - запрос этого датасорса
За это сообщение автора поблагодарили: Ихъ бин программикеер (1).
Старый 13.07.2006, 16:05   #4  
zelen is offline
zelen
Участник
 
64 / 13 (1) ++
Регистрация: 08.11.2004
Адрес: г.Москва
и еще Имя_Датасорса_QR - обработка запроса датасорса
За это сообщение автора поблагодарили: Ихъ бин программикеер (1).
Старый 13.07.2006, 16:09   #5  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
3. Перенастраивать на лету - не очень можно - на форуме обсуждалось. А это представление данных из какой-то таблицы - той, которая указана в свойствах для этого датасорса
4. Датасорсы связывать можно на форме, указывая свойство joinSource и LinkType
5. см. System Documentation \ Classes \ QueryBuildDataSource - это методы этого класса

Правда оно не очень подробное
А вообще, просто посмотрите на форуме примеры использования - и сразу поймете как они работают.
Старый 14.07.2006, 08:52   #6  
Ихъ бин программикеер is offline
Ихъ бин программикеер
Участник
 
23 / 10 (1) +
Регистрация: 12.07.2006
и все-таки пока не уверен, что она вертится...
По пункту 1

Смысл вопроса был в том, есть ли у формы единый query... Я так понял, что это относится к отчету.

2

Спасибо за _q и _qr в моей книжке "MBS Axapta3.0 разработка бизнес-приложений" Еременко и Шашкова этот вопрос не освещается. Вообще, не очень удачная книжка, на мой взгляд - не освещаются довольно важные вопросы о структуре комплекса объектов...

Цитата:
Сообщение от kashperuk
3. Перенастраивать на лету - не очень можно - на форуме обсуждалось. А это представление данных из какой-то таблицы - той, которая указана в свойствах для этого датасорса
4. Датасорсы связывать можно на форме, указывая свойство joinSource и LinkType
5. см. System Documentation \ Classes \ QueryBuildDataSource - это методы этого класса

Правда оно не очень подробное
А вообще, просто посмотрите на форуме примеры использования - и сразу поймете как они работают.
3 - Строго говоря, сейчас я хочу по нажатию кнопочки приджойнить таблицу к другой таблице и по значениям из этой таблицы при выводе в грид выкинуть нафиг некоторые записи. Возможно ли это реализовать? А вопрос в общем смысле, "что такое датасорс", я задал потому, что не понимаю, хранит ли он данные, которые приходят от сервера, или нет

4 - Вопрос для меня, опять же, в идеологии - если существует жесткая связь, ссылками на объекты, это подразумевает, что, допустим, при нажатии на строчку в одной таблице содержимое другой таблицы меняется строго определенным образом, и никак иначе, и можно только наложить фильтры. Если же существует не очень жесткая связь, к примеру, описание формы внутри аксапты генерирует некие конструкции или просто текстовые запросы внутри датасорсов на этапе загрузки, которые наружу из датасорсов не вылезают, а только пользуются описаниями таблиц в словаре данных, это, как говорится, совсем другой цимес . Иными словами, вот если я хочу на лету взять и переделать sql-запрос - позволит ли это мне система и с какой легкостью она даст это делать? Или лучше отказаться от решения некоторых задач?

5 - да, "не очень подробное" - это то, что мне приходило в голову к сожалению, поиск на форуме пока не дает мне ясной картины, как здесь связаны объекты данных...
Старый 14.07.2006, 09:13   #7  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,323 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
по п. 3 - см \Forms\SalesTable как организован вывод строк заказа
А книжка - на самом деле удачная - тк по сути единственная на русском .. пока Она для тех кто первый раз в жизни видит Аксапту как программист. И не более того. И после некоторого момента развития - программист книжку перерастает. Т.е. если подходить с этих позиций - то она удачная. А когда кажется что она неудачная - это означает что ожидания не соответствовали действительности. Вывод - надо понять, для чего была предназначена книжка
__________________
Возможно сделать все. Вопрос времени
Старый 14.07.2006, 10:05   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
>>>Смысл вопроса был в том, есть ли у формы единый query... Я так понял, что это относится к отчету.

Форма может содержать 0..* датасурсов
датасурсы могут быть иерархически связанны между собой

Если у датасурса в поле linkType стоит *join и для него прописан родительский датасурс, то у него единый с родительским датасурсом Query

Иначе у него собственный Query

Таким образом количество Query = количеству кластеров датасурсов не связанных между собой при помощи linkType *join

_ds это FormDataSource
FormDataSource это представитель QueryBuildDatasource на форме.

см.

\System Documentation\Classes\FormDataSource
\System Documentation\Classes\QueryBuildDataSource
За это сообщение автора поблагодарили: Ихъ бин программикеер (1).
Старый 14.07.2006, 10:42   #9  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Посмотрите узел Формы.
Формы tutorial*

Особенно, tutorial_Form_Join - на ней можно исследовать различное поведение формы при изменении свойства linkType - на ней же можете и пробовать менять SQL запрос динамически.
Вообще, его менять можно, но не сильно - то есть датасорсы все-таки должны остаться на тех же таблицах
Старый 14.07.2006, 13:29   #10  
Ихъ бин программикеер is offline
Ихъ бин программикеер
Участник
 
23 / 10 (1) +
Регистрация: 12.07.2006
Ага, кажется, начинает проясняться.

Ув. sukhanchik, по поводу литературы - я вот иногда думаю, что мне стоит не кодить, а книжки писать . Я смотрю на форум, смотрю на книжку и вижу семерых слепых мудрецов, которые слона пощупали и теперь пытаются объяснит мне, восьмому слепому мудрецу, какой он есть, а я щупал до этого не слонов, и все пытаюсь понять, что такое "хобот" и почему у него такие большие уши. Между тем, следовало бы сначала понять, что такое слон в совокупности, а уже потом то, зачем ему уши и хобот . И, мне кажется, в книжке "слон в совокупности" упущен совершенно, что меня очень печалит. За совет посмотреть \Forms\SalesTable - спасибо, я там нарыл довольно интересную информацию :-).

Ув. belugin, к сожалению, не совсем понимаю, что такое "представитель", однако также очень благодарен за пояснения - теперь мне понятно хотя бы по поводу того, как могут быть взаимосвязаны датасорсы. Еще есть вопрос по поводу рилейшн - какую роль играют они? Это как бы шаблон для связи датасорсов?

Ув. kashperuk, спасибо, теперь я открыл для себя целую ветку полезной информации в виде примеров!

Еще мне непонятно, каким образом связаны гриды и датасорсы. Если сделать research() на датасорсе, должен ли обновиться грид или нет? Как сделать так, чтобы он обновился?

У меня есть кусок кода, который не глючит, но не работает подскажите, почему....

void clicked() // (CommandButton)
{
Query query;
QueryBuildDataSource qbd1;
QueryBuildDataSource qbd2;
;
query = new Query();
qbd1 = query.addDataSource(TableNum(VendContractItem));
qbd2 = qbd1.addDataSource(TableNum(VendContractSelectedItem));
qbd2.addLink(FieldNum(VendContractItem,ItemId), FieldNum(VendContractSelectedItem,ItemId));
qbd2.joinMode(JoinMode::InnerJoin);
VendContractItem_ds.query(query);
VendContractItem_ds.research();
super();
}

т.е. запрос вроде бы составляется, но обновления грида не происходит. Почему? Возможно ли, чтобы на это влияли какие-нибудь join'ы, прописанные в датасорсах? Или есть нечто, чего я не сделал? Или эта конструкция вообще не должна работать в этом событии?
Старый 14.07.2006, 13:54   #11  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Попробуйте так
X++:
...
VendContractItem_ds.QueryRun().query(query);
VendContractItem_ds.research();
...
Функция research() выполняет запрос, хранящийся в QueryRun() - это запрос с наложенными пользовательскими фильтрами. Для выполния запроса в Query() датасоурса надо вызвать ExecuteQuery()
__________________
Axapta v.3.0 sp5 kr2
Старый 14.07.2006, 14:01   #12  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
А вообще в гриде есть что нибудь ?
Не забудьте заполнить свойство DataSource у грида.
Иначе он может ничего не показать.
Старый 14.07.2006, 14:02   #13  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
>>>Ув. belugin, к сожалению, не совсем понимаю, что такое "представитель"

FormDataSource с одной стороны определяет структуру Query, с другой стороны является курсором (чтото типа TDataSet в Delphi) - то есть описывает свойства данного QBDS по отношению к данной форме (можно ли его редактировать, выполнение действий типа сохранить текующйю запись и т.д.)

>>>Еще есть вопрос по поводу рилейшн - какую роль играют они? Это как бы шаблон для связи датасорсов?

Это просто связи между таблицами. Они играют роль шаблона для связи меджду ds но используются еще много для чего, например, для каскадного удаления и проверки на допустимост ввода
Старый 14.07.2006, 14:04   #14  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
>>> И, мне кажется, в книжке "слон в совокупности" упущен совершенно, что меня очень печалит

Вы несомненно правы. Напишете ли статью "слона в совокупности"?
Старый 14.07.2006, 14:08   #15  
Ихъ бин программикеер is offline
Ихъ бин программикеер
Участник
 
23 / 10 (1) +
Регистрация: 12.07.2006
Цитата:
Сообщение от AndyD
Попробуйте так

X++:

...
VendContractItem_ds.QueryRun().query(query);
VendContractItem_ds.research();
...





Функция research() выполняет запрос, хранящийся в QueryRun() - это запрос с наложенными пользовательскими фильтрами. Для выполния запроса в Query() датасоурса надо вызвать ExecuteQuery()
В этом виде код глючит и вызывает рантайм ошибку "Неправильный тип аргумента функции" и показывает стек, в стеке кроме research есть executeRecord и setRecord, на котором, собсснно, и вылетает.
Старый 14.07.2006, 14:09   #16  
Ихъ бин программикеер is offline
Ихъ бин программикеер
Участник
 
23 / 10 (1) +
Регистрация: 12.07.2006
Цитата:
Сообщение от Logger
А вообще в гриде есть что нибудь ?
Не забудьте заполнить свойство DataSource у грида.
Иначе он может ничего не показать.
есть, конечно, там стоит VendContractItem
Старый 14.07.2006, 14:18   #17  
Ихъ бин программикеер is offline
Ихъ бин программикеер
Участник
 
23 / 10 (1) +
Регистрация: 12.07.2006
Цитата:
Сообщение от belugin
>>>Ув. belugin, к сожалению, не совсем понимаю, что такое "представитель"

FormDataSource с одной стороны определяет структуру Query, с другой стороны является курсором (чтото типа TDataSet в Delphi) - то есть описывает свойства данного QBDS по отношению к данной форме (можно ли его редактировать, выполнение действий типа сохранить текующйю запись и т.д.)

>>>Еще есть вопрос по поводу рилейшн - какую роль играют они? Это как бы шаблон для связи датасорсов?

Это просто связи между таблицами. Они играют роль шаблона для связи меджду ds но используются еще много для чего, например, для каскадного удаления и проверки на допустимост ввода
Спасибо, теперь, в приницпе, понятно. По поводу статьи - что ж, мне, как говорится, не влом только вот про слона я еще слишком мало знаю, чтобы статью про него писать.
Старый 14.07.2006, 15:16   #18  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от Ихъ бин программикеер
В этом виде код глючит и вызывает рантайм ошибку "Неправильный тип аргумента функции" и показывает стек, в стеке кроме research есть executeRecord и setRecord, на котором, собсснно, и вылетает.
Судя по всему, у вас на форме были еще датасоурсы, подключенные к VendContractItem, связи с которыми вы удалили, создав свой Query. Для правильной работы необходимо воссоздать структуру Query, которая была создана в дизайне формы, а затем подключать необходимую вам таблицу

Кстати, метод называется executeQuery(), а не executeRecord()
__________________
Axapta v.3.0 sp5 kr2
Старый 14.07.2006, 15:29   #19  
Ихъ бин программикеер is offline
Ихъ бин программикеер
Участник
 
23 / 10 (1) +
Регистрация: 12.07.2006
Цитата:
Сообщение от AndyD
Судя по всему, у вас на форме были еще датасоурсы, подключенные к VendContractItem, связи с которыми вы удалили, создав свой Query. Для правильной работы необходимо воссоздать структуру Query, которая была создана в дизайне формы, а затем подключать необходимую вам таблицу

Кстати, метод называется executeQuery(), а не executeRecord()
Факт, были, см. форму VendContractItem. Задачка у меня на самом деле простая - позволить пользователю ставить галочки на элементах номенклатуры (форма вызывается через Работа с поставщиками/Договоры/Ассортимент) и показать отдельно (сортировка, отдельная вкладка и пр.) те элементы номенклатуры, которые не были выбраны. Способ показывания на отдельной вкладке тех, которые выделены, типа не подходит (такая уж постановка), поэтому надо извращаться.

А можно их (запросы) не воссоздавать, а воспользоваться существующей структурой VendContractItem_ds.query() ?
Старый 14.07.2006, 15:57   #20  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Мне проблемно посмотреть эту форму - это ваша модификация

Использовать существующий можно так:
X++:
...
query = new Query(VendContractItem_ds.query());
qbd1 = query.DataSourceTable(TableNum(VendContractItem));
...
Тут существует одно "НО" - если ваша добавляемая таблица не последняя в цеполчке подключения к основному датасоурсу, то потребуется указать еще параметр
X++:
...
qbd2.joinMode(JoinMode::InnerJoin);
qbd2.fetchMode(QueryFetchMode::One2One);
...
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Ихъ бин программикеер (1).
Теги
datasource, query, датасорс (datasource), запрос (query), форма, crm2011

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
DeniZone: Invoking a method on a field in a form's datasource Blog bot DAX Blogs 0 13.02.2009 14:05
jinx: Zugriff auf die Query, QueryRun und DataSource in einer Form Blog bot DAX auf Deutsch 0 14.04.2008 18:05
axaptafreak: Getting new table fields into your form datasource Blog bot DAX Blogs 2 24.01.2008 22:51
Axapta Lessons: Trapping keystrokes in a Form Blog bot DAX Blogs 13 01.11.2006 18:16
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? soin DAX: Прочие вопросы 10 13.10.2003 10:43

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

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

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