logo

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

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

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

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

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

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;
Текст сценария:
// Создаем фильтр выборки задач
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

Пространства имен:
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;
Текст сценария:
// Создаем фильтр выборки задач
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);
	}
}