OUT Migration Kafka концепт
Каким образом производится внешняя миграция через Apache Kafka?
Внешняя миграция через кафку производится таким способом, что в кафке создаётся топик с каким-то названием, дальше этот топик регистрируется в системе и после регистрации, система обращается в данный топик и начинает записывать различные события (создание новой инстанции, обновление инстанции и тд.) в виде JSON определенного ниже формата по выбранным бизнес объектам (БО) в настройках out миграции,
Детальнее это показано здесь
Важные нюансы миграции:
Уникальные поля передаются всегда, вне зависимости выбрали ли вы их в настройках или нет, и вне взависимости есть ли по ним какие-то изменения или нет. Если по ним нет изменении, они передаются как unchangedUniqueFields или unchangedUniqueBoFields, если изменения есть то они передаются как обычно в fields или boFields. Но учтите, что в случае если у уникального поля нет значения или если она системная, то она не передается.
Важно понимать, что система не имеет возможности отличить создание инстанции БО от её изменения, поэтому информации этом в выгружаемых JSON-данных не поступает. Поэтому в данными стоит работать в режиме
UPSERT или INSERT-ON-DUPLICATE-UPDATE
Режим
UPSERT
предполагает, что вначале нужно проверить наличие инстанции, если таковая есть, то обновить её. Иначе - создать новую.Режим
INSERT-ON-DUPLICATE-UPDATE
предполагает, что всегда нужно создавать новую запись. Предварительно нужно предусмотреть чтобы идентификатор инстанции является уникальным полем (например первичным ключом). При этом стоит ожидать ошибку, что такая запись уже есть. И если эта ошибка появилась, то подавить её и выполнить обновление инстанции.
Структура JSON, каким оно должно быть.
{
"recordId": "12345",
"externalId": "bfsseVCjGC225bM@",
"id": "dgL9~4keReK7Z1qi",
"boCode": "BO",
"fields": [
{
"code": "textField",
"apiValue": "someValue"
},
{
"code": "textField2",
"apiValue": "someValue2"
}
],
"boFields": [
{
"fieldCode": "boTextField",
"toBoCode": "BO2",
"toFieldCode": "textFieldOfBO2",
"apiValue": "015252634519"
},
{
"fieldCode": "boTextField",
"toBoCode": "BO3",
"toFieldCode": "textFieldOfBO3",
"apiValue": "015256324519"
}
],
"unchangedUniqueFields": [
{
"code": "uniqueDynamicField",
"apiValue": "someValue"
}
],
"unchangedUniqueBoFields": [
{
"fieldCode": "uniqueBoField",
"toBoCode": "BO2",
"toFieldCode": "textFieldOfBO2",
"apiValue": "015252634519"
}
],
"state": "ACTUAL"
}
Подробнее о полях
recordId:Строка - Идентификатор данной записи, он должен быть уникальным в рамках всего топика.
Он используется для того чтобы запись обрабатывалась всего одни раз его затем,
система его запоминает и при повторной записи система его игнорирует.
externalId:Строка - Идентификатор внешней системы, которая загрузила данные на платформу MyBPM. Если инстанция была
создана внутри платформы, то данный идентификатор будет пустым.
id:Строка - Идентификатор инстанции БО - внутренний для платформы MyBPM.
boCode:Строка - Код бизнес объекта в которой, должны записаться данные.
fields:Массив - Поля со значениями для мигрированния .
code:Строка - Код поля в бизнес объекте .
apiValue:Строка - Значение из REST API.
boFields:Массив - Бизнес поля для миграций (вложенный бизнес объект).
fieldCode:Строка - Код поля, который принадлежит с кодом boCode.
toBoCode:Строка - Код бизнес объекта на которое указывает данное поле.
toFieldCode:Строка - Код поля у бизнес объекта toBoCode. Это поле должно быть уникальное
apiValue:Строка - Значение поле toFieldCode у бизнес объекта с кодом toBoCode.
unchangedUniqueFields:Массив - Объекты как в fields, но только для неизмененных уникальных полей.
code:Строка - Код поля в бизнес объекте .
apiValue:Строка - Значение из REST API.
unchangedUniqueBoFields:Массив - Объекты как в boFields, но только для неизмененных уникальных полей.
fieldCode:Строка - Код поля, который принадлежит с кодом boCode.
toBoCode:Строка - Код бизнес объекта на которое указывает данное поле.
toFieldCode:Строка - Код поля у бизнес объекта toBoCode. Это поле должно быть уникальное
apiValue:Строка - Значение поле toFieldCode у бизнес объекта с кодом toBoCode.
state:Строка - Состояние записи могут быть (ACTUAL, REMOVED, ARCHIVED, TEST), может отсутствовать,
если записи нету то state станет ACTUAL, а если запись есть то ничего не измениться
ACTUAL - Это актуальная запись которая доступна для работы.
REMOVED - Удалённая запись.
ARCHIVED - Архивированная запись.
TEST - Запись предназначена для режима тестирования