Для расширения возможностей, которые предоставляет пользователям Low-code, в системе существуют специальные
расширения. Расширения позволяют интегрировать необходимый пользователю функционал
в специальные точки, подготовленные для работы с пользовательскими виджетами.
Работа с расширениями возможна из пользовательского модуля. Модуль возможно создать на странице администрирования.
В созданном модуле необходимо создать виджет.
Для предпросмотра файлов используется расширение Предпросмотр файлов — Страница предпросмотра. Пользовательский виджет, интегрированный в расширение,
может принимать определенные точкой расширения данные в контекст для получения исходных данных.
В созданном виджете можно использовать исходные данные в следующих форматах:
Представленные данные передаются в пользовательский виджет для предпросмотра файлов из системы в качестве входных параметров.
В пользовательском интерфейсе в модуле предпросмотра создается виджет, настроенный для отображения в
данной точке расширения. На шаге инициализации выполняется специальная функция, определяющая, должен
ли виджет отображаться в данных условиях. Далее выполняется отображение шаблона виджета и выполнение его сценариев.
Во время отображения можно пользоваться виджетами, функциями шаблонизации и выполнения сценариев. За само отображение
файла отвечает виджет.
При начале работы точки расширения у модуля вызывается функция проверки условий для отображения виджета, возвращающая
в ответе результат, который позволяет определить необходимость отображения содержимого модуля в данной точке расширения.
При рендере виджета предпросмотра можно проверить условия, требуемые бизнес-сущностями, и далее принять решение
о необходимости отображения файла. Для примера мы можем отображать наш виджет только для пользователей, указавших
номер телефона в настройках профиля:
Рассмотрим, как вывести на форме предпросмотра ссылку на скачивание файла вместо превью. Для этого необходимо будет обратиться к полю контекста file. Ссылку на
загрузку файла можно получить с помощью метода FileItem.getDownloadUrl. Для передачи самой ссылки в шаблон добавим
поле link в контекст:
При помощи данного поля, используя виджет Код, можно вывести ссылку, по которой пользователь сможет скачать файл:
<ahref="<%= Context.data.link %>"id="link">Ссылка на загрузку</a>
При отображении шаблона можно использовать параметры контекста и сценариев, генерируемых шаблонизатором.
В шаблоне к переменной link выполняется обращение через данные контекста Context.data. Остается только модифицировать
пользовательский сценарий для получения ссылки на файл:
asyncfunctiononInit() {
// Получение ссылки на текущего пользователяconst user = await System.users.getCurrentUser();
// Получение данных пользователяconst userData = await user.fetch();
if(userData.data.mobilePhone === undefined) {
// Если телефон не задан, виджет не отображаетсяreturnfalse;
}
// Получение ссылкиawait renderLink();
returntrue;
}
asyncfunctionrenderLink(): Promise<void> {
if(!Context.data.file) {
// Если файла нет, выводится ошибкаthrownewError('no file');
}
// Получение ссылки для загрузки файла
Context.data.link = await Context.data.file.getDownloadUrl();
}
В данном сценарии выполняется работа в рамках функции инициализации, т. к. в нашем случае она позволяет подготовить данные для отображения виджета при инициализации расширения.
Начало работы с предпросмотром файлов
Для расширения возможностей, которые предоставляет пользователям Low-code, в системе существуют специальные расширения. Расширения позволяют интегрировать необходимый пользователю функционал в специальные точки, подготовленные для работы с пользовательскими виджетами.
Создание виджета
Работа с расширениями возможна из пользовательского модуля. Модуль возможно создать на странице администрирования. В созданном модуле необходимо создать виджет. Для предпросмотра файлов используется расширение Предпросмотр файлов — Страница предпросмотра. Пользовательский виджет, интегрированный в расширение, может принимать определенные точкой расширения данные в контекст для получения исходных данных. В созданном виджете можно использовать исходные данные в следующих форматах:
Представленные данные передаются в пользовательский виджет для предпросмотра файлов из системы в качестве входных параметров.
Сценарий работы
В пользовательском интерфейсе в модуле предпросмотра создается виджет, настроенный для отображения в данной точке расширения. На шаге инициализации выполняется специальная функция, определяющая, должен ли виджет отображаться в данных условиях. Далее выполняется отображение шаблона виджета и выполнение его сценариев. Во время отображения можно пользоваться виджетами, функциями шаблонизации и выполнения сценариев. За само отображение файла отвечает виджет.
Инициализация
При начале работы точки расширения у модуля вызывается функция проверки условий для отображения виджета, возвращающая в ответе результат, который позволяет определить необходимость отображения содержимого модуля в данной точке расширения. При рендере виджета предпросмотра можно проверить условия, требуемые бизнес-сущностями, и далее принять решение о необходимости отображения файла. Для примера мы можем отображать наш виджет только для пользователей, указавших номер телефона в настройках профиля:
async function onInit() { // Получение текущего пользователя const user = await System.users.getCurrentUser(); const userData = await user.fetch(); return userData.data.mobilePhone !== undefined; }
Шаблон в виджете
Рассмотрим, как вывести на форме предпросмотра ссылку на скачивание файла вместо превью. Для этого необходимо будет обратиться к полю контекста
file
. Ссылку на загрузку файла можно получить с помощью метода FileItem.getDownloadUrl. Для передачи самой ссылки в шаблон добавим полеlink
в контекст:При помощи данного поля, используя виджет Код, можно вывести ссылку, по которой пользователь сможет скачать файл:
<a href="<%= Context.data.link %>" id="link">Ссылка на загрузку</a>
При отображении шаблона можно использовать параметры контекста и сценариев, генерируемых шаблонизатором. В шаблоне к переменной
link
выполняется обращение через данные контекстаContext.data
. Остается только модифицировать пользовательский сценарий для получения ссылки на файл:async function onInit() { // Получение ссылки на текущего пользователя const user = await System.users.getCurrentUser(); // Получение данных пользователя const userData = await user.fetch(); if(userData.data.mobilePhone === undefined) { // Если телефон не задан, виджет не отображается return false; } // Получение ссылки await renderLink(); return true; } async function renderLink(): Promise<void> { if(!Context.data.file) { // Если файла нет, выводится ошибка throw new Error('no file'); } // Получение ссылки для загрузки файла Context.data.link = await Context.data.file.getDownloadUrl(); }
В данном сценарии выполняется работа в рамках функции инициализации, т. к. в нашем случае она позволяет подготовить данные для отображения виджета при инициализации расширения.