Интеграция с 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)