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