File

Компонент для загрузки файлов. Позволяет загружать файлы в контент нод. Для дочерних ассоциаций поддерживается задание type/kind.

../../../../../_images/file_8.png

При добавлении нового компонента Файл на форме достаточно указать правильный Имя свойства/Property Name (или оставить по умолчанию _content, если подразумевается редактирование основного контента у документа). Все остальные настройки работают “из коробки”.

Выбор способа загрузки файлов осуществляется во вкладке Файл - поле Хранилище/Storage с значениями URL или Base64.

../../../../../_images/file_9.png

Настройка компонента

Для настройки компонента необходимо перейти во вкладку Файл, в поле Хранилище выбрать Url, в поле url прописать endpoint для загрузки файлов - /share/proxy/alfresco/eform/file.

../../../../../_images/file_1.png

Привязка компонента к конкретному атрибуту выполняется стандартно, аналогично другим компонентам.

Для привязки type/kind необходимо перейти на вкладку Файл, и заполнить Типы файлов. Название поля - заголовок для отображения, Значение - ключ type/kind, который должен быть сформирован по следующему паттерну - node-uuid_type/node-uuid_kind, при этом, возможно указание только type - node-uuid_type. Обратите внимание, что нужно использовать именно node_uuid, а не nodeRef полностью. Например - category-document-type/kind-d-scan-documents.

../../../../../_images/file_2.png

Настройка отображения названия файла

На вкладке Файл добавлена возможность настраивать отображение названий файлов в списке - настройка Отображаемое имя значения. Поле принимает javascript-выражение, в котором необходимо присвоить переменной disp строку, либо Promise.

../../../../../_images/file_4.png

Помимо стандартных переменных formio, доступных при написании javascript-выражений (data, instance, _ и т.д.) добавлены дополнительные:

  • originalFileName - содержит название файла по-умолчанию

  • file - объект, содержащий различную информацию о файле

  • record - Promise, полученный путём вызова Records.get(file.data.recordRef). Если файл не связан ни с каким recordRef, значение record будет равно null.

Примеры использования настройки Value display name:

// Пример 1. Статическое название
disp = 'staticName.txt';
// Пример 2. Название, вычисленное асинхронно
disp = new Promise(resolve => {
  // какие-то асинхронные действия
  // ...
  resolve('Асинхронное название файла')
});
// Пример 3. Использование record
disp = record ? record.load('.disp').then(result => `${result}.pdf`) : originalFileName;

Настройка отображения отдельных элементов компонента

На вкладку Отображение добавлена дополнительная настройка Элементы отображения, которая позволяет задавать условия отображения отдельных элементов (например, кнопка удаления файла, upload-зона с кнопкой для добавления нового файла).

Поле принимает javascript-выражение, в котором необходимо присвоить переменной value объект с необязательными свойствами upload, delete. Если какое-то из свойств не указано, то компонент сам будет решать, отображать элемент или скрывать, в зависимости от ситуации.

value = {
    upload: false,
    delete: false
}
../../../../../_images/file_5.png

Бэкенд

Для корректной работы контрола в режиме редактирования у значения “контент” должен быть реализован метод getAs с аргументом “content-data”, который вернет структуру следующего содержания:

[
    {
        “url“: “ссылка_которая откроется при клике на файл.“
        “name“: “Имя файла“
        “size“: размер_файла_в_байтах
    }
]

Синхронизация с виджетом документов

Для синхронизации с виджетом документов на форму нужно добавить поле docs:documents с контролом file:

../../../../../_images/file_6.png

На вкладке Файл указать тип(ы), с которыми следует загружать новые файлы (если файл загрузить без типа, то в виджете он не появится):

../../../../../_images/file_7.png