Что такое действия?

Домой

Действия

Иногда возможностей PIM недостаточно, чтобы реализовать все сложные бизнес-требования предприятия. Например, нужно добавить специальную проверку у редактируемого Продукта или нужно обогатить данные при сохранении товара или нужно добавить специальную кнопку, чтобы добавить желаемое поведение. Тогда на помощь вам придут действия.

Действие — это собственная логика, написанная на языке JavaScript, которая исполняется на сервере. Для того, чтобы действие запустилось, необходимо настроить специальное событие вызова действия – триггер.

Создание действия

Для создания действия необходимо перейти в Настройки -> Действия. В открывшимся окне нажать кнопку + рядом со списком действий.

Далее необходимо заполнить поля:

  • обязательно уникальное поле Идентификатор (заполняется английскими буквами), которое служит ID для действия
  • поле Наименование – по нему вы сможете искать действие в фильтре
  • поле Порядковый номер – указание на то, в каком порядке исполнится ваша логика, если будет несколько одинаковых действий связанных с одинаковым событием

Ниже вы увидите две секции – ДЕЙСТВИЕ и ТРИГГЕРЫ. Секция ДЕЙСТВИЕ это поле, куда будет помещена логика – код на языке JavaScript. Секция ТРИГГЕРЫ нужна для добавления событий, при наступлении которых будет срабатывать действие.

Триггеры

Для того, чтобы собственная логика исполнилась нужно настроить триггеры – специальные события, при наступлении которых сервер PIM вызовет код, отвечающий за исполнение логики. PIM поддерживает различные типы триггеров. Чтобы добавить триггер нужно переместиться в секцию ТРИГГЕРЫ и нажать кнопку +.

В появившимся окне вы должны выбрать тип триггера.

Триггеры поддерживаю следующие типы:

  • Изменение объекта
  • Изменение зависимости
  • Кнопка
  • Группа атрибутов
  • Атрибут
  • Кнопка (в табличном виде)
  • Изменение статуса каналов
  • Список значений

Рассмотрим каждый из этих типов подробнее.

Изменение объекта

Триггер срабатывает при совершении действия над объектом в Модели данных PIM (например, над товаром). Выбирая данный тип триггера вы увидите окно:

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

  • перед созданием
  • после создания
  • перед изменение
  • после изменения
  • перед удалением
  • после удаления
  • перед показом

После этого вы выбираете тип объекта, для которого применим вызов действия. Нажмите на кнопку ВЫБРАТЬ ТИП ОБЪЕКТА и в дереве выберите подходящий для действия тип. Следующим шагом вам нужно выбрать объект в иерархии дерева объектов, начиная с которого будет применяться действия. Таким образом вы можете ограничить применимость действия списком конкретных объектов, а не просто всеми объектами данного типа. Нажмите кнопку ВЫБРАТЬ ОБЪЕКТ и в появившемся окне выберите корневой объект.

Завершая создания триггера нажмите кнопку СОЗДАТЬ.

Изменение зависимости

Триггер срабатывает при совершении действия над зависимостью в Модели данных PIM (например, над отношением товара и его категории). Выбирая данный тип триггера, вы увидите окно:

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

  • перед созданием
  • после создания
  • перед изменение
  • после изменения
  • перед удалением
  • после удаления
  • после изменения на клиенте

После этого вы выбираете тип зависимости, для которого применим вызов действия. Нажмите на кнопку ВЫБРАТЬ ЗАВИСИМОСТЬ и выберите подходящий для действия тип.

Завершая создания триггера нажмите кнопку СОЗДАТЬ.

Кнопка

При создании данного типа триггера в карточке объекта появится кнопа, при нажатии которой сработает соответствующее действие. Выбирая данный тип триггера, вы увидите окно:

В поле Текст на кнопке введите, то, что должно пользователь увидит на кнопке.

Вы можете выбрать опцию Запросить подтверждение выполнения, тогда после нажатие на кнопку у пользователя спросят, действительно ли он хочет совершить действие.

После этого вы выбираете тип объекта, для которого применим вызов действия. Именно в карточке этого типа объекта пользователь увидит кнопку. Нажмите на кнопку ВЫБРАТЬ ТИП ОБЪЕКТА и в дереве выберите подходящий для действия тип.

Следующим шагом вам нужно выбрать объект в иерархии дерева объектов, начиная с которого будет применяться действия. Таким образом вы можете ограничить применимость действия списком конкретных объектов, а не просто всеми объектами данного типа. Нажмите кнопку ВЫБРАТЬ ОБЪЕКТ и в появившемся окне выберите корневой объект.

Опционально вы можете выбрать роли, для которых применимо данное действие (только пользователи этих ролей увидят данную кнопку). Для выбора ролей нажмите кнопку РОЛИ

В появившемся окне выберите список ролей и нажмите кнопку ВЫБРАТЬ.

Группа атрибутов

Триггер срабатывает при совершении действия над метаданными Группа Атрибутов. Выбирая данный тип триггера, вы увидите окно:

Вы должны выбрать одно из действий над Группой Атрибутов, на которое будет реагировать PIM для запуска действия:

  • после создания
  • после изменения
  • после удаления

Завершая создания триггера нажмите кнопку СОЗДАТЬ.

Атрибут

Триггер срабатывает при совершении действия над метаданными Атрибут. Выбирая данный тип триггера, вы увидите окно:

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

  • перед созданием
  • после создания
  • перед изменение
  • после изменения
  • перед удалением
  • после удаления

Завершая создания триггера нажмите кнопку СОЗДАТЬ.

Кнопка (в табличном виде)

При создании данного типа триггера в окне поиска появится кнопа, при нажатии которой сработает соответствующее действие. Выбирая данный тип триггера, вы увидите окно:

В поле Текст на кнопке введите, то, что должно пользователь увидит на кнопке.

Вы можете выбрать опцию Запросить подтверждение выполнения, тогда после нажатие на кнопку у пользователя спросят, действительно ли он хочет совершить действие.

После этого вы выбираете тип объекта, для которого применим вызов действия. В окне поиска этого типа объекта пользователь увидит кнопку. Нажмите на кнопку ВЫБРАТЬ ТИП ОБЪЕКТА и в дереве выберите подходящий для действия тип.

Следующим шагом вам нужно выбрать объект в иерархии дерева объектов, начиная с которого будет применяться действия. Таким образом вы можете ограничить применимость действия списком конкретных объектов, а не просто всеми объектами данного типа. Нажмите кнопку ВЫБРАТЬ ОБЪЕКТ и в появившемся окне выберите корневой объект.

Опционально вы можете выбрать роли, для которых применимо данное действие (только пользователи этих ролей увидят данную кнопку). Для выбора ролей нажмите кнопку РОЛИ

В появившемся окне выберите список ролей и нажмите кнопку ВЫБРАТЬ.

Список значений

Триггер срабатывает при совершении действия над метаданными Список значений. Выбирая данный тип триггера, вы увидите окно:

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

  • перед созданием
  • после создания
  • перед изменение
  • после изменения
  • перед удалением
  • после удаления

Завершая создания триггера нажмите кнопку СОЗДАТЬ.

Исходный код

Логика действия пишется на языке JavaScript на вкладке ДЕЙСТВИЕ. При вызове действия со стороны сервера в него передается контекст – объекты, над которыми выполняется действие, и которые могут быть использованы в исходном коде. Эти объекты могут быть вызваны через переменные языка JavaScript.

Переменные контекста

item – объект над которым совершается действие

itemRelation – отношение над которым совершается действие

values – объект – измененные атрибуты

channels – объект – измененные каналы

models – объект-для работы с базой данных

Про концепцию моделей можно подробнее почитать по этой ссылке.

Сейчас поддерживаются следующие для модели следующих типов:

  • item
  • itemRelation
  • lov
  • channel

where – объект - результат поиска, результат выполнения триггера типа Кнопка в табличном виде

lov – объект – список значений, которые изменились

changes – объект – список значений, которые изменились

event – объект-событие, которое привело к вызову триггера (пример: AfterCreate, AfterUpdate)

user – имя пользователя, которым авторизовались в систему

roles – список объектов-ролей авторизованного пользователя

system – полезные системные библиотеки (fs, exec, awaitExec, fetch, URLSearchParams, mailer, http, https, http2, moment, XLSX, archiver, stream, pipe, FS, KafkaJS, extractzip)

isImport – флаг равный истине если действие вызвано с помощью API и ложь – если вызов произошел из интерфейса пользователя

Структура переменных контекста

Item это JSON объект, имеющий следующую структуру

{
	"id": "23",
	"path": "1.2.3.23",
	"identifier": "america_standard_16a_germany_socket_with_italian_socket_combination",
	"name": {
		"en": "America Standard 16A Germany Socket with Italian Socket Combination"
	},
	"typeId": "4",
	"values": {
		"moq": "For regular packaging,MOQ500PCS/model",
		"oem": true,
		"tag": [
			1
		],
		"size": "118mm*72.5mm",
		"brand": "",
		"color": 1,
		"model": "118-KL18 series",
		"style": "american style",
		"sample": "Free",
		"addDesc": {
			"de": "",
			"en": ""
		},
		"compAll": 89.47,
		"current": "16A",
		"voltage": "110V~250V",
		"mainComp": 60,
		"material": "Panel: golden aluminum",
		"packaging": "Regular:1pcs/non-woven bag,10pcs/box,100pcs/carton",
		"description": {
			"en": "Good Quality One Gang Electrical Wall Switch and Socket"
		},
		"additionComp": 100,
		"logisticComp": 100,
		"delivery_time": "15-25days after deposit,according the quantity"
	},
	"channels": {},
	"mimeType": "",
	"fileOrigName": "",
	"createdBy": "admin",
	"createdAt": "2020-09-18T10:35:14.630Z",
	"updatedBy": "admin",
	"updatedAt": "2023-11-21T08:29:34.663Z"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

itemRelation это JSON объект, имеющий следующую структуру

{
  "id": "5",
  "identifier": "rel_america_standard_16a_germany_socket_with_italian_socket_combination",
  "relationId": "1",
  "createdBy": "admin",
  "createdAt": "2020-09-18T10:36:52.351Z",
  "updatedBy": "admin",
  "updatedAt": "2020-09-18T10:36:52.351Z",
  "itemId": "23",
  "targetId": "55"
  "values": {}
}
1
2
3
4
5
6
7
8
9
10
11
12

Примеры кода

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

Изменение атрибута (триггер Изменение объекта – перед обновлением)

item.values.CNSiteMVP = true
item.changed('values',true)
1
2

Изменение атрибута (триггер Изменение объекта – после обновления)

item.values.CNSiteMVP = true
item.changed('values', true)
await item.save()
1
2
3

Поиск всех подходящий объектов в PIM

const items = await models.item.findAll({ where: { parentIdentifier: { [Op.in]: ids }, values: { EDActive: true } } })
1

Поиск первого подходящего объекта в PIM

const object = await models.item.findOne({where:{id: ngkId}})
1

Подробнее с поиском объектов по модели можно ознакомиться по этой ссылке.