Изменение данных

Last updated last month

Запуск процесса при изменении данных в Бипиуме: создании, изменении, удалении записей.

Типы событий

События делятся на уведомления, запросы и действия:

  • Уведомления срабатывают после сохранения изменений

  • Запросы срабатывают перед тем как данные сохранены, они могут отменить операцию.

  • Действия срабатывают во время редактирования записи сотрудником и могут подменять значения полей

Подробнее о типах событий смотрите в статье «События».

Подписка на событие

  • В отделе «Управление» в каталоге «События» добавьте новую запись (событие, по которому будет запускаться процесс).

  • Укажите название. Например, ту задачу, которую выполняет процесс.

  • Выберите каталог, в котором хотите отслеживать изменение записей.

  • Выберите тип события для запуска сценария. Подробнее в статье «События».

  • В поле «Выполнить» выберите или создайте новый сценарий.

Входные параметры процесса

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

Измененные данные (values)

Все события во входных параметрах содержат объект values — значения всех полей созданной/удаленной записи и измененных полей при изменении записи. Ключи объекта — идентификаторы полей. Формат значений для разных типов полей разный:

  • Однострочный текст = "Однострочный текст"

  • Многострочный текст = "Многострочный текст"

  • Дата = "2015-11-06T21:00:00.000Z"

  • Категория / набор галочек = [2] или несколько значений [2,3,4], без значения []

  • Вопрос = 2

  • Число = 3.2

  • Прогресс = 28(допустимо от 0 до 100)

  • Звезды = 5 (допустимо от 0 до 5)

  • Контакт = массив объектов:[ {"contact": "8-901-234-56-78", comment: "Секретарь"}, {...} ]

  • Связанная запись = массив объектов: [ {catalogId: '11', recordId: '91', catalogTitle: 'Название каталога', recordTitle: 'Название записи', isRemoved: false}, {...} ]

  • Сотрудник = массив объектов: [ {id: '21', title: 'Имя', isRemoved: false}, {...} ]

  • Файл = массив объектов:

    [ {title: "имя", url: "http://путь", size: 45654, mimeType: "image/png"}, {...} ] где mimeTypeдопустимые значения

Как получить значение измененного поля?

Чтобы получить значение, например, 4-го поля в измененных данных, используйте компонент назначение переменных и укажите выражение values['4']. Если 4-е поле было изменено, вы получите его значение, если нет, то переменная будет пуста.

Как получить значение сложного поля?

Для сложных типов полей (значения которых представлены массивом, например: категория, связанный объект, контакт, сотрудник, файл) значение переменной будет равно массиву. Чтобы узнать сколько значений в массиве используйте выражение values['4'].length, а чтобы получить значение, например, 0-го элемента массива: values['4'][0], чтобы обратится к его свойству, например recordId у поля типа связанный объект: values['4'][0].recordId.

Однако, если вы обратитесь к параметру (например recordId) к элементу массива, которого нет (например, когда поле не было изменено, и в values нет ключа с идентификатором поля), то сценарий прервется с ошибкой. Поэтому, прежде чем получить свойство у объекта в массиве, нужно сначала проверить что массив не пустой. А прежде чем проверить, что он не пустой, нужно проверить что он существует (поле было изменено и в values есть ключ с этим идентификатором). Это можно сделать с помощью компонентов ветвления сценария (шлюзов) и проверки условий на исходящих соединительных линиях, или с помощью выражения: values['4'] && values['4'].length && values['4'][0].recordId.

Это выражение проверяет наличие изменения в 4-м поле, и если оно есть, то проверяет что в 4-м поле в массиве есть они элементы, и если есть хотя бы одно, то берется значение свойства recordId в 0-м элементе. Именно это значение будет присвоено переменной. Если что-то не выполняется, то переменной будет присвоено false.

Уведомления

Уведомления — события, которые срабатывают после того как изменения сохранены в базу Бипиума.

Уведомление о создании записи

Входные переменные:

  • catalogId(строка) — идентификатор каталога, в котором создали запись

  • recordId(строка) — идентификатор созданной записи

  • user(объект) — сотрудник изменивший запись, формат объекта: { id: "..." }

  • values(объект) — коллекция значений заполненных полей созданной записи. Ключи объекта — идентификаторы (ID) заполненных полей. Пример:

values: {
"2": "Record Title", // текстовое поле
"14": 123 // числовое поле
}

Как проверить задан ли user?

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

Проверить наличие входного параметра можно с помощью шлюза «или». Для этого на выходящую из шлюза ветку, которая соответствует отсутствию параметра user, нужно повесить условие typeof user === 'undefined'. А на вторую ветку, которая соответствует ситуации, когда параметр user задан — typeof user !== 'undefined'.

Уведомление об изменении записи

Входные переменные:

  • catalogId(строка) — идентификатор каталога, в котором изменили запись

  • recordId(строка) — идентификатор удаленной записи

  • user(объект) — сотрудник изменивший запись, формат объекта: { id: "..." }

  • values(объект) — коллекция значений измененных полей измененной записи. Ключи объекта — идентификаторы (ID) измененных полей. Пример:

values: {
"2": "Title", // текстовое поле
"14": 4562, // поле число
"15": "2017-10-11T08:01:28:000Z1" // поле дата
}
  • prevValues(объект) — коллекция предыдущих значений всех полей записи. Формат аналогичен объекту values.

Уведомление об удалении записи

Входные переменные:

  • catalogId(строка) — идентификатор каталога, в котором удалили запись

  • recordId(строка) — идентификатор измененной записи

  • user(объект) — сотрудник изменивший запись, формат объекта: { id: "..." }

  • values(объект) — коллекция значений всех полей удаленной записи. Ключи объекта — идентификаторы (ID) всех полей. Пример:

values: {
"2": "Title", // текстовое поле
"14": 4562, // поле число
"15": "2017-10-11T08:01:28:000Z1", // поле дата
"16": [ // поле связанный объект
{
"sectionId": "3",
"catalogId": "5",
"catalogTitle": "Клиенты",
"catalogIcon": "users-10",
"recordId": "33",
"recordTitle": "Место работы"
}
]
}

Запросы

Запросы — события, которые срабатывают до того как изменения сохранены базу Бипиума. Они позволяют блокировать применение изменений.

Запрос на создание записи

Входные переменные:

  • catalogId(строка) — идентификатор каталога, в котором хотят создать запись

  • user(объект) — сотрудник изменивший запись, формат объекта: { id: "..." }

  • values(объект) — коллекция значений заполненных полей создаваемой записи. Ключи объекта — идентификаторы (ID) заполненных полей. Пример:

values: {
"2": "Record Title", // текстовое поле
"14": 123 // числовое поле
}

Как проверить задан ли recordId?

В запросе на создание записи recordId не передается, так как запись еще не создана и не известно какой у неё будет ID. Если вы используете один и тот же сценарий на изменение записи и на создание, то вероятно захотите узнать, задан ли recordId или нет. Если вы проверите выражением ! recordId, то процесс завершится с ошибкой, когда параметр не задан.

Проверить наличие входного параметра можно с помощью шлюза «или». Для этого на выходящую из шлюза ветку, которая соответствует отсутствию параметра user, нужно повесить условие typeof recordId === 'undefined'. А на вторую ветку, которая соответствует ситуации, когда параметр user задан: typeof recordId !== 'undefined'.

Запрос на изменение записи

Входные переменные:

  • catalogId(строка) — идентификатор каталога, в котором хотят изменить запись

  • recordId(строка) — идентификатор записи, которую хотят изменить

  • user(объект) — сотрудник изменивший запись, формат объекта: { id: "..." }

  • values(объект) — коллекция значений измененных полей редактируемой записи. Ключи объекта — идентификаторы (ID) измененных полей. Пример:

values: {
"2": "Title", // текстовое поле
"14": 4562, // поле число
"15": "2017-10-11T08:01:28:000Z1" // поле дата
}
  • prevValues(объект) — коллекция предыдущих значений всех полей записи. Формат аналогичен объекту values.

Запрос на удаление записи

Входные переменные:

  • catalogId(строка) — идентификатор каталога, в котором хотят удалить запись

  • recordId(строка) — идентификатор записи, которую хотят удалить

  • user(объект) — сотрудник изменивший запись, формат объекта: { id: "..." }

  • values(объект) — коллекция значений всех полей удаляемой записи. Ключи объекта — идентификаторы (ID) всех полей. Пример:

values: {
"2": "Title", // текстовое поле
"14": 4562, // поле число
"15": "2017-10-11T08:01:28:000Z1", // поле дата
"16": [] // категории, набор галочек
}

Действия

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

Событие пока не доступно для процессов.

Но можно воспользоваться альтернативным решением на базе Вебхуков:

  • Во внешних запросах необходимо создать адрес для обращения вебхука.

  • На это событие, нужно создать вебкух «во время редактирования».

  • Во время изменения данных сработает созданный вебхук.

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

  • Получив запрос на этот адрес, Бипиум запустит связанный с ним процесс.

  • Процесс на вход получит те же данные, которые получил вебхук.

  • После того как ваш процесс отрабатывает, он вернет результаты Бипиуму, Бипиум перешлет их вебхуку, вебхук пробросит результат процесса сотруднику в его открытое приложение.

Коротко: Изменение данных → вебхук → (веб-запрос) → внешний запрос → процесс → (результат) → Бипиум → вебхук → карточка, открытая у сотрудника.

Изменение поля во время редактирования записи

Входные переменные:

  • catalogId(строка) — идентификатор каталога, в котором редактируют запись

  • recordId(строка) — идентификатор редактируемой записи

  • user(объект) — сотрудник изменивший запись, формат объекта: { id: "..." }

  • allValues(объект) — коллекция значений полей редактируемой записи. Ключи объекта — идентификаторы (ID) всех полей. Пример:

values: {
"2": "Title", // текстовое поле
"14": 4562, // поле число
"15": "2017-10-11T08:01:28:000Z1", // поле дата
"16": [] // категории, набор галочек
}
  • values(объект) — коллекция значений отслеживаемых полей редактируемой записи. Ключ объекта — идентификатор (ID) измененного отслеживаемого поля. Пример:

values: {
"2": "Title" // текстовое поле
}

Выходные параметры процесса

Названия всех служебных выходные переменных начинается с знака доллара ($).

Уведомления

Создание, изменение и удаление записи

Уведомления не ожидают возвращаемых значений от процесса.

Запросы

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

Создание, изменение и удаление записи

«Запрос на создание записи», «Запрос на изменение записи» и «Запрос на удаление записи» ожидают возвращаемые значения:

  • $status(строка) — код http-ответа: 200 — успех, 4xx (например, 400) — отказ сотруднику в операции

  • $body(объект) — объект содержащий свойство message для отображения сотруднику сообщения, в случае запрета изменения данных. Пример:

$body = {
"message": "Вы не можете удалить эту запись."
}

Также message может содержать объект с заголовком для всплывающего окна и текстом. Пример:

$body = {
"message": {
"title": "Информация",
"text": "Отказано в доступе!"
}
}

Чтобы вернуть эти значения как результат процесса, должны быть созданы переменные с такими названиями в сценарии до компонента «Конец процесса», например с помощью компонента «Назначение переменных».

Действия

Изменение полей во время редактирования

Событие пока не доступно.