logo

Получение активных задач по процессу в скрипте

Пример получения активных задач по бизнес-процессу для автоматического продолжения по выбранному переходу.

Пример сценария с использованием PublicAPI

Примечание
Актуальная документация по PublicAPI доступна по ссылке.
Внимание!
Сценарий, указанный ниже, актуален для версий системы ELMA до 3.15.38 включительно.

Пространство имен:

1
2
3
4
5
6
using EleWise.ELMA.API;
using EleWise.ELMA.Tasks.Models;
using EleWise.ELMA.Workflow.BPMN.Diagrams.Elements;
using EleWise.ELMA.Services;
using EleWise.ELMA.Workflow.Services;
using EleWise.ELMA.Workflow.Models;
Текст сценария:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Создаем фильтр выборки задач
var activeTasks = PublicAPI.Processes.WorkflowTaskBase.Filter()
                .InstanceId(context.WorkflowInstance.Id)
                .Statuses(TaskBaseExtensions.ActiveTaskStatuses.ToList()).Find();
foreach (var task in activeTasks)
{
    // Получаем элемент диаграммы процесса, по которому сформирована задача
  var element = (BPMNFlowElement)task.WorkflowBookmark.Instance.Process.Diagram.Elements.Single(e => e.Uid == task.WorkflowBookmark.ElementUid);
  // Ищем исходящий переход по его имени
  var connector = element.OutputConnectors.FirstOrDefault(c => c.Name == "Переход 1");
  if (connector != null)
  {
  // Переход нашли
  // Формируем данные для исполнения задачи
  var executeData = new WorkflowTaskExecuteData(task, connector.Uid);
  // Исполняем задачу
  Locator.GetServiceNotNull<IWorkflowRuntimeService>().Execute(executeData);
  }
}

Пример сценария без использования PublicAPI

Пространства имен:
1
2
3
4
5
6
7
using EleWise.ELMA.Model.Services;
using EleWise.ELMA.Services;
using EleWise.ELMA.Tasks.Models;
using EleWise.ELMA.Workflow.BPMN.Diagrams.Elements;
using EleWise.ELMA.Workflow.Managers;
using EleWise.ELMA.Workflow.Models;
using EleWise.ELMA.Workflow.Services;
Текст сценария:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Создаем фильтр выборки задач
var tasksFilter = InterfaceActivator.Create<IWorkflowTaskBaseFilter>();
tasksFilter.InstanceId = context.WorkflowInstance.Id; // Присваиваем идентификатор процесса, для которого нужно получить активные задачи
tasksFilter.DisableSecurity = true; // Отключаем проверку прав доступа к задачам
tasksFilter.Statuses = TaskBaseExtensions.ActiveTaskStatuses.ToList(); // Выбираем только активные задачи
// Выбираем задачи в соответствии с фильтром
var activeTasks = WorkflowTaskBaseManager.Instance.Find(tasksFilter, null);
foreach (var task in activeTasks)
{
    // Получаем элемент диаграммы процесса, по которому сформирована задача
    var element = (BPMNFlowElement)task.WorkflowBookmark.Instance.Process.Diagram.Elements.Single(e => e.Uid == task.WorkflowBookmark.ElementUid);
    // Ищем исходящий переход по его имени
    var connector = element.OutputConnectors.FirstOrDefault(c => c.Name == "Переход 1");
    if (connector != null)
    {
        // Переход нашли
        // Формируем данные для исполнения задачи
        var executeData = new WorkflowTaskExecuteData(task, connector.Uid);
        // Исполняем задачу
        Locator.GetServiceNotNull<IWorkflowRuntimeService>().Execute(executeData);
    }
}