Получение активных задач по процессу в скрипте
Пример получения активных задач по бизнес-процессу для автоматического продолжения по выбранному переходу.
Пример сценария с использованием 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);
}
}