Показать сообщение отдельно
Старый 11.07.2019, 14:38   #1  
dark_knight is offline
dark_knight
Участник
 
20 / 10 (1) +
Регистрация: 20.01.2019
sysoperation framework просто пакетное задание
Добрый день,

В рамках изучения 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

Подскажите пожалуйста что я сделал не так?

Заранее спасибо.