Перейти к содержанию

Указание сроков выполнения задания в квантах

Указание сроков выполнения задания в квантах

Начиная с версии 3.3 в платформе появилась поддержка временных зон, а вместе с ней появилась возможность отправлять задания, указывая не плановую дату завершения, а просто срок в квантах. В классе CardTask за это отвечает свойство PlannedQuants. Оно присутствовало и ранее, но до 3.3 использовалось только для передачи данных с сервера клиенту. Теперь же, если указать плановый срок в квантах, при отправке задания, система сама рассчитает плановую дату завершения. Временную зону или календарь указывать не обязательно, т.к. они будут взяты или рассчитаны на основе роли, на которую назначается задание.

Для демонстрации - модифицируем процесс на WorkflowAPI из примера в разделе Разработка бизнес-процессов. Сделаем, чтобы отправляемые задания выдавались со сроком в 6 часов. Т.К. 6 часов это 24 кванта, то нам необходимо установить PlannedQuants = 24. Изменим логику работы TestWorkflowWorker. Для этого модифицируем методы SendTaskTypeOneAsync и SendTaskTypeTwoAsync, добавив в вызов SendTaskAsync внутри них использование параметра modifyTaskActionAsync:

private Task SendTaskTypeOneAsync( int completionTransitionA, int completionTransitionB, IWorkflowProcessInfo processInfo, string digest, Guid roleID, string roleName, CancellationToken cancellationToken = default) => this.SendTaskAsync( DefaultTaskTypes.TestTask1TypeID, processInfo, digest, roleID, roleName, new Dictionary<string, object>(StringComparer.Ordinal) { { "A", completionTransitionA }, { "B", completionTransitionB }, }, modifyTaskActionAsync: async (task, token) => { // Устанавливаем PlannedQuants 24, что равно 6-ти часам task.PlannedQuants = 24; }, cancellationToken: cancellationToken);

private Task SendTaskTypeTwoAsync( int completionTransition, IWorkflowProcessInfo processInfo, string digest, Guid roleID, string roleName, CancellationToken cancellationToken = default) => this.SendTaskAsync( DefaultTaskTypes.TestTask2TypeID, processInfo, digest, roleID, roleName, new Dictionary<string, object>(StringComparer.Ordinal) { { "Completion", completionTransition }, }, modifyTaskActionAsync: async (task, token) => { // Устанавливаем PlannedQuants 24, что равно 6-ти часам task.PlannedQuants = 24; }, cancellationToken: cancellationToken);

Как итог работы нашего кода - получаем задание на 6 часов во временной зоне исполнителя:

Back to top