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

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

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

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

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

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

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

using EleWise.ELMA.API;

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

PublicAPI.Docflow.Tasks.SendToAcquaintance(context.Dokument, context.Poljzovatelj, context.Data);	//Документ, Пользователи, Срок завершения (необязательный параметр)

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

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

SpisokDlyaOznakomleniya - тип Пользователь (тип связи Список), пользователи которые должны ознакомиться с документом;
Dokument - тип Документ (либо любой другой тип Документа), документ для ознакомления.

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

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;
using EleWise.ELMA.Extensions;
 Текст сценария:
var iniciator = (User)EleWise.ELMA.Security.Services.AuthenticationService.GetCurrentUser<EleWise.ELMA.Security.Models.IUser>(); // - авторизованный пользователь - инициатор отправки на ознакомление
var Acq_group = new AcquaintanceTaskGroup(); // - создаем новую группу задач ознакомления
Acq_group.CreationAuthor = iniciator; // - определяем автора отправки на ознакомление
Acq_group.CreationDate = DateTime.Now; // - дата ознакомления
Acq_group.Subject = "Ознакомление с документом "+ context.Dokument.Name.ToString(); // - название группы ознакомления
Acq_group.ExecutionDate = Acq_group.ExecutionDate.AddDays(1); // - срок задач ознакомления
Acq_group.Status = AcquaintanceStatus.None; // - выставляем статус - на ознакомлении
Acq_group.AcquaintanceList = new AcquaintanceList(); // - создаем новый лист ознакомления
Acq_group.Items.Add(new DocumentTaskItem{ Document = context.Dokument.CastAsRealType(), Version = context.Dokument.CurrentVersion != null ? context.Dokument.CurrentVersion.CastAsRealType() : null }); // - выбираем документ и его версию для ознакомления
var securityService = Locator.GetServiceNotNull<SecurityService>();
//далее происходит загрузка пользователей в список для ознакомления с документом с учетом замещений, которые могут быть в системе
//если учитывать замещения не нужно, то механизм можно упростить
var users = new List<Pair<EleWise.ELMA.Security.Models.IUser, EleWise.ELMA.Security.Models.IUser>>();
context.SpisokDlyaOznakomleniya.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, () =>   AcquaintanceTaskGroupManager.Instance.AddExecuters(Acq_group, users)); // - добавление пользователей в список на ознакомление