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