Добрый день,
В рамках изучения sysoperation framework написал 3 класса:
1) Contract class:
X++:
// Объявление класса Contract
// Атрибут указывает, что класс является Contract классом
[DataContractAttribute]
class SimpleBatchJobContract
{
str text;
}
// Метод для установления и получения значения переменной класса Contract
[
// Атрибут определяет элемент данных, который будет использоваться Service классом
DataMemberAttribute('Text'),
// Метка поля диалога
SysOperationLabelAttribute("@ICL363"),
// Атрибут видимости на диалоге
SysOperationControlVisibilityAttribute(true)]
public str parmText (str _text = text)
{
text = _text;
return text;
}
2) Service class:
X++:
// Объявление класса-наследника SysOperationServiceBase
class SimpleBatchJobService extends SysOperationServiceBase
{
}
// Метод, выполняющий основную логику класса Service
// Атрибут указывает, что проверки авторизации выполняются для метода, который был вызван на сервере
[SysEntryPointAttribute]
public void run(SimpleBatchJobContract _batchJobContract)
{
;
try
{
// Вывод текста, указанного в форме диалога
info(strFmt('%1',_batchJobContract.parmText())); }
catch
{
// Вывод имени функции в случае ошибки
info(funcName());
}
}
3) Controller class:
X++:
// Объявление класса-наследника SysOperationServiceController
class SimpleBatchJobController extends SysOperationServiceController
{
}
// Данный метод содержит описание задачи
public ClassDescription caption()
{
return("Пример простого пакетного задания");
}
// Метод указывает Service класс
protected void initService()
{
// Указание класса Service
this.parmClassName(classStr(SimpleBatchJobService));
// Указание метода Service класса, который будет запущен
this.parmMethodName(methodStr(SimpleBatchJobService, run));
// Указание режима запуска класса Service
this.parmExecutionMode(SysOperationExecutionMode::Synchronous);
}
// Метод-конструктор класса SimpleBatchJobController
public static SimpleBatchJobController construct()
{
// Получение экземпляра класса SimpleBatchJobController
return new SimpleBatchJobController();
}
// Метод, вызывающий диалоговое окно для запуска задания
public static void main(Args _args)
{
SimpleBatchJobController controller;
;
// Получение экземпляра класса
controller = SimpleBatchJobController::construct();
// Указание Service класса
controller.initService();
// Запуск формы
controller.startOperation();
}
при попытке запустить класс контроллер получаю ошибку вида:
No metadata class defined for data contract object
Подскажите пожалуйста что я сделал не так?
Заранее спасибо.