[ELMA3] Отправка документа на ознакомление с помощью сценария
В статье приведен пример сценария, с помощью которого можно отправить документ на ознакомление нескольким пользователям.
Пример сценария с использованием PublicAPI
Примечание
Актуальная документация по PublicAPI доступна по ссылке.
Внимание!
Сценарий, указанный ниже, актуален для версий системы ELMA до 3.15.38 включительно.
Контекстные переменные:
- 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)); // - добавление пользователей в список на ознакомление