Двойная генерация по шаблону
Двойная генерация по шаблону может использоваться при создании документа в системе.
Например: Используется шаблон для генерации документа, так как в этот момент документ ещё не зарегистрирован в системе, то в сгенерированный шаблон регистрационный номер не вставляется. Нужно, чтобы после регистрации этот номер автоматически добавлялся в документ.
Данный функционал можно реализовать при помощи процесса, выглядеть он будет следующим образом:
Рассмотрим каждую операцию в отдельности.
1. Операция "Выбор документа"
На вкладку Контекст добавляем переменную с типом документ. В эту переменную будет сохранена конечная версия документа.
2. Операция "Первая генерация по шаблону"
На вкладке Настройки добавляем шаблон и переменную типа файл, в которую будет сохранен сгенерированный документ.
Так как генерация происходит в два этапа, шаблон будет выглядеть следующим образом:
Номер{‘{$Dokument.RegistrationCard[0].RegNumber}’}.
Первые фигурные скобки раскроются при первой генерации, а вторые — при второй.
Если в тексте шаблона повторно используются кавычки, то их следует указать двойными. Пример шаблона с использованием функции: {‘{Image({$Fayl};‘‘scale20‘‘)}’}.
3. Операция "Сценарий изменения версии"
Сценарий добавления новой версии (контекстная переменная Файл) в документ (контекстная переменная Документ) представлен ниже.
Пример сценария с использованием PublicAPI
Список переменных:
context.Dokument — переменная типа Документ;
context.Fayl — переменная типа Файл.
Пространство имен:
using EleWise.ELMA.API;
Текст сценария:
var DocVersion = PublicAPI.Docflow.DocumentVersion.AddDocumentVersion(context.Dokument, context.Fayl,PublicAPI.Enums.Documents.DocumentVersionStatus.Current); PublicAPI.Docflow.DocumentVersion.RenameVersionFile(DocVersion, "имя файла1.rtf", false);
Пример сценария без использования PublicAPI
Для корректной работы сценария требуется подключить сборку:
Пространства имен:
using EleWise.ELMA.Documents.Managers;using EleWise.ELMA.Runtime.Managers; using EleWise.ELMA.Services; using EleWise.ELMA.Templates;
Текст сценария:
var version = InterfaceActivator.Create<DocumentVersion>(); version.Document = context.Dokument; version.File=context.Fayl; version.Name = "версия из генерации"; version.Status = DocumentVersionStatus.Current;//устанавливаем статус версии Текущая version.File.Name="имя файла1.rtf"; context.Dokument.Versions.Add(version); context.Dokument.Save();
4. Операция "Регистрация документа"
На данном этапе получаем регистрационный номер, который будем использовать в шаблоне.
5. Операция "Сценарий второй генерации по шаблону"
Вторая генерация происходит при помощи сценария, здесь же меняется версия документа. В качестве шаблона используем документ, полученный после первой генерации.
Пример сценария с использованием PublicAPI
Пространство имен:
using EleWise.ELMA.Services; using EleWise.ELMA.Documents.Managers; using EleWise.ELMA.Runtime.Managers; using EleWise.ELMA.API;
Текст сценария:
var versionFile = Locator.GetServiceNotNull<IDocumentFileManager>().GetFileByDocumentId(context.Dokument.Id); var file = Locator.GetServiceNotNull<ITemplateFileManager>().CreateFromTemplate(versionFile.Id); // Генерируем документ PublicAPI.Services.DocumentGenerator.Generate(file, context); // Сохраняем файл сгенерированного документа PublicAPI.Services.File.SaveFile(file); // Записываем результат в переменную var DocVersion = PublicAPI.Docflow.DocumentVersion.AddDocumentVersion(context.Dokument, file, PublicAPI.Enums.Documents.DocumentVersionStatus.Current); PublicAPI.Docflow.DocumentVersion.RenameVersionFile(DocVersion, "имя файла2.rtf", false);
Пространство имен:
using EleWise.ELMA.API;
Текст сценария:
var versionFile = Locator.GetServiceNotNull<IDocumentFileManager>().GetFileByDocumentId(context.Dokument.Id); var file = Locator.GetServiceNotNull<ITemplateFileManager>().CreateFromTemplate(versionFile.Id); // Создаем генератор var generator = Locator.GetServiceNotNull<DocumentGeneratorManager>().Create(file.ContentFilePath); // Генерируем документ generator.Generate(context); // Сохраняем файл сгенерированного документа Locator.GetServiceNotNull<IFileManager>().SaveFile(file); // Записываем результат в переменную var DocVersion = PublicAPI.Docflow.DocumentVersion.AddDocumentVersion(context.Dokument, file,PublicAPI.Enums.Documents.DocumentVersionStatus.Current); PublicAPI.Docflow.DocumentVersion.RenameVersionFile(DocVersion, "имя файла2.rtf", false);
Пример сценария без использования PublicAPI
Для корректной работы сценария требуется подключить сборку:
Пространства имен:
using EleWise.ELMA.Documents.Managers;using EleWise.ELMA.Runtime.Managers; using EleWise.ELMA.Services; using EleWise.ELMA.Templates;
Текст сценария:
var version = InterfaceActivator.Create<DocumentVersion>(); version.Document = context.Dokument; var versionFile = Locator.GetServiceNotNull<IDocumentFileManager>().GetFileByDocumentId(context.Dokument.Id); var file = Locator.GetServiceNotNull<ITemplateFileManager>().CreateFromTemplate(versionFile.Id); // Создаем генератор var generator = Locator.GetServiceNotNull<DocumentGeneratorManager>().Create(file.ContentFilePath); // Генерируем документ generator.Generate(context); // Сохраняем файл сгенерированного документа Locator.GetServiceNotNull<IFileManager>().SaveFile(file); // Записываем результат в переменную version.File=file; version.Name = "версия из генерации"; version.Status = DocumentVersionStatus.Current;//устанавливаем статус версии Текущая version.File.Name="имя файла2.rtf"; context.Dokument.Versions.Add(version); context.Dokument.Save();
6. Операция "Вывод документа для просмотра"
После прохождения всего процесса в документ запишется:
Номер В1-СКР-13-001
Где «В1-СКР-13-001» - искомый регистрационный номер.