Показать сообщение отдельно
Старый 21.09.2010, 10:16   #4  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Как я понимаю, применение методов objectSet()и dataSource() позволяет инициализировать объекты соответствующих классов FormObjectSet и FormDataSource согласно стандартам, определенным в Axapta (Best Practices). Конечно, можно инициализировать экземпляр класса FormDataSource при помощи метода objectSet, но это уже будет не столь корректно. Пример из книги Стина Андресена:
X++:
formDataSource = lookupFormRun.objectSet();
Но правильным решением, судя по всему, является приведенное ниже использование вышеуказанных методов (код взят с http://msdn.microsoft.com/en-us/library/aa885180.aspx).

Метод 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).