Перейти к содержанию

Атрибут «Документ». Формирование ссылки на файл

Введение

Comindware Platform позволяет прикрепить любые файлы к атрибуту типа «Документ».

Атрибут типа «Документ» хранит не сами файлы, а ссылки на них.

Эти файлы доступны для скачивания по прямой ссылке без предоставления доступа к атрибуту типа «Документ».

Здесь представлен пример настройки текстового атрибута в формате HTML, в который помещаются ссылки на файлы, загруженные в атрибут типа «Документ», с помощью выражения N3.

Структура атрибута типа «Документ»

  • Атрибут типа «Документ» хранит одну или несколько ссылок на записи (документы) в системном шаблоне документа, к которым прикрепляются файлы (например, загруженные пользователями).
  • В шаблоне документа имеется атрибут currentRevision (текущая версия), который хранит ссылку на запись в системном шаблоне версии.
  • В шаблоне версии имеются атрибуты title (имя) и content (содержимое), которые хранят имя файла и ссылку на файл, физически хранящийся в папке Streams на сервере. Чтобы считать файл из атрибута типа «Документ» с помощью выражения N3, необходимо:

  • получить объект с атрибутом:

    ("TemplateSystemName" "DocumentAttributeSystemName") object:findProperty ?DocumentAttribute. 
  • из объекта с атрибутом получить значение атрибута в текущей записи:

    ?item documentAttribute ?documentAttributeValue. 
  • из значения атрибута получить текущую версию документа:

    ?documentAttributeValue document:revision ?revision. 
  • из версии получить содержимое файла в формате base64:

    ?revision document:content ?content. 
  • из версии получить имя файла:

    ?revision document:title ?title. 
  • С помощью языка формул из атрибута типа «Документ» можно получить следующие данные:

    • текущую ревизию документа: $AttributeDocument->currentRevision;
    • имя файла из ревизии: $AttributeDocument->currentRevision->revisionFilename;
    • относительную ссылку из ревизии: $AttributeDocument->currentRevision->httpUri.

Прикладная задача

Имеется шаблон с атрибутом типа «Документ», к которому прикрепляются различные файлы.

Требуется настроить поле, в котором будут перечислены имена прикреплённых файлов со ссылками для их скачивания.

Исходные данные

В шаблоне «Заявки» (системное имя Заявки) имеется атрибут «Вложения» со следующими свойствами:

  • Тип: документ
  • Системное имя: Вложения
  • Хранить несколько значений: флажок установлен

Настройка шаблона

  1. Создайте текстовый атрибут со следующими свойствами:

    • Название: Ссылки для скачивания
    • Формат отображения: HTML-текст

      Важно!

      Если задать для атрибута другой формат отображения, HTML-теги будут отображаться как обычный текст.

    • Вычислять автоматически: флажок установлен

    • Вычисляемое значение:

      • Формула:
      # Из атрибута «Вложения» (Вложения) собираем URI и имена всех прикреплённых файлов 
      # и соединяем в HTML с разделителем <br/>
      # 'https://host-name' — имя хоста Comindware Platform
      FORMAT(
      "<ul>{0}</u>",
      LIST(
      JOIN(" ", from a in $Вложения select
      FORMAT("<a href='https://host-name{0}'>{1}</a>",
      LIST(a->currentRevision->httpUri, a->currentRevision->revisionFilename)
      )
      )
      )
      )

      или

      • N3
      # Импортируем функции для работы 
      # с документами и строками
      @prefix object: <http://comindware.com/ontology/object#>.
      @prefix document: <http://comindware.com/ontology/document#>.
      @prefix cmwstring: <http://comindware.com/logics/string#>.
      @prefix string: <http://www.w3.org/2000/10/swap/string#>.
      {
      # Находим атрибут «Вложения» и помещаем в ?filesAttribute
      ("Заявки" "Вложения") object:findProperty ?filesAttribute.
      # Запускаем цикл
      from {
      # Находим содержимое ?filesAttribute в текущей
      # записи и помещаем в ?file
      ?item ?filesAttribute ?file.
      # Получаем текущую ревизию документа и
      # помещаем в ?fileRevision
      ?file document:currentRevision ?fileRevision.
      # Получаем ссылку на файл без имени хоста
      # и помещаем в ?fileUri
      ?fileRevision document:httpUri ?fileUri.
      # Помещаем имя файла в ?fileName
      ?fileRevision document:name ?fileName.
      # Формируем строки с именами файлов и ссылками на них
      # и помещаем в ?formatUri
      # 'https://host-name' — имя хоста Comindware Platform
      ("<li><a href='https://host-name{0}'>{1}</a></li>" ?fileUri ?fileName) string:format ?formatUri.
      }
      # Формируем ?uriList из ?formatUri.
      select ?formatUri -> ?uriList.
      # Формируем из ?uriList маркированный список
      # и возвращаем его в значение атрибута
      (" " ?uriList) cmwstring:join ?listItems.
      ("<ul>{0}</u>" ?listItems) cmwstring:format ?value.
      }
  2. Поместите на форму атрибут «Ссылки для скачивания».

Тестирование

  1. Создайте запись в шаблоне «Заявки».
  2. Прикрепите несколько файлов к атрибуту «Вложения».
  3. Сохраните запись.
  4. В поле атрибута «Ссылки для скачивания» должен отобразиться маркированный список со ссылками для скачивания прикреплённых файлов.
  5. Проверьте, скачиваются ли файлы.
К началу