Атрибут типа «Документ». Копирование записи вместе с прикреплённым документом с помощью сценария по нажатию кнопки
Введение
Здесь представлены инструкции по настройке сценария для клонирования записи вместе с файлами, прикреплёнными к атрибуту типа «Документ».
Сценарий для копирования файлов, прикреплённых к атрибуту типа «Изображение», можно настроить аналогичным образом.
См. также примеры работы с атрибутом типа «Документ»:
- Скачивание архива с файлами из всех строк таблицы с прикреплением архива к атрибуту
- Скачивание архива с файлами из выбранных строк таблицы или одной записи
- Скачивание файлов в папку на сервере
Структура атрибута типа «Документ»
- Атрибут типа «Документ» хранит одну или несколько ссылок на записи (документы) в системном шаблоне документа, к которым прикрепляются файлы (например, загруженные пользователями).
- В шаблоне документа имеется атрибут
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 из предыдущего действия
#и помещаем её в локальную переменную ?originalRecordVariable
session: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
# в локальную переменную ?originalRecordVariable
session: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
# в локальную переменную originalRecordVariable
session: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
# из действия «Повторять по количеству объектов»
# в локальную переменную ?doc
session: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 чел.