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

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

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

События

События делятся на уведомления, запросы и действия:
    Уведомления (after) срабатывают после сохранения изменений в базу, то есть поле того, когда запись уже создана, изменена или удалена
    Запросы (before) срабатывают перед тем как данные сохранены в базу, то есть базе их еще нет. Эти события могут отменить операцию сохранения/изменения/удаления записи.
    Действия срабатывают во время редактирования записи сотрудником, еще до того как он отправил данные на сохранения. Эти события могут подменять значения полей в карточке на экране сотрудника без сохранения их в базу.

Уведомление о создании записи (after create)

Срабатывает ПОСЛЕ того как создана новая запись в каталоге и эта операция сохранена в базу.
Входные переменные
Выходные переменные
1
event: {
2
id: "1",
3
type: "$record.after.create",
4
async: true
5
},
6
script: {
7
id: "7"
8
},
9
user: {
10
id: "2"
11
},
12
13
catalogId: "15",
14
recordId: "1234",
15
values: {
16
"2": "Record Title", // текстовое поле
17
"14": 123 // числовое поле
18
}
Copied!
Общие параметры событий
    event(объект) — параметры сработавшего события. Доступно с версии 1.5.2.
      id(строка) — идентификатор события в каталоге Событий.
      type(строка) — название типа события.
      async(булево) — признак запуска: true — асинхронно, false — синхронно.
    script(объект) — параметры запущенного сценария. Доступно с версии 1.5.2.
      id(строка) — идентификатор сценария в каталоге Сценарии.
    user(объект) — сотрудник вызвавший событие.
      id(строка) — идентификатор сотрудника или null, если вызвал другой процесс.
Дополнительные параметры события
    catalogId(строка) — идентификатор каталога, в котором создана запись.
    recordId(строка) — идентификатор созданной записи.
    values(объект) — коллекция значений заполненных полей созданной записи. Ключи объекта — идентификаторы заполненных полей. Формат описан ниже.
События типа уведомлений (after) не ожидают ответа.

Уведомление об изменении записи (after update)

Срабатывает ПОСЛЕ того как запись в каталоге была изменена и эта операция сохранена в базу.
Входные переменные
Выходные переменные
1
event: {
2
id: "2",
3
type: "$record.after.update",
4
async: true
5
},
6
script: {
7
id: "7"
8
},
9
user: {
10
id: "2"
11
},
12
13
catalogId: "15",
14
recordId: "1234",
15
values: {
16
"2": "Title", // текстовое поле
17
"14": 4562, // поле число
18
"15": "2017-10-11T08:01:28:000Z1" // поле дата
19
},
20
prevValues: {
21
"2": "Record Title", // текстовое поле
22
"14": 123 // числовое поле
23
}
Copied!
Общие параметры событий
    event(объект) — параметры сработавшего события. Доступно с версии 1.5.2.
      id(строка) — идентификатор события в каталоге Событий.
      type(строка) — название типа события.
      async(булево) — признак запуска: true — асинхронно, false — синхронно.
    script(объект) — параметры запущенного сценария. Доступно с версии 1.5.2.
      id(строка) — идентификатор сценария в каталоге Сценарии.
    user(объект) — сотрудник вызвавший событие.
      id(строка) — идентификатор сотрудника или null, если вызвал другой процесс.
Дополнительные параметры события
    catalogId(строка) — идентификатор каталога, в котором изменили запись.
    recordId(строка) — идентификатор измененной записи.
    values(объект) — коллекция значений измененных полей измененной записи. Ключи объекта — идентификаторы (ID) измененных полей. Формат описан ниже.
    prevValues(объект) — коллекция предыдущих значений всех полей записи. Формат аналогичен объекту values.
События типа уведомлений (after) не ожидают ответа.

Уведомление об удалении записи (after delete)

Срабатывает ПОСЛЕ того как запись в каталоге была удалена и эта операция сохранена в базу.
Входные переменные
Выходные переменные
1
event: {
2
id: "3",
3
type: "$record.after.delete",
4
async: true
5
},
6
script: {
7
id: "7"
8
},
9
user: {
10
id: "2"
11
},
12
13
catalogId: "15",
14
recordId: "1234",
15
values: {
16
"2": "Title", // текстовое поле
17
"14": 4562, // поле число
18
"15": "2017-10-11T08:01:28:000Z1", // поле дата
19
"16": [ // поле связанный объект
20
{
21
"sectionId": "3",
22
"catalogId": "5",
23
"catalogTitle": "Клиенты",
24
"catalogIcon": "users-10",
25
"recordId": "33",
26
"recordTitle": "Место работы"
27
}
28
]
29
}
Copied!
Общие параметры событий
    event(объект) — параметры сработавшего события. Доступно с версии 1.5.2.
      id(строка) — идентификатор события в каталоге Событий.
      type(строка) — название типа события.
      async(булево) — признак запуска: true — асинхронно, false — синхронно.
    script(объект) — параметры запущенного сценария. Доступно с версии 1.5.2.
      id(строка) — идентификатор сценария в каталоге Сценарии.
    user(объект) — сотрудник вызвавший событие.
      id(строка) — идентификатор сотрудника или null, если вызвал другой процесс.
Дополнительные параметры события
    catalogId(строка) — идентификатор каталога, в котором удалили запись
    recordId(строка) — идентификатор удаленной записи
    values(объект) — коллекция значений всех полей удаленной записи. Ключи объекта — идентификаторы (ID) всех полей. Формат описан ниже.
События типа уведомлений (after) не ожидают ответа.

Запрос на создание записи (before create)

Срабатывает ДО того как создана новая запись в каталоге, данные еще не сохранены в базу и могут быть отменены событием.
Входные переменные
Выходные переменные
1
event: {
2
id: "4",
3
type: "$record.before.create",
4
async: false
5
},
6
script: {
7
id: "7"
8
},
9
user: {
10
id: "2"
11
},
12
13
catalogId: "15",
14
values: {
15
"2": "Record Title", // текстовое поле
16
"14": 123 // числовое поле
17
}
Copied!
Общие параметры событий
    event(объект) — параметры сработавшего события. Доступно с версии 1.5.2.
      id(строка) — идентификатор события в каталоге Событий.
      type(строка) — название типа события.
      async(булево) — признак запуска: true — асинхронно, false — синхронно.
    script(объект) — параметры запущенного сценария. Доступно с версии 1.5.2.
      id(строка) — идентификатор сценария в каталоге Сценарии.
    user(объект) — сотрудник вызвавший событие.
      id(строка) — идентификатор сотрудника или null, если вызвал другой процесс.
Дополнительные параметры события
    catalogId(строка) — идентификатор каталога, в котором хотят создать запись
    values(объект) — коллекция значений заполненных полей созданной записи. Ключи объекта — идентификаторы (ID) заполненных полей. Формат описан ниже.
recordId отсутствует, так как запись в базе еще не создана и ей не присвоен ID.
Как проверить задан ли recordId?
Если вы используете один и тот же сценарий на изменение записи и на создание, то вероятно захотите узнать, задан ли recordId или нет. Если вы проверите наличие выражением ! recordId, то процесс завершится с ошибкой, когда параметр не задан. Так происходит так как переменная не определена.
Проверить наличие входного параметра можно с помощью шлюза «или». Для этого на выходящую из шлюза ветку, которая соответствует отсутствию параметра recordId, нужно задать условиеtypeof recordId === 'undefined'. А на вторую ветку, которая соответствует ситуации, когда параметр recordId задан: typeof recordId !== 'undefined'.
Событие ожидает разрешения применить или заблокировать сохранение данных.
Чтобы вернуть значения как результат процесса, нужно создать переменные в сценарии с такими названиями до компонента «Конец процесса», например с помощью компонента «Назначение переменных».
1
$status = 400
2
$body = {
3
"message": "Не верно указано поле 2"
4
}
Copied!
    $status(число) — код http-ответа:
      200 — разрешить операцию
      4xx (например, 400) — запретить операцию и выдать ошибку
    $body(объект) — объект с дополнительными параметрами:
      message (строка) — сообщение для отображения сотруднику, в случае запрета.
      message (объект) — также message может быть задан объектом, содержащий заголовок title (строка) и текст сообщения text (строка).

Запрос на изменение записи (before update)

Срабатывает ДО того как изменения записи сохранены в базу, и могут быть отменены событием.
Входные переменные
Выходные переменные
1
event: {
2
id: "5",
3
type: "$record.before.update",
4
async: false
5
},
6
script: {
7
id: "7"
8
},
9
user: {
10
id: "2"
11
},
12
13
catalogId: "15",
14
recordId: "1234",
15
values: {
16
"2": "Title", // текстовое поле
17
"14": 4562, // поле число
18
"15": "2017-10-11T08:01:28:000Z1" // поле дата
19
},
20
prevValues: {
21
"2": "Record Title", // текстовое поле
22
"14": 123 // числовое поле
23
}
Copied!
Общие параметры событий
    event(объект) — параметры сработавшего события. Доступно с версии 1.5.2.
      id(строка) — идентификатор события в каталоге Событий.
      type(строка) — название типа события.
      async(булево) — признак запуска: true — асинхронно, false — синхронно.
    script(объект) — параметры запущенного сценария. Доступно с версии 1.5.2.
      id(строка) — идентификатор сценария в каталоге Сценарии.
    user(объект) — сотрудник вызвавший событие.
      id(строка) — идентификатор сотрудника или null, если вызвал другой процесс.
Дополнительные параметры события
    catalogId(строка) — идентификатор каталога, в котором изменили запись.
    recordId(строка) — идентификатор измененной записи.
    values(объект) — коллекция значений измененных полей измененной записи. Ключи объекта — идентификаторы (ID) измененных полей. Формат описан ниже.
    prevValues(объект) — коллекция предыдущих значений всех полей записи. Формат аналогичен объекту values.
Событие ожидает разрешения применить или заблокировать сохранение данных.
Чтобы вернуть значения как результат процесса, нужно создать переменные в сценарии с такими названиями до компонента «Конец процесса», например с помощью компонента «Назначение переменных».
1
$status = 400
2
$body = {
3
"message": "Не верно указано поле 2"
4
}
Copied!
    $status(число) — код http-ответа:
      200 — разрешить операцию
      4xx (например, 400) — запретить операцию и выдать ошибку
    $body(объект) — объект с дополнительными параметрами:
      message (строка) — сообщение для отображения сотруднику, в случае запрета.
      message (объект) — также message может быть задан объектом, содержащий заголовок title (строка) и текст сообщения text (строка).

Запрос на удаление записи (before delete)

Срабатывает ДО того как изменения записи сохранены в базу, и могут быть отменены событием.
Входные переменные
Выходные переменные
1
event: {
2
id: "6",
3
type: "$record.before.delete",
4
async: false
5
},
6
script: {
7
id: "7"
8
},
9
user: {
10
id: "2"
11
},
12
13
catalogId: "15",
14
recordId: "1234",
15
values: {
16
"2": "Title", // текстовое поле
17
"14": 4562, // поле число
18
"15": "2017-10-11T08:01:28:000Z1", // поле дата
19
"16": [ // поле связанный объект
20
{
21
"sectionId": "3",
22
"catalogId": "5",
23
"catalogTitle": "Клиенты",
24
"catalogIcon": "users-10",
25
"recordId": "33",
26
"recordTitle": "Место работы"
27
}
28
]
29
}
Copied!
Общие параметры событий
    event(объект) — параметры сработавшего события. Доступно с версии 1.5.2.
      id(строка) — идентификатор события в каталоге Событий.
      type(строка) — название типа события.
      async(булево) — признак запуска: true — асинхронно, false — синхронно.
    script(объект) — параметры запущенного сценария. Доступно с версии 1.5.2.
      id(строка) — идентификатор сценария в каталоге Сценарии.
    user(объект) — сотрудник вызвавший событие.
      id(строка) — идентификатор сотрудника или null, если вызвал другой процесс.
Дополнительные параметры события
    catalogId(строка) — идентификатор каталога, в котором удалили запись
    recordId(строка) — идентификатор удаленной записи
    values(объект) — коллекция значений всех полей удаленной записи. Ключи объекта — идентификаторы (ID) всех полей. Формат описан ниже.
Событие ожидает разрешения применить или заблокировать сохранение данных.
Чтобы вернуть значения как результат процесса, нужно создать переменные в сценарии с такими названиями до компонента «Конец процесса», например с помощью компонента «Назначение переменных».
1
$status = 400
2
$body = {
3
"message": "Не верно указано поле 2"
4
}
Copied!
    $status(число) — код http-ответа:
      200 — разрешить операцию
      4xx (например, 400) — запретить операцию и выдать ошибку
    $body(объект) — объект с дополнительными параметрами:
      message (строка) — сообщение для отображения сотруднику, в случае запрета.
      message (объект) — также message может быть задан объектом, содержащий заголовок title (строка) и текст сообщения text (строка).

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

Срабатывает ВО ВРЕМЯ того как сотрудник редактирует карточку записи. Изменения еще не отправлены на сервер и вообще могут быть не сохранены. Событие может вернуть новые данные полей, которые будут подставлены в карточку на экране сотрудника.
Событие поддерживается начиная с версии 1.5.2.
Входные переменные
Выходные переменные
Версии Bpium ранее 1.5.2
1
event: {
2
id: "7",
3
type: "$record.updating",
4
async: false
5
},
6
script: {
7
id: "7"
8
},
9
user: {
10
id: "2"
11
},
12
13
catalogId: "15",
14
recordId: "1234",
15
values: {
16
"2": "New title" // текстовое поле
17
}
18
allValues: {
19
"2": "Title", // текстовое поле
20
"14": 4562, // поле число
21
"15": "2017-10-11T08:01:28:000Z1", // поле дата
22
"16": [] // категории, набор галочек
23
}
Copied!
Общие параметры событий
    event(объект) — параметры сработавшего события. Доступно с версии 1.5.2.
      id(строка) — идентификатор события в каталоге Событий.
      type(строка) — название типа события.
      async(булево) — признак запуска: true — асинхронно, false — синхронно.
    script(объект) — параметры запущенного сценария. Доступно с версии 1.5.2.
      id(строка) — идентификатор сценария в каталоге Сценарии.
    user(объект) — сотрудник вызвавший событие.
      id(строка) — идентификатор сотрудника или null, если вызвал другой процесс.
Дополнительные параметры события
    catalogId(строка) — идентификатор каталога, в котором редактируют запись
    recordId(строка) — идентификатор редактируемой записи. Если сотрудник редактирует новую запись, то переменная recordId будет не задана.
    values(объект) — коллекция значений измененных полей, вызвавших событие. Позволяет узнать какое именно поле менял сотрудник, изменяя запись. Ключи объекта — идентификаторы (ID) измененных полей. Формат описан ниже.
    allValues(объект) — коллекция значений всех полей редактируемой записи. Ключи объекта — идентификаторы (ID) всех полей. Формат аналогичен values.
recordId может отсутствовать для новых записей.
Как проверить задан ли recordId?
Если вы проверите наличие recordIdвыражением ! recordId, то процесс завершится с ошибкой, когда параметр не задан. Так происходит так как переменная не определена.
Проверить наличие входного параметра можно с помощью шлюза «или». Для этого на выходящую из шлюза ветку, которая соответствует отсутствию параметра recordId, нужно задать условиеtypeof recordId === 'undefined'. А на вторую ветку, которая соответствует ситуации, когда параметр recordId задан: typeof recordId !== 'undefined'.
Событие возвращает значения, для подстановки в карточку записи на экране сотрудника.
Чтобы вернуть значения как результат процесса, нужно создать переменные в сценарии с такими названиями до компонента «Конец процесса», например с помощью компонента «Назначение переменных».
1
$body = {
2
"message": "Не верно указано поле 2",
3
"values": {
4
"2": "Extra new Title", // текстовое поле
5
"14": 999, // поле число
6
}
7
}
Copied!
    $body(объект) — объект с дополнительными параметрами:
      message (строка) — сообщение для отображения сотруднику, в случае запрета.
      message (объект) — также message может быть задан объектом, содержащий заголовок title (строка) и текст сообщения text (строка).
      values(объект) — коллекция значений полей для подстановки в карточку. Ключи объекта — идентификаторы (ID) полей. Формат описан ниже.
Этот тип события не поддерживался в версиях Бипиума ранее 1.5.2. Реализовать поддержку события можно было используя механизм вебхуков.
Через вебхуки
    Во внешних запросах необходимо создать адрес для обращения вебхука.
    На это событие, нужно создать вебкух «во время редактирования».
    Во время изменения данных сработает созданный вебхук.
    В качестве адреса вебхука должен быть указан адрес внешнего запроса, который слушает Бипиум.
    Получив запрос на этот адрес, Бипиум запустит связанный с ним процесс.
    Процесс на вход получит те же данные, которые получил вебхук.
    После того как ваш процесс отрабатывает, он вернет результаты Бипиуму, Бипиум перешлет их вебхуку, вебхук пробросит результат процесса сотруднику в его открытое приложение.
Коротко: Изменение данных → вебхук → (веб-запрос) → внешний запрос → процесс → (результат) → Бипиум → вебхук → карточка, открытая у сотрудника.

Структура объекта values, allValues, prevValues

Все события во входных параметрах содержат объект 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.
Last modified 1yr ago