|
20.09.2010, 15:31 | #1 |
Участник
|
objectSet vs dataSource
Здрасьте, Господа.
Объясните, пожалуйста, разницу между методами objectSet и dataSource класса FormRun. |
|
20.09.2010, 17:03 | #2 |
Участник
|
Я тоже как-то задавался одним вопросом о FormObjectSet. Вот в этой ветке Вопрос по InventJournalTrans_ds.getNext()
Это не ответ на ваш вопрос, но тоже заставляет задуматься |
|
20.09.2010, 17:39 | #3 |
Участник
|
Класс FormObjectSet, являющийся наследником класса Object, предоставляет базовый функционал для работы с датасоурсами формы. В свою очередь, класс FormDataSource, который является наследником класса FormObjectSet, обладает более широким спектром методов для работы с датасоурсами формы (см. SystemDocumentation), помимо этого класс FormDataSource используется для определения специфики взаимозвязей таблицы датасоурса формы с другими датасоурсами(таблицами), отображаемыми на форме.
Источник: http://msdn.microsoft.com/en-US/library/aa629025.aspx
__________________
С уважением, Александр. Последний раз редактировалось samolalex; 20.09.2010 в 17:58. |
|
21.09.2010, 08:42 | #4 |
Участник
|
Цитата:
Сообщение от samolalex
Класс FormObjectSet, являющийся наследником класса Object, предоставляет базовый функционал для работы с датасоурсами формы. В свою очередь, класс FormDataSource, который является наследником класса FormObjectSet, обладает более широким спектром методов для работы с датасоурсами формы (см. SystemDocumentation), помимо этого класс FormDataSource используется для определения специфики взаимозвязей таблицы датасоурса формы с другими датасоурсами(таблицами), отображаемыми на форме.
Источник: http://msdn.microsoft.com/en-US/library/aa629025.aspx |
|
21.09.2010, 10:16 | #5 |
Участник
|
Как я понимаю, применение методов objectSet()и dataSource() позволяет инициализировать объекты соответствующих классов FormObjectSet и FormDataSource согласно стандартам, определенным в Axapta (Best Practices). Конечно, можно инициализировать экземпляр класса FormDataSource при помощи метода objectSet, но это уже будет не столь корректно. Пример из книги Стина Андресена:
X++: formDataSource = lookupFormRun.objectSet(); Метод dataSource: X++: ... FormRun formRun; FormDataSource formDataSource; ; ... // Create the run-time form. formRun = new FormRun(Args); formRun.run(); formRun.detach(); // Return an object for the first data source, // and then display a query form. formdatasource = formRun.dataSource(1); formdatasource.prompt(); ... Таким образом, метод prompt() доступен только для объекта класса Formdatasource: Цитата:
This method has no functionality in the FormObjectSet class. It is overridden by the FormDataSource.prompt method, which activates the standard form used to limit a query range: SysQueryForm.
Метод objectSet: X++: ...
FormRun formRun;
FormObjectSet formObjectSet;
;
...
// Create a run-time form.
formRun = classfactory.formRunClass(args);
formRun.run();
formRun.detach();
formObjectSet = formRun.objectSet(1);
...
__________________
С уважением, Александр. Последний раз редактировалось samolalex; 21.09.2010 в 10:26. |
|
|
За это сообщение автора поблагодарили: S.Kuskov (2). |
21.09.2010, 11:20 | #6 |
Участник
|
На самом деле, по-моему, очень справедливый вопрос.
Просто надо спрашивать не "чем они отличаются", а "почему их два?" |
|
21.09.2010, 11:51 | #7 |
Участник
|
У меня есть предположение по этому поводу.
Возможно наличие в среде MorphX этих двух методов у класса FormRun является, своего рода, реализацией свойства инкапсуляции (то есть предоставлением строго определенных интерфейсов доступа к объектам посредством методов классов, членами которых они являются). В правильном случае, объект класса FormDataSource должен инициализироваться методом datasource(), а объект класса FormObjectSet - методом objectSet(). То есть, по сути, использование того или иного метода для инициалиции объектов служит лишь средством повышения "читабельности" кода. А вот в зависимости от того, объект какого класса будет проинициализирован, программист в дальнейшем получит определенный интерфейс для доступа к этому объекту через соответствующие методы. То есть, из этого всего получается, что все дело в "этике" программирования.
__________________
С уважением, Александр. Последний раз редактировалось samolalex; 21.09.2010 в 12:02. |
|
21.09.2010, 13:43 | #8 |
Участник
|
На самом деле тут что-то не чисто
Оказывается, если после инициализации переменных типа FormObjectSet что одним, что другим методом, посмотреть тип в дебагере, то мы увидим, что объекты типа FormObjectSet странным образом трансформируются в объекты типа FormDataSource. Т.е., грубо говоря, экземпляры класса FormObjectSet вообще не имеют смысла, т.к. их и получить то невозможно, даже при помощи new(). Поэтому, как мне кажется, ни о какой "этике" здесь речь не идет, а имеется лишний метод objectSet, который в последствии должен уйти в небытие за ненадобностью. |
|
21.09.2010, 19:29 | #9 |
Участник
|
А по-моему, все очень стройно реализовано:
|
|
|
За это сообщение автора поблагодарили: MikeR (4). |
|
|