mybpm!
Скачать в формате: PDF pdf DOCX word

OUT Migration Kafka концепт

Каким образом производится внешняя миграция через Apache Kafka?

Внешняя миграция через кафку производится таким способом, что в кафке создаётся топик с каким-то названием, дальше этот топик регистрируется в системе и после регистрации, система обращается в данный топик и начинает записывать различные события (создание новой инстанции, обновление инстанции и тд.) в виде JSON определенного ниже формата по выбранным бизнес объектам (БО) в настройках out миграции,

Детальнее это показано здесь

Важные нюансы миграции:

  1. Уникальные поля передаются всегда, вне зависимости выбрали ли вы их в настройках или нет, и вне взависимости есть ли по ним какие-то изменения или нет. Если по ним нет изменении, они передаются как unchangedUniqueFields или unchangedUniqueBoFields, если изменения есть то они передаются как обычно в fields или boFields. Но учтите, что в случае если у уникального поля нет значения или если она системная, то она не передается.

  2. Важно понимать, что система не имеет возможности отличить создание инстанции БО от её изменения, поэтому информации этом в выгружаемых 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        - Запись предназначена для режима тестирования