You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 25 Next »

SimpleOne поддерживает прикрепление файлов к созданным записям. 

Файлы можно прикрепить тремя способами:

  • с помощью действия вложения в правом верхнем углу
  • у поля типа Image
  • через виджет вложений

Действие вложения


Вы можете прикрепить файл к полю типа Image и к записи, используя действие вложения. Оно отображается на форме как иконка скрепки .

На скриншоте ниже отмечены два действия вложения на записи формы:

Виджет вложений


Вложения могут быть добавлены через виджет вложений. Для этого вам нужно использовать Simple-тег <attachment> внутри определенного экземпляра виджета. Необязательно указывать атрибуты recordId, tableName для тега <attachment>, расположенного на странице с формой. Поэтому шаблон виджета будет выглядеть следующим образом:

<attachment> </attachment> 

После добавления экземпляра виджета на форму агентского интерфейса стандартное действие в правом верхнем углу формы будет удалено:

Вы можете добавить файлы из буфера обмена в виджет прямо на форме с помощью сочетания клавиш Ctrl+V при наведении курсора на область загрузки файлов.

Добавление и управление вложениями


Вы можете прикрепить файлы следующими способами:

  • нажав на Выбрать файлы и добавив их через менеджер файл.
  • перетащив файлы в окно.
  • нажав клавиши Ctrl(Cmd) и на клавиатуре, чтобы вставить изображение из буфера обмена.
  • нажав на Добавить файл и выбрав их через менеджер файлов, если к записи уже были добавлены файлы.

Загрузка файлов


Чтобы прикрепить файл к записи, выполните следующие шаги:

  1. Перейдите в запись, к которой вам нужно прикрепить файл.
  2. Откройте окно вложений:
    • Нажмите на иконку скрепки в верхнем правом углу.
    • Нажмите на иконку скрепки рядом с названием поля.
  3. Прикрепите нужный файл. Вложенные файлы отображаются в верхней части формы или рядом с именем поля.
  4. Закройте окно вложений, чтобы вернуться к записи. 
  5. Нажмите Сохранить или Сохранить и выйти.


При загрузке файла через иконку вложений в правом верхнем углу запись сохранять не нужно. Прикрепленные файлы сохраняются автоматически на сервере.

На скриншоте ниже показано окно вложений:

Копирование вложений


Для копирования вложений используйте серверные скрипты. Это можно сделать одним из двух способов:

  • Используйте объект base64 исходного вложения. В силу специфики работы метода readBase64, размер копируемого файла ограничен 10 Мб.

    Пример
    const attachmentRec = new SimpleRecord('sys_attachment');
    attachmentRec.get('167654133500015741');
    ss.info(`Original size bytes: ${attachmentRec.size_bytes}`);
    // Info: Original size bytes: 92414492
    
    const attach = new SimpleAttachment();
    const base64Value = attach.readBase64(attachmentRec.sys_id);
    
    const attachCopyId = attach.writeBase64(
      attachmentRec.record_document_id,
      'copy_of_' + attachmentRec.file_name,
      base64Value,
      attachmentRec.mime_content_type
    );
    if (attachCopyId) {
      attachmentRec.get(attachCopyId);
      ss.info(`/record/sys_attachment/${attachCopyId}`);
      // Info: /record/sys_attachment/167654428100399185
      ss.info(`Copy size bytes: ${attachmentRec.size_bytes}`);
      // Info: Copy size bytes: 0
    }
  • Используйте класс SimpleAttachmentService. Максимальный размер копируемого файла определяется ограничением экземпляра на размер загружаемого вложения, которое задается системным свойством max_file_size_upload.

    Пример
    const attachmentRec = new SimpleRecord('sys_attachment');
    attachmentRec.get('167654133500015741');
    ss.info(`Original size bytes: ${attachmentRec.size_bytes}`);
    // Info: Original size bytes: 92414492
    
    const importSource = new SimpleRecord('sys_import_source');
    importSource.get('167647710807446665'); // From Incident Import Source
    const docId = ss.getDocIdByIds(importSource.sys_db_table_id, importSource.sys_id);
    
    const attach = new SimpleAttachment();
    const attachUrl = attach.getAttachmentUrlById(attachmentRec.sys_id);
    const simpleAttach = new SimpleAttachmentService();
    const docID = ss.getDocIdByIds(importSource.sys_db_table_id, importSource.sys_id);
    const attachCopyId = simpleAttach.createAttachmentByUrl(attachUrl, docId, `Copy_of_the_${attachmentRec.file_name}`);
    
    if (attachCopyId) {
      attachmentRec.get(attachCopyId);
      ss.info(`/record/sys_attachment/${attachCopyId}`);
      // Info: /record/sys_attachment/167654472004676912
      ss.info(`Copy size bytes: ${attachmentRec.size_bytes}`);
      // Info: Copy size bytes: 92414492
    }

Удаление вложений


Чтобы удалить прикрепленный файл, выполните следующие шаги:

  1. Перейдите в запись, у которой вам нужно удалить вложенный файл.
  2. Откройте окно вложений:
    • Нажмите на иконку скрепки в верхнем правом углу.
    • Нажмите на иконку скрепки рядом с названием поля.
  3. Удалите файл или файлы следующими способами:
    • Если прикреплен один файл, нажмите Удалить.
    • Если файлов несколько, наведите курсор на файл, который хотите удалить, нажмите на иконку с тремя точками и опцию Выбрать в контекстном меню. Повторите это действие для всех файлов. Затем нажмите Удалить.

    • Нажмите Выбрать все и Удалить, чтобы удалить все загруженные файлы.
  4. Закройте окно вложений, чтобы вернуться к записи. 
  5. Нажмите Сохранить или Сохранить и выйти.

При удалении файлов через иконку вложений в правом верхнем углу запись сохранять не нужно. Прикрепленные файлы удаляются автоматически на сервере.

Распознавание и индексация


Распознавание и индексация содержимого вложений возможны только в том случае, если размер прикрепленного файла не превышает 30 Мб. Лимит фиксирован и не может быть изменен. Если файл больше 30 Мб, он не будет распознан. Предупреждающее сообщение, связанное с индексацией, будет записано в логах. Вы сможете найти дополнительную информацию позже в таблице Основной журнал (sys_log), используя следующие критерии для фильтра:

  • Уровень равно Предупреждение.
  • Сообщение содержит {ID вложения}

Индексация выполняется только для определенных форматов файлов. Поле Контент будет автоматически заполнено текстовым содержимым прикрепленного файла, если расширение файла входит в список: TXT, INI, REG, CVS, JSON, HTM, HTML, DOC, DOCS, XLS, XLSX. Атрибут Полнотекстовый поиск активен для поля Контент. Этот атрибут позволяет выполнять глобальный поиск по содержанию поля.

Распознавание и индексация вложений – это фоновые процессы. В рамках этих процессов реализуются следующие события:

  1. Какой-то файл прикреплен к записи любой таблицы (например, к записи 164313550512027919 в таблице Task).
  2. После этого создается поисковый индекс для этого вложения. Технически, это запись в таблице Поисковые индексы (sys_search_index) с полями, заполненными следующим образом:

    ПолеТипЗначение
    Запись

    Big Integer

    164313646211541086

    Таблица

    Reference

    Вложения

    Колонка

    Reference

    Контент

    Текст

    Text

    В этом поле появляется контент вложения. 

  3. В записи таблицы Вложения (sys_attachment) помещается содержимое вложения, проанализированное из предоставленного файла. Содержимое вложения заполняется в поле Содержимое, а кодировка – в поле Кодировка. Кодировка содержимого определяется автоматически. 


Ссылка скачивания вложения


Ссылки на вложения могут использовать для различных целей:

  • скачивание одного файла из вложений
  • скачивания всех файлов из вложений в виде архива
  • использование ссылки на файл из вложений в HTML-тегах.

Помимо этого ссылки можно также использовать, чтобы:

  • добавлять изображения в тело поля HTML
  • добавлять изображения в виджет, задав значение атрибута scr. 

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

  • Ссылки на общедоступные вложения не имеют срока действия. 
  • Непубличные вложения по умолчанию имеют срок в 1 час с момента их создания. Время жизни ссылки определяется системным свойством s3.presigned.link.lifetime.

Атрибут Публичное на форме записи Вложений определяет публичность вложений. 

Чтобы скачать вложения, войдите в систему и используйте относительную ссылку /attachments/${sys_attachment.sys_id}. Вы также можете воспользоваться методом getAttachmentUrlById(attachmentId), чтобы сформировать ссылку через API. Чтобы узнать больше, обратитесь к статье SimpleAttachments.

В зависимости от публичности вложения, могут быть созданы две ссылки:

  • для непубличных вложений: https://s3-{your-instance-url}/attachment/9/b7/prp5bikeyg70mpn7mhfszi4amgzleo?response-content-disposition=inline%3B%20filename%3D%22image.png...
  • для публичных вложений: https://s3-{your-instance-url}/public-attachment/9/b7/prp5bikeyg70mpn7mhfszi4amgzleo?response-content-disposition=inline%3B%20filename%3D%22image.png...

Использование настроек REST API для создания вложений


Вы можете создавать вложения при помощи настроек REST API. Передача файлов осуществляется в формате base64, а для получения файлов в этом формате используется метод  readBase64(attachmentId)

Чтобы отправить вложение при помощи Scripted Rest API, выполните следующее:
1) Создайте действие API для обработки POST запросов с содержимым вложений.

Пример скрипта для действия API
(function (request, response) {
  const data = request.getBody();
  const TABLE_ID = data.table_id;
  const RECORD_ID = data.record_id;
  const RECORD_DOC_ID = ss.getDocIdByIds(TABLE_ID, RECORD_ID);
  const attachments = data.attachments;
  const simpleAttach = new SimpleAttachment();
  let createdAttachmentIds = [];
  Object.keys(attachments).forEach(attachment => {
    createdAttachmentIds.push(simpleAttach.writeBase64(RECORD_DOC_ID, ...attachments[attachment]));
  });
  response.setBody(createdAttachmentIds);

}) (SimpleApiRequest, SimpleApiResponse)


2) Создайте скрипт для отправки запросов.

Пример скрипта для отправки POST-запроса
const API_ACTION_URL = ''; 
const payloadRequest = sws.restRequestV1();
payloadRequest.setRequestUrl(API_ACTION_URL);
payloadRequest.setRequestMethod('POST');
payloadRequest.setRequestHeader('Content-type', 'application/json');
const payload = {
  table_id: '155931135900000084', // ID записи user
  record_id: '155931135900000001', // ID записи admin
 record  attachments: {
    1: ['file_example.gif', 'R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=', 'image/gif']
  }
}

payloadRequest.setRequestBody(JSON.stringify(payload));
const response = payloadRequest.execute().getBody();
print('Response: ' + response);

Больше информации о настройках в статье Настройки REST API.

  • No labels