[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)); // - добавление пользователей в список на ознакомление