Двойная генерация по шаблону

Двойная генерация по шаблону может использоваться при создании документа в системе.
Например: Используется шаблон для генерации документа, так как в этот момент документ ещё не зарегистрирован в системе, то в сгенерированный шаблон регистрационный номер не вставляется. Нужно, чтобы после регистрации этот номер автоматически добавлялся в документ.

Данный функционал можно реализовать при помощи процесса, выглядеть он будет следующим образом:

Рассмотрим каждую операцию в отдельности.

1. Операция "Выбор документа"

На вкладку Контекст добавляем переменную с типом документ. В эту переменную будет сохранена конечная версия документа.

2. Операция "Первая генерация по шаблону"

На вкладке Настройки добавляем шаблон и переменную типа файл, в которую будет сохранен сгенерированный документ.

 

Так как генерация происходит в два этапа, шаблон будет выглядеть следующим образом:
Номер{‘{$Dokument.RegistrationCard[0].RegNumber}’}
Первые фигурные скобки раскроются при первой генерации, а вторые - при второй.

3. Операция "Сценарий изменения версии"

Сценарий добавления новой версии (контекстная переменная Файл) в документ (контекстная переменная Документ) представлен ниже.

Внимание!
Перед выполнением сценария убедитесь, что переменные Fayl и Document заполнены.

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

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

Список переменных: 

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

Для корректной работы сценария требуется подключить сборку:

Elewise.ELMA.Documents; Elewise.TemplateGenerator.Merged;

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

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

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

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

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);
Внимание!
Сценарий, указанный ниже, актуален для версии системы ELMA ниже 3.8.

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

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

Для корректной работы сценария требуется подключить сборку:

Elewise.ELMA.Documents; Elewise.TemplateGenerator.Merged;

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

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» - искомый регистрационный номер.

Прикрепленные файлы