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

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

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

Начиная с версии 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. Делается это через настройки каждого конкретного этапа в маршуте Шаблона этапа. Для этого у каждого этапа (где это необходимо) достаточно указать параметр “Срок (рабочие дни)”.

Back to top