Перейти к содержанию

Интеграция с 1С

Преобразования

Модели для сервиса объявляются с указанием тегов. Например, часть объявления модели VehicleKind выглядит следующим образом:

func (VehicleKind) Fields() []ent.Field {
    return []ent.Field{
        // ...
        field.String(`cargo_name`).
            Optional().
            Nillable().
            StructTag(`json:"cargo_name,omitempty" cargo:"Description"`).
            Comment(`Название, 1С:Description`),
        // ...
        field.String(`class_uid`).
            Optional().
            Nillable().
            StructTag(`json:"class_uid,omitempty" cargo:"КлассТС" transform:"empty_uid_to_null"`).
            Comment(`Класс транспортного средства, 1С: КлассТС`),
    }
}

Такое объявление после запуска кодогенерации с помощью команды make ent приведёт к появлению структуры, часть которой выглядит следующим образом:

type VehicleKind struct {
    // ...
    // Название, 1С:Description
    CargoName *string `json:"cargo_name,omitempty" cargo:"Description"`
    // ...
    // Класс транспортного средства, 1С: КлассТС
    ClassUID *string `json:"class_uid,omitempty" cargo:"КлассТС" transform:"empty_uid_to_null"`
}

В данном случае стоит обратить внимание на тег "cargo" — с его помощью задаётся соответствие текущего поля модели и поля интегрируемой сущности в 1С.

Таким образом, объявляются соответствия:

VehicleKind.CargoName = CatalogObject.ТипыТС->Description

VehicleKind.ClassUID  = CatalogObject.ТипыТС->КлассТС

Помимо такой привязки, существуют ещё правила преобразований, которые задаются тегом transform.

В примере выше для поля ClassUID тегу transform задаётся значение empty_uid_to_null.
Такая запись обозначает, что полученное значение нужно обработать с помощью внутренней функции, именуемой empty_uid_to_null.
Эта функция преобразует пустые GUID-ы к пустому значению в Go, то есть, условно:

`00000000-0000-0000-0000-000000000000` -> (nil)