Запуск процесса из сценария

В данной статье рассмотрено, как из сценария можно запустить опубликованный в системе процесс. Для успешного запуска процесса пользователь, от имени которого выполняется сценарий, должен иметь права на его запуск.

Примечание
Для корректной работы данного сценария необходимо наличие установленного Дизайнера системы на машине с ELMA-сервером.

Пример сценария с использованием PublicAPI

Примечание
Актуальная документация по PublicAPI доступна по ссылке.
Внимание!
Сценарий, указанный ниже, актуален для версий системы ELMA до 3.12.1 включительно.

Текст сценария:

var startableProcess =
	PublicAPI.Processes.ProcessHeader.Find("Name like ’Тестовый процесс’").FirstOrDefault(a => a.Published != null);
if (startableProcess != null)
{
	Action<dynamic> processContext = myContext => //задать значение для контекстной переменной типа Строка
	{
	   myContext.Stroka = "123"; //задать значение для контекстной переменной типа Строка
	};

	var instance = PublicAPI.Processes.WorkflowInstance.StartProcess(startableProcess.Published, "Название экземпляра процесса",
		processContext);
}

Пример сценария без использования PublicAPI

Текст сценария:

using EleWise.ELMA.Security.Models;
using EleWise.ELMA.Security.Services;
using EleWise.ELMA.Services;
using EleWise.ELMA.Workflow.Managers;
using EleWise.ELMA.Workflow.Services;
using EleWise.ELMA.Extensions;

var startableProcess = ProcessHeaderManager.Instance.GetStartableProcesses().FirstOrDefault(a=>a.Name == "Тестовый процесс" && a.Published != null);
if (startableProcess != null)
{
	var process = startableProcess.Published;
	var instance = WorkflowInstanceManager.Instance.Create();
	instance.Process = process;
	instance.Name = "Название экземпляра процесса"; //имя экземпляра процесса
	(instance.Context.AsDynamic()).Stroka = "123"; //задать значение для контекстной переменной типа Строка
	instance.Initiator = AuthenticationService.GetCurrentUser<IUser>();
	var workflowService = Locator.GetServiceNotNull<IWorkflowRuntimeService>();
	workflowService.Run(instance);
}
else
{
	throw new Exception(SR.T("Процесс не опубликован")); // Если процесс не опубликован, то выводим ошибку
}