В ELMA365 вы можете массово добавлять или удалять элементы, а также обновлять их поля через скрипт, используя методы на языке TypeScript. Это позволяет снизить нагрузку на систему и уменьшить влияние установленных лимитов, когда нужно обработать большое количество данных. Например, если у вас настроена интеграция со сторонней системой, можно из неё загрузить каталог товаров в приложение.
Вы можете задать следующие методы в скриптах:
app.batch().save()
— массовое добавление элементов приложения;app.batch().update()
— массовое обновление полей элементов приложения;app.batch().delete()
— массовое удаление элементов приложения.
При написании скриптов с методами для массовых операций учитывайте следующие условия:
- за один запрос обрабатывается не более 10000 элементов. Это ограничение применяется ко всем указанным методам;
- чтобы выполнить массовое действие с элементами при помощи метода, у пользователя должны быть права на импорт данных этого приложения.
В статье рассмотрим на примерах, как использовать методы в скриптах. Подробнее читайте в справке ELMA365 TS SDK.
Метод массового добавления элементов
С помощью app.batch().save()
пакет элементов приложения обрабатывается за один запрос.
Используйте этот метод, чтобы:
- сохранить новые элементы в приложение;
- обновить поля существующих элементов. В этом случае укажите их идентификаторы, чтобы по ним найти нужные элементы, внести в них изменения и сохранить отредактированные элементы в базе данных.
Пример массового добавления
Предположим, компания использует для работы систему ELMA365. Сотрудники маркетинга также применяют сторонний сервис, в котором хранятся публикации по продукту и комментарии от клиентов.
Чтобы работники смежных отделов могли увидеть все данные в одном месте, информацию из этого внешнего сервиса можно массово перенести в ELMA365. Для этого нужно:
- Создать приложения для загрузки публикаций и комментариев.
- Настроить интеграцию через пользовательский модуль и добавить в интерфейс модуля две кнопки со скриптами:
- Добавить посты — для массового переноса всех публикаций из стороннего сервиса в ELMA365;
- Добавить комментарии — для загрузки всех комментариев к этим публикациям.
Шаг 1: Создать два приложения
Для начала создайте приложения, чтобы импортировать в них данные. При этом добавляйте свойства приложений в соответствии с полями публикаций и комментариев в сторонней системе. Рассмотрим на примере:
- Посты — содержит свойства:
- Название (
__name
) — системное свойство, создаётся автоматически; - Номер (
postID
) — тип Число (целое) для идентификационного номера, по которому во внешней системе определяется связь между публикацией и комментариями к ней, т. е. значения этого поля равны в связанных элементах; - Дата создания (
__createdAt
) — тип Дата/время для хранения даты создания поста; - Заголовок (
title
) — тип Строка (строка) для заголовка публикации; - Текст (
body
) — тип Строка (текст) для текста публикации; - Комментарии (
comments
) — тип Приложение (один) для ссылки на связанный комментарий.
- Комментарии — содержит свойства:
- Название (
__name
) — системное свойство, создаётся автоматически; - Номер (
postID
) — тип Число (целое) для идентификационного номера, по которому во внешней системе определяется связь между публикацией и комментариями к ней, т. е. значения этого поля равны в связанных элементах; - Дата создания (
__createdAt
) — тип Дата/время для хранения даты создания комментария; - Электронная почта пользователя (
email
) — тип Электронная почта для электронной почты пользователя, оставившего комментарий; - Сообщение (
body
) — тип Строка (текст) для текста комментария; - Посты (
post
) — тип Приложение (один) для ссылки на связанный пост.
С помощью этих свойств далее в скрипте определяются поля, в которые запишутся значения, переданные из внешнего сервиса. Подробнее про заполнение полей Комментарии и Посты типа Приложение (один) читайте в разделе «Пример массового обновления полей».
Шаг 2: Настроить загрузку данных через скрипт
После создания приложений настройте импорт данных из сторонней системы.
Для этого:
- В настроенном модуле интеграции перейдите на вкладку Настройки и нажмите кнопку Изменить форму.
- В открывшемся дизайнере интерфейсов:
- создайте кнопки Добавить посты и Добавить комментарии;
- на вкладке Скрипты на стороне клиента пропишите код, используя
app.batch().save()
. Этот код позволит импортировать данные в приложения, когда пользователь нажмёт кнопку Добавить посты или Добавить комментарии.
|
- Сохраните и опубликуйте изменения.
После этого кнопки отобразятся в настройках модуля интеграции. Теперь пользователь может использовать их, чтобы добавить новые элементы в приложения Посты и Комментарии.
Метод массового обновления полей элементов
Чтобы обновить множество полей элементов за один запрос, используйте в скрипте метод app.batch().update()
. При этом вы можете:
- указать правила такого обновления;
- определить критерии поиска элементов, которые нужно обновить;
- ограничить количество обновляемых элементов.
Пример массового обновления полей
В примере массового добавления элементов мы перенесли из сторонней системы данные в приложения Посты и Комментарии, используя в скрипте метод app.batch().save()
. При этом поля Посты в карточках комментариев и Комментарии в карточках публикаций пока остались пустыми, т. к. ссылки на связанные элементы не передаются из внешней системы, а создаются в ELMA365.
Чтобы сотрудники при работе в этих приложениях могли быстро находить нужную информацию, заполним эти пустые поля ссылками на связанные элементы.
Рассмотрим, как массово обновить поля, используя метод app.batch().update()
.
В сторонней системе связь между публикациями и комментариями определяется через поле Номер (postID
). Значение в нём одинаково в связанных элементах. Используем это свойство в скрипте, чтобы по нему найти нужные публикации и добавить ссылки в поле Посты на карточки комментариев.
Для этого:
- В настроенном модуле интеграции перейдите на вкладку Настройки и нажмите кнопку Изменить форму.
- В открывшемся дизайнере интерфейсов добавьте виджет Кнопка с названием Обновить поля.
- На вкладке Скрипты пропишите код, с помощью которого пользователь обновит связи между элементами приложений Посты и Комментарии. Если нажать кнопку Обновить поля, в карточках комментариев появятся ссылки в полях Пост.
|
- Сохраните и опубликуйте изменения.
После этого кнопка Обновить поля отобразится в настройках модуля интеграции. Теперь пользователь может использовать её, чтобы обновить поле Посты в карточках комментариев.
Метод массового удаления элементов
Вы можете удалить множество элементов приложения за один запрос, используя в скрипте метод app.batch().delete()
. При этом можно:
- определить условия поиска элементов, которые нужно удалить;
- указать количество удаляемых элементов.
Пример массового удаления элементов
В предыдущих примерах с помощью скриптов мы добавили данные из сторонней системы в приложения Посты и Комментарии и обновили поля их элементов.
Теперь настроим массовое удаление данных с помощью скрипта. Добавим на страницу модуля интеграции со сторонней системой две кнопки. При нажатии на них пользователь сможет удалить устаревшие элементы приложений Посты или Коментарии, например, записи, которые созданы до 01.01.2024 г.
Для этого:
- В модуле интеграции со сторонней системой перейдите на вкладку Настройки и нажмите кнопку Изменить форму.
- В открывшемся дизайнере интерфейсов добавьте виджет Кнопка, задайте название Удалить посты и тип Скрипт.
- К этой кнопке привяжите скрипт массового удаления. Укажите в нём условие поиска элементов и количество записей, удаляемых за один запрос. В процессе выполнения скрипта количество таких запросов определяется автоматически. В примере будем удалять элементы, созданные до 01.01.2024 г., по 100 штук.
Для этого в настройках кнопки на вкладке Основные в поле Выполняемый скрипт укажите название функцииdelete_posts
. Затем нажмите Сохранить и Открыть. - На открывшейся вкладке Скрипты добавьте следующий скрипт:
// Асинхронная функция, чтобы удалить все элементы из приложения Посты
async function delete_posts(): Promise<void> {
// указываем переменную, чтобы отследить количество удалённых элементов
let rows = 0;
// используем цикл для удаления всех элементов
do {
rows = await
// Добавляем метод для массового удаления элементов в приложении Посты и указываем критерий отбора элементов, а также количество записей в одном запросе на удаление
Context.fields.postsapp.app.batch().delete().where((f) => f.__createdAt.lt(new Datetime('2024-01-01'))).size(100).from(0).all();
}
while (rows > 0)
}
- Теперь аналогичным образом нужно создать ещё одну кнопку для удаления записей в приложении Комментарии. Удалять элементы будем по тем же условиям — в зависимости от их даты создания, по 100 штук.
Для этого на вкладке Шаблон добавьте виджет Кнопка. Выполните такие же настройки как для кнопки Удалить посты. При написании скрипта используйте код переменной приложения Комментарии. - Сохраните и опубликуйте обновления.
Теперь в настройках модуля отобразятся кнопки для удаления элементов из приложений Посты и Комментарии по дате их создания.