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

Last updated 13 days ago

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

Типы событий

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

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

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

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

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

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

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

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

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

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

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

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

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

Измененные данные (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": "Отказано в доступе!"
}
}

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

Действия

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

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