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

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

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

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

Для демонстрации модифицируем процесс на WorkflowAPI из примера в разделе Разработка бизнес-процессов. Сделаем, чтобы отправляемые задания выдавались со сроком в 4 часа. Т.К. 4 часа - это половина стандартного рабочего дня, то нам необходимо установить PlannedWorkingDays = 0,5. Изменим логику работы 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) => { // Устанавливаем PlannedWorkingDays 0.5, что равно 4-ём часам task.PlannedWorkingDays = 0.5; }, 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) => { // Устанавливаем PlannedWorkingDays 0.5, что равно 4-ём часам task.PlannedWorkingDays = 0.5; }, cancellationToken: cancellationToken);

Как итог работы нашего кода получаем задание во временной зоне исполнителя и сроком на 4 часа (т.к. исполнителю настроен календарь с 8-ми часовым рабочим днём):

Задание сроком 0.5 рабочих дней

Если бы рабочий день по календарю был не 8, а 6 часов:

Тип календаря с настроенными 6-тью часами в дне

То при PlannedWorkingDays = 0.5 задание бы назначилось на 3 часа.

Задание сроком 0.5 рабочих дней, но при 6-ти часовом дне

Important

При указании срока через PlannedWorkingDays система будет опираться на то количество часов в рабочем дне, которое указано в карточке типа календаря, соответствующего календарю задания. Настройка типа календаря “Количество часов в рабочем дне” может отличаться от фактического рассчитанного количества часов в рабочем дне в некоторых случаях (короткие дни, ненормированный график и т.д.). Эта настройка только отражает типовую продолжительность рабочего дня для данного типа календаря.

В бизнес процессах, реализованных на конструкторе бизнес-процессов, можно задавать время, выделяемое на одно задание, указывая “Длительность, рабочие дни” в блоке задания.

Что касается процессов, которые сделаны на маршрутах, то и в них можно указывать PlannedWorkingDays. Делается это через настройки каждого конкретного этапа в маршруте Шаблона этапа. Для этого у каждого этапа (где это необходимо) достаточно указать параметр “Срок (рабочие дни)”.

Back to top