Контракт SysOperation / контроллер автоматизации - PullRequest
1 голос
/ 17 марта 2020

Это кажется простым вопросом, но я не могу найти ответ на него, и я просто не вижу его сам. У меня есть простой набор классов SysOperation, контракт / сервис / контроллер. Однако я повторно использую это пакетное задание в других местах системы, которые являются высокоавтоматизированными процессами. Я хочу иметь возможность вызывать это пакетное задание асинхронно, без диалогов и с контрактом, построенным из определенных результатов / данных в ходе автоматизированного процесса.

Вопрос: Как передать контракт в класс контроллера, когда весь процесс автоматизирован? Я не смогу показать диалоговое окно, в котором обычно создается контракт, который магическим образом передается контроллеру при взаимодействии с пользователем.

Я бы вызвал код сервиса напрямую и таким образом передал бы контракт. , но я хочу, чтобы протоколирование, входящее в пакетное задание, было таким, чтобы его можно было увидеть в модуле SysAdmin, и кажется, что все это встроено в класс контроллера. Возможно, это невозможно?

1 Ответ

3 голосов
/ 17 марта 2020

Это то, что вы просите? Я не совсем уверен, что понимаю вопрос.

Если вы делаете что-то в пакетном режиме, вам может понадобиться создать пакетный заголовок и добавить задачи.

// These are two random controller/contract classes...this has not been tested
AssetTransferMassController     controller  = AssetTransferMassController::construct(); // Define controller
AssetTransferMassContract       contract    = controller ? controller.getDataContractObject() : null; // Define contract

if (!contract)
    throw error(Error::wrongUseOfFunction(funcName()));

// Set contract fields
contract.parmTransferDate(systemDateGet());
// etc: contract.parm[...]
// etc: contract.parm[...]

controller.parmExecutionMode(SysOperationExecutionMode::Asynchronous); // Set execution mode
controller.parmShowDialog(false); // Prevent dialog
controller.parmLoadFromSysLastValue(false); // Prevent loading from last value

// Start operation
controller.startOperation();    

info("Done");
...