13.07.2006, 15:54 | #1 |
Участник
|
Form, Datasource
Разбираюсь в аксапте... доков нету... в структуре продукта нифига не понимаю... Поэтому задаю вопросы:
1) В примерах я частенько вижу следующее: ...init () { ... this.query() ... } this - это форма? или нет? 2) "?_ds" - это датасорсы формы или нет? 3) Что такое датасорсы на форме? Это объекты, с помощью которых данные передаются из базы в аксапту и из аксапты в базу? Или они сначала взаимодействуют с т.н. "тейблами" в DataDictionary? Или это просто table? И можно ли их перенастроить по своему желанию на лету? 4) Как взаимосвязаны датасорсы на форме? Они вообще независимы? Или они зависят только на этапе загрузки формы? или все-таки у них есть внутренние сылки друг на друга? 5) Где можно найти подробное описание свойств и методов системы датасорсов? в частности, интересует addRange, addDatasource. Вопросов много и они не очень конкретные, но так как я еще ничего о системе не знаю, боюсь, они другими и не могут быть.... |
|
13.07.2006, 16:02 | #2 |
Участник
|
this - это активный объект - в методе init() формы - это понятное дело форма.
А вот если метод на контроле - lookup(), к примеру, то this - это этот контрол |
|
13.07.2006, 16:04 | #3 |
Участник
|
Имя_Датасорса - текущая строка,
Имя_Датасорса_DS - это сам датасорс, да. Имя_Датасорса_Q - запрос этого датасорса |
|
|
За это сообщение автора поблагодарили: Ихъ бин программикеер (1). |
13.07.2006, 16:05 | #4 |
Участник
|
и еще Имя_Датасорса_QR - обработка запроса датасорса
|
|
|
За это сообщение автора поблагодарили: Ихъ бин программикеер (1). |
13.07.2006, 16:09 | #5 |
Участник
|
3. Перенастраивать на лету - не очень можно - на форуме обсуждалось. А это представление данных из какой-то таблицы - той, которая указана в свойствах для этого датасорса
4. Датасорсы связывать можно на форме, указывая свойство joinSource и LinkType 5. см. System Documentation \ Classes \ QueryBuildDataSource - это методы этого класса Правда оно не очень подробное А вообще, просто посмотрите на форуме примеры использования - и сразу поймете как они работают. |
|
14.07.2006, 08:52 | #6 |
Участник
|
и все-таки пока не уверен, что она вертится...
По пункту 1
Смысл вопроса был в том, есть ли у формы единый query... Я так понял, что это относится к отчету. 2 Спасибо за _q и _qr в моей книжке "MBS Axapta3.0 разработка бизнес-приложений" Еременко и Шашкова этот вопрос не освещается. Вообще, не очень удачная книжка, на мой взгляд - не освещаются довольно важные вопросы о структуре комплекса объектов... Цитата:
Сообщение от kashperuk
3. Перенастраивать на лету - не очень можно - на форуме обсуждалось. А это представление данных из какой-то таблицы - той, которая указана в свойствах для этого датасорса
4. Датасорсы связывать можно на форме, указывая свойство joinSource и LinkType 5. см. System Documentation \ Classes \ QueryBuildDataSource - это методы этого класса Правда оно не очень подробное А вообще, просто посмотрите на форуме примеры использования - и сразу поймете как они работают. 4 - Вопрос для меня, опять же, в идеологии - если существует жесткая связь, ссылками на объекты, это подразумевает, что, допустим, при нажатии на строчку в одной таблице содержимое другой таблицы меняется строго определенным образом, и никак иначе, и можно только наложить фильтры. Если же существует не очень жесткая связь, к примеру, описание формы внутри аксапты генерирует некие конструкции или просто текстовые запросы внутри датасорсов на этапе загрузки, которые наружу из датасорсов не вылезают, а только пользуются описаниями таблиц в словаре данных, это, как говорится, совсем другой цимес . Иными словами, вот если я хочу на лету взять и переделать sql-запрос - позволит ли это мне система и с какой легкостью она даст это делать? Или лучше отказаться от решения некоторых задач? 5 - да, "не очень подробное" - это то, что мне приходило в голову к сожалению, поиск на форуме пока не дает мне ясной картины, как здесь связаны объекты данных... |
|
14.07.2006, 09:13 | #7 |
Administrator
|
по п. 3 - см \Forms\SalesTable как организован вывод строк заказа
А книжка - на самом деле удачная - тк по сути единственная на русском .. пока Она для тех кто первый раз в жизни видит Аксапту как программист. И не более того. И после некоторого момента развития - программист книжку перерастает. Т.е. если подходить с этих позиций - то она удачная. А когда кажется что она неудачная - это означает что ожидания не соответствовали действительности. Вывод - надо понять, для чего была предназначена книжка
__________________
Возможно сделать все. Вопрос времени |
|
14.07.2006, 10:05 | #8 |
Участник
|
>>>Смысл вопроса был в том, есть ли у формы единый 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 |
Участник
|
Посмотрите узел Формы.
Формы tutorial* Особенно, tutorial_Form_Join - на ней можно исследовать различное поведение формы при изменении свойства linkType - на ней же можете и пробовать менять SQL запрос динамически. Вообще, его менять можно, но не сильно - то есть датасорсы все-таки должны остаться на тех же таблицах |
|
14.07.2006, 13:29 | #10 |
Участник
|
Ага, кажется, начинает проясняться.
Ув. 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 |
Участник
|
Попробуйте так
X++: ... VendContractItem_ds.QueryRun().query(query); VendContractItem_ds.research(); ...
__________________
Axapta v.3.0 sp5 kr2 |
|
14.07.2006, 14:01 | #12 |
Участник
|
А вообще в гриде есть что нибудь ?
Не забудьте заполнить свойство DataSource у грида. Иначе он может ничего не показать. |
|
14.07.2006, 14:02 | #13 |
Участник
|
>>>Ув. belugin, к сожалению, не совсем понимаю, что такое "представитель"
FormDataSource с одной стороны определяет структуру Query, с другой стороны является курсором (чтото типа TDataSet в Delphi) - то есть описывает свойства данного QBDS по отношению к данной форме (можно ли его редактировать, выполнение действий типа сохранить текующйю запись и т.д.) >>>Еще есть вопрос по поводу рилейшн - какую роль играют они? Это как бы шаблон для связи датасорсов? Это просто связи между таблицами. Они играют роль шаблона для связи меджду ds но используются еще много для чего, например, для каскадного удаления и проверки на допустимост ввода |
|
14.07.2006, 14:04 | #14 |
Участник
|
>>> И, мне кажется, в книжке "слон в совокупности" упущен совершенно, что меня очень печалит
Вы несомненно правы. Напишете ли статью "слона в совокупности"? |
|
14.07.2006, 14:08 | #15 |
Участник
|
Цитата:
Сообщение от AndyD
Попробуйте так
X++: ... VendContractItem_ds.QueryRun().query(query); VendContractItem_ds.research(); ... Функция research() выполняет запрос, хранящийся в QueryRun() - это запрос с наложенными пользовательскими фильтрами. Для выполния запроса в Query() датасоурса надо вызвать ExecuteQuery() |
|
14.07.2006, 14:09 | #16 |
Участник
|
Цитата:
Сообщение от Logger
А вообще в гриде есть что нибудь ?
Не забудьте заполнить свойство DataSource у грида. Иначе он может ничего не показать. |
|
14.07.2006, 14:18 | #17 |
Участник
|
Цитата:
Сообщение от belugin
>>>Ув. belugin, к сожалению, не совсем понимаю, что такое "представитель"
FormDataSource с одной стороны определяет структуру Query, с другой стороны является курсором (чтото типа TDataSet в Delphi) - то есть описывает свойства данного QBDS по отношению к данной форме (можно ли его редактировать, выполнение действий типа сохранить текующйю запись и т.д.) >>>Еще есть вопрос по поводу рилейшн - какую роль играют они? Это как бы шаблон для связи датасорсов? Это просто связи между таблицами. Они играют роль шаблона для связи меджду ds но используются еще много для чего, например, для каскадного удаления и проверки на допустимост ввода |
|
14.07.2006, 15:16 | #18 |
Участник
|
Цитата:
Сообщение от Ихъ бин программикеер
В этом виде код глючит и вызывает рантайм ошибку "Неправильный тип аргумента функции" и показывает стек, в стеке кроме research есть executeRecord и setRecord, на котором, собсснно, и вылетает.
Кстати, метод называется executeQuery(), а не executeRecord()
__________________
Axapta v.3.0 sp5 kr2 |
|
14.07.2006, 15:29 | #19 |
Участник
|
Цитата:
Сообщение от AndyD
Судя по всему, у вас на форме были еще датасоурсы, подключенные к VendContractItem, связи с которыми вы удалили, создав свой Query. Для правильной работы необходимо воссоздать структуру Query, которая была создана в дизайне формы, а затем подключать необходимую вам таблицу
Кстати, метод называется executeQuery(), а не executeRecord() А можно их (запросы) не воссоздавать, а воспользоваться существующей структурой VendContractItem_ds.query() ? |
|
14.07.2006, 15:57 | #20 |
Участник
|
Мне проблемно посмотреть эту форму - это ваша модификация
Использовать существующий можно так: 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 |
|
|