Проверка наличия незавершенных процессов согласования документа с помощью сценария

Сценарий для проверки наличия незавершенных процессов согласования документа. В начало бизнес-процесса необходимо добавить исключающий ИЛИ-шлюз и блок сценария.

Переход "Есть незавершённый процессы" необходимо пометить как переход по умолчанию.

Список переменных:

Документ (context.DocumentHere) – переменная типа Документ. Документ, который отправляется на согласование;
Итератор (context.Iterator) – переменная типа Целое число. Не может иметь пустое значение, по умолчанию имеет значение ‘0’;
Список процессов (context.CheckList) – переменная типа Текст.

Для корректной работы необходимо подключить следующие пространства имен:

using EleWise.ELMA.Model.Services;
using EleWise.ELMA.Workflow.Models;
using EleWise.ELMA.Workflow.Managers;

Текст сценария в блоке Поиск запущенных процессов:

var filter = InterfaceActivator.Create<IWorkflowInstanceFilter>(); //Создание фильтра по экземплярам процесса
filter.GeneralStatus = WorkflowInstanceGeneralStatus.Current; //Поиск запущенных процессов
filter.Query = String.Format("Id IN (FROM P_Approvement SELECT WorkflowInstance WHERE DocumentThere = {0})", context.DocumentHere.Id.ToString());
var findedWorkflows = WorkflowInstanceManager.Instance.Find(filter, null); //Поиск экземпляров процессов по указанному фильтру

//Запись наименований запущенных процессов согласования в текстовую переменную CheckList
foreach(var proc in findedWorkflows)
{
	context.CheckList += "\n" + proc.Name.ToString(); //Запись наименования экземпляра процесса
	context.Iterator++; //Увеличение счётчика запущенных процессов
}

Разбор запроса filter.Query:

 P_Approvement – имя класса процесса в базе данных, запущенные экземпляры которого мы ищем. Найти это имя можно во вкладке Настройки бизнес-процесса.

DocumentThere – имя контекстной переменной в базе, совпадения по которой мы ищем. В данном примере нам нужно найти документ. Имя можно посмотреть во вкладке Контекст бизнес-процесса, запущенные экземпляры которого необходимо найти.

В условии перехода Нет запущенных процессов необходимо указать сценарий:

if(context.Iterator == 0)
	return true;
else
	return false;