Getting active process tasks with a script
This article shows how to obtain active business process tasks to automatically continue the process by a chosen route.
Script with PublicAPI
Note
Documentation on PublicAPI is available here
Attention
The script below is relevant for ELMA up to 3.12.1 inclusive.
Namespaces:
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;
Script task:
// Create task filter
var activeTasks = PublicAPI.Processes.WorkflowTaskBase.Filter()
.InstanceId(context.WorkflowInstance.Id)
.Statuses(TaskBaseExtensions.ActiveTaskStatuses.ToList()).Find();
foreach (var task in activeTasks)
{
// Get task's element on process diagram
var element = (BPMNFlowElement)task.WorkflowBookmark.Instance.Process.Diagram.Elements.Single(e => e.Uid == task.WorkflowBookmark.ElementUid);
// Find outgoing sequence by it's name
var connector = element.OutputConnectors.FirstOrDefault(c => c.Name == "Transition 1");
if (connector != null)
{
// The transition is found
// Form data for task execution
var executeData = new WorkflowTaskExecuteData(task, connector.Uid);
// Execute task
Locator.GetServiceNotNull<IWorkflowRuntimeService>().Execute(executeData);
}
}
Script without PublicAPI
Namespaces:
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;
Script text:
// Create a task filter
var tasksFilter = InterfaceActivator.Create<IWorkflowTaskBaseFilter>();
tasksFilter.InstanceId = context.WorkflowInstance.Id; // Assign an ID for the process in which you want to identify the active tasks
tasksFilter.DisableSecurity = true; // disabe checking access permissions for the tasks
tasksFilter.Statuses = TaskBaseExtensions.ActiveTaskStatuses.ToList(); // Select only active tasks
// Select tasks according to filter
var activeTasks = WorkflowTaskBaseManager.Instance.Find(tasksFilter, null);
foreach (var task in activeTasks)
{
// Get the task's element on process diagram
var element = (BPMNFlowElement)task.WorkflowBookmark.Instance.Process.Diagram.Elements.Single(e => e.Uid == task.WorkflowBookmark.ElementUid);
// Find outgoing transition according to it's name
var connector = element.OutputConnectors.FirstOrDefault(c => c.Name == "Transition 1");
if (connector != null)
{
// The transition is found
// Form data for task execution
var executeData = new WorkflowTaskExecuteData(task, connector.Uid);
// Execute task
Locator.GetServiceNotNull<IWorkflowRuntimeService>().Execute(executeData);
}
}