Атрибут типа «Документ». Копирование записи вместе с прикреплённым документом с помощью сценария по нажатию кнопки
Введение
Здесь представлены инструкции по настройке сценария для клонирования записи вместе с файлами, прикреплёнными к атрибуту типа «Документ».
Сценарий для копирования файлов, прикреплённых к атрибуту типа «Изображение», можно настроить аналогичным образом.
См. также примеры работы с атрибутом типа «Документ»:
- Скачивание архива с файлами из всех строк таблицы с прикреплением архива к атрибуту
- Скачивание архива с файлами из выбранных строк таблицы или одной записи
- Скачивание файлов в папку на сервере
Структура атрибута типа «Документ»
- Атрибут типа «Документ» хранит одну или несколько ссылок на записи (документы) в системном шаблоне документа, к которым прикрепляются файлы (например, загруженные пользователями).
- В шаблоне документа имеется атрибут
currentRevision(текущая версия), который хранит ссылку на запись в системном шаблоне версии. - В шаблоне версии имеются атрибуты
title(имя) иcontent(содержимое), которые хранят имя файла и ссылку на файл, физически хранящийся в папкеStreamsна сервере.
Извлечение файлов из атрибута типа «Документ» с помощью N3
Чтобы считать файл из атрибута типа «Документ» с помощью выражения N3, необходимо:
-
получить объект с атрибутом:
("TemplateSystemName" "DocumentAttributeSystemName") object:findProperty ?DocumentAttribute. -
из объекта с атрибутом получить значение атрибута в текущей записи:
?item documentAttribute ?documentAttributeValue. -
из значения атрибута получить текущую версию документа:
?documentAttributeValue document:revision ?revision. -
из версии получить содержимое файла в формате
base64:?revision document:content ?content. -
из версии получить имя файла:
?revision document:title ?title.
Добавление файлов в атрибут типа «Документ» с помощью N3
Чтобы прикрепить к атрибуту типа «Документ» файл с помощью выражения N3, необходимо:
-
сформировать содержимое файла в формате
base64:?documentContentSource document:content ?content. -
сформировать имя файла:
?documentTitleSource document:title ?title. -
прикрепить полученный файл к атрибуту типа «Документ», т. е. поместить на него ссылку в версию:
(?content ?title) document:attach ?documentAttributeValue.
Прикладная задача
Необходимо настроить кнопку, которая будет создавать дубликат текущей записи и прикреплять к ней дубликаты всех файлов, прикреплённых к исходной записи. Если к исходной записи не прикреплен ни один файл, то создавать её дубликат не требуется.
Исходные данные
- Создайте приложение «Документооборот».
-
В приложении «Документооборот» создайте шаблон записи «Пакеты документов» с системным именем
DocumentPacksи следующими атрибутами:Название атрибута Системное имя Свойства Наименование пакета документов DocumentPackNameТип данных: текст Файлы документов AttachedFiles- Тип данных: документ
- Хранить несколько значений: флажок установлен
-
Поместите атрибуты «Наименование пакета документов» и «Файлы документов» на основную форму шаблона «Пакеты документов».
Настройка кнопки «Копировать пакет документов»
- Отройте шаблон записи «Пакеты документов».
- Перейдите на вкладку «Кнопки».
-
Создайте кнопку «Копировать пакет документов»:
- Контекст операции: запись
- Операция: вызвать событие «Нажата кнопка»
- Результат выполнения: навигация
- Переход к: предыдущая страница
-
Поместите кнопку «Копировать документ» на основную форму шаблона «Пакеты документов».
Настройка сценария «Копирование пакета документов»
- На странице администрирования приложения выберите пункт «Сценарии».
-
Создайте сценарий:
- Название: Копирование документа
- Системное имя: заполняется автоматически.
- Контекст выполнения: от имени системы
-
Отобразится конструктор сценария.
- Нажмите заголовок события «Нажатие кнопки».
-
Настройте свойства события:
- Тип: Нажатие кнопки
- Контекстный шаблон: Пакеты документов
- Кнопка: Копировать пакет документов
-
После действия «Нажата кнопка» создайте и настройте действие «Изменить значения переменных»:
- Операция со значениями переменных: заменить
- Переменная: originalRecord
- Настройте таблицу дочерних переменных.
Имя переменной Значение id Атрибут: ID Бизнес-логика
Это действие будет сохранять в переменную
originalRecord.idидентификатор исходной записи в шаблоне «Пакеты документов» для использования в последующих действиях. -
После события «Изменить значения переменных» создайте и настройте действие «Выполнить по условиям» следующим образом:
- Название условия: Файл прикреплён
- Выражение: N3
# Импортируем функции для работы# с данными текущего сеанса, переменными и записями@prefix variable: <http://comindware.com/ontology/session/variable#>.@prefix session: <http://comindware.com/ontology/session#>.@prefix object: <http://comindware.com/ontology/object#>.{#Находим атрибут AttachedFiles (Файлы документов)# в шаблоне DocumentPacks (Пакеты документов) и помещаем ID атрибута# в локальную переменную ?AttachedFilesAttribute("DocumentPacks" "AttachedFiles") object:findProperty ?AttachedFilesAttribute.#Находим переменную originalRecord из предыдущего действия#и помещаем её в локальную переменную ?originalRecordVariablesession:context variable:originalRecord ?originalRecordVariable.#Находим переменную originalRecord.id с ID исходной записи# в шаблоне «Пакеты документов» и помещаем ID записи# в локальную переменную ?docPackRecordId?originalRecordVariable variable:id ?docPackRecordId.# Считываем значение атрибута «Файлы документов» в исходной записи?docPackRecordId ?AttachedFilesAttribute ?.# Возвращаем true, если к атрибуту «Файлы документов»# прикреплён хотя бы один файлtrue -> ?value.}Бизнес-логика
Это действие будет инициировать вложенные в него действия, если в текущей записи «Пакеты документов» к атрибуту «Файлы документов» (с системным именем
AttachedFiles) прикреплён хотя бы один файл. -
Внутри действия «Выполнить по условиям» создайте действие «Создать запись» с целевым шаблоном «Пакеты документов».
Бизнес-логика
Это действие создаёт пустую запись в шаблоне «Пакеты документов», в которую последующие действия скопируют значения атрибутов «Наименование пакета документов» и «Файлы документов».
-
Внутри действия «Создать запись» создайте и настройте действие «Изменить значение атрибутов» следующим образом:
- Атрибут: Наименование пакета документов
- Операция со значениями: заменить
- Значение:N3
# Импортируем функции для работы# с данными текущего сеанса, переменными и записями@prefix variable: <http://comindware.com/ontology/session/variable#>.@prefix session: <http://comindware.com/ontology/session#>.@prefix object: <http://comindware.com/ontology/object#>.{# Находим атрибут DocumentPackName (Наименование пакета документов)# в шаблоне DocumentPacks (Пакеты документов)# и помещаем ID атрибута в локальную переменную ?PackNameAttribute("DocumentPacks" "DocumentPackName") object:findProperty ?PackNameAttribute.# Помещаем переменную originalRecord# в локальную переменную ?originalRecordVariablesession:context variable:originalRecord ?originalRecordVariable.# Помещаем ID исходной записи в шаблоне «Пакеты документов»# в локальную переменную docPackRecordId?originalRecordVariable variable:id ?docPackRecordId.# Возвращаем значение атрибута «Наименование пакета документов» из исходной записи?docPackRecordId ?PackNameAttribute ?value.}Бизнес-логика
Это действие копирует значение атрибута «Наименование пакета документов» из исходной записи в новую.
-
После действия «Изменить значение атрибутов» внутри действия «Создать запись» создайте и настройте действие «Повторять по количеству объектов» следующим образом:
- Переменная: document
- Атрибут или выражение для поиска объектов: формула
# Импортируем функции для работы# с данными текущего сеанса, переменными и записями@prefix variable: <http://comindware.com/ontology/session/variable#>.@prefix session: <http://comindware.com/ontology/session#>.@prefix object: <http://comindware.com/ontology/object#>.{#Находим атрибут AttachedFiles (Файлы документов)# в шаблоне DocumentPacks (Пакеты документов)# и помещаем ID атрибута в локальную переменную ?AttachedFilesAttribute("DocumentPacks" "AttachedFiles") object:findProperty ?AttachedFilesAttribute.# Помещаем переменную originalRecord# в локальную переменную originalRecordVariablesession:context variable:originalRecord ?originalRecordVariable.# Помещаем ID исходной записи в шаблоне «Пакеты документов»# в локальную переменную docPackRecordId?originalRecordVariable variable:id ?docPackRecordId.# Возвращаем значение атрибута «Файлы документов» из исходной записи?docPackRecordId ?AttachedFilesAttribute ?value.}Бизнес-логика
На каждой итерации цикла в переменную
documentбудет помещаться ссылка на запись в системном шаблоне документа с файлом, прикреплённым к атрибуту «Файлы документов» из исходной записи. -
Внутри действия «Повторять по количеству объектов» создайте и настройте действие «Изменить значение атрибутов» следующим образом:
- Атрибут: Файлы документов
- Операция со значениями: добавить
- Значение: N3
# Импортируем функции для работы# с документами и данными текущего сеанса@prefix document: <http://comindware.com/ontology/document#>.@prefix variable: <http://comindware.com/ontology/session/variable#>.@prefix session: <http://comindware.com/ontology/session#>.{# Помещаем переменную document# из действия «Повторять по количеству объектов»# в локальную переменную ?docsession:context variable:document ?doc.# Помещаем ссылку на прикреплённый файл# в локальную переменную ?revision?doc document:currentRevision ?revision.# Помещаем содержимое файла в формате Base64# в локальную переменную ?content?revision document:content ?content.# Помещаем имя файла в локальную переменную ?filename?doc document:title ?filename.#Собирем новый файл из имени и содержимого,# сохраняем его в папку Streams,#и возвращаем ID нового документа с прикреплённым файлом(?content ?filename) document:attach ?value.}Бизнес-логика
Это действие будет прикреплять к атрибуту «Файлы документов» в новой записи дубликат файла, прикреплённого к атрибуту «Файлы документов» из исходной записи.

Тестирование работы сценария
- Откройте шаблон «Пакеты документов» и нажмите кнопку «Перейти к экземплярам».
- Отобразится список записей в шаблоне «Пакеты документов».
-
Создайте запись и заполните форму:
- Введите «Наименование пакета документов».
- Прикрепите к полю «Файлы документов» несколько файлов.
-
Сохраните запись.
- Нажмите кнопку «Копировать пакет документов».
- Должен снова отобразиться список записей в шаблоне «Пакеты документов».
- В списке записей должна появиться новая запись — дубликат исходной.
- Откройте новую запись и убедитесь, что содержимое полей «Наименование пакета документов» и «Файлы документов» совпадает с содержимым исходной записи.
Эта статья была полезна 2 чел.