Отправка документа на согласование с помощью сценария

В данной статье представлен пример реализации согласования документа с помощью сценария.

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

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

Контекстные переменные:

context.Dokument - переменная типа Документ (Одиночная, Список);
context.Soglasuyuschie - переменная типа Пользователь (Список), список согласующих;
context.Data - переменная типа Дата (Показывает срок завершения), необязательный параметр. У данной переменной должна быть снята галочка Может иметь пустое значение.

Пространство имен:

using EleWise.ELMA.API;
Текст сценария:
PublicAPI.Docflow.Tasks.SendToApprovement(context.Dokument, context.Soglasuyuschie, context.Data);    //Документ, Пользователи, Срок завершения(Необязательный параметр)

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

Контекстные переменные:

context.Dokument - переменная типа Документ (Одиночная, Список);
context.Soglasuyuschie - переменная типа Пользователь (Список), список согласующих;
context.Data - переменная типа Дата (Показывает срок завершения), необязательный параметр. У данной переменной должна быть снята галочка Может иметь пустое значение.

Пространства имен:

using EleWise.ELMA.Documents.Managers;
using EleWise.ELMA.Documents.Models.Tasks;
using EleWise.ELMA.Security;
using EleWise.ELMA.Security.Models;
using EleWise.ELMA.Services;
using EleWise.ELMA.Tasks.Models;

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

var iniciator = (User)EleWise.ELMA.Security.Services.AuthenticationService.GetCurrentUser<EleWise.ELMA.Security.Models.IUser>(); // - авторизованный пользователь - инициатор согласования
var harm = new ApprovementTaskGroup(); // - создаем новую группу задач согласования 
harm.CreationAuthor = iniciator; // - определяем автора согласования 
harm.CreationDate = DateTime.Now; // - дата согласования 
harm.Subject = "Согласование "+ context.Dokument.Name.ToString(); // - название группы согласования 
harm.ExecutionDate = context.Data; // - срок задач согласования 
harm.Status = ApprovalStatus.None; // - выставляем статус - не согласовано 
harm.ApprovementList = new ApprovementList(); // - создаем новый лист согласования 
harm.ExecutionType = ApprovementExecutionType.Parallel; // - определяем тип согласования 
harm.Items.Add(new DocumentTaskItem{ Document = context.Dokument, Version = context.Dokument.Versions.FirstOrDefault() }); // - выбираем документ и его версию для согласования 
harm.Save(); // - сохраняем группу согласования 
var securityService = Locator.GetServiceNotNull<ISecurityService>();
//далее происходит загрузка пользователей в список согласующих по документу с учетом замещений, которые могут быть в системе.
//если учитывать замещения не нужно, то механизм можно упростить 
var users = new List<Pair<EleWise.ELMA.Security.Models.IUser, EleWise.ELMA.Security.Models.IUser>>(); 
context.Soglasuyuschie.ToList().ForEach(user => { var addUser = user.ReplacementMode == ReplacementMode.AutoReplacement && user.ReplacementUser != null ?
                                                                        new Pair<EleWise.ELMA.Security.Models.IUser, EleWise.ELMA.Security.Models.IUser>(user.ReplacementUser, user) :
                                                                        new Pair<EleWise.ELMA.Security.Models.IUser, EleWise.ELMA.Security.Models.IUser>(user, null); 
                                                                        if (!users.Contains(addUser)) users.Add(addUser); }); 
securityService.RunByUser(iniciator, () => ApprovementTaskGroupManager.Instance.AddExecuters(harm, users)); // - добавление пользователей в список согласующих