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