Указание сроков выполнения задачи в квантах
Указание сроков выполнения задачи в квантах¶
Начиная с версии 3.3 в платформе появилась поддержка временных зон, а вместе с ней появилась возможность отправлять задания, указывая не плановую дату завершения, а просто срок в квантах. В классе CardTask
за это отвечает свойство PlannedQuants
. Оно присутствовало и ранее, но до 3.3 использовалось только для передачи данных с сервера клиенту. Теперь же, если указать плановый срок в квантах, при отправке задания, система сама рассчитает плановую дату завершения. Временную зону указывать не обязательно, т.к. та будет сама взята или рассчитана на основе роли, на которую назначается задание.
Для демонстрации - модифицируем процесс на WorkflowAPI из примера в разделе Разработка бизнес-процессов. Сделаем, чтобы отправляемые задания выдавались со сроком в 6 часов. Т.К. 6 часов это 24 кванта, то нам необходимо установить PlannedQuants
= 24. Изменим логикe работы 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: (task, token) =>
{
// Устанавливаем PlannedQuants 24, что равно 6-ти часам
task.PlannedQuants = 24;
return Task.CompletedTask;
},
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: (task, token) =>
{
// Устанавливаем PlannedQuants 24, что равно 6-ти часам
task.PlannedQuants = 24;
return Task.CompletedTask;
},
cancellationToken: cancellationToken);
Как итог работы нашего кода - получаем задание на 6 часов во временной зоне исполнителя:
В бизнес процессах, реализованных на конструкторе бизнес-процессов можно также задавать время, выделяемое на одно задание. Для этого достаточно указать “Длительность, рабочие дни” в блоке задания.
Что касается процессов, которые сделаны на маршрутах, то и в них можно указывать PlannedQuants
. Делается это через настройки каждого конкретного этапа в маршуте Шаблона этапа. Для этого у каждого этапа (где это необходимо) достаточно указать параметр “Срок (рабочие дни)”.