Миксины
Внешние миксины атрибутов
Внешние миксины позволяют расширять атрибутивный состав записей в любой части системы, указывая только их ECOS тип.
Требования
Версия родительского проекта 2.21.0+ (для java 17) 1.49.0+ (для java 8) должна быть у приложения с источником данных и у приложения с описанием внешних миксинов.
Описание
Для описания новых атрибутов необходимо создать в любом микросервисе новый бин, который реализует интерфейс:
ru.citeck.ecos.records3.record.mixin.external.ExtAttMixinConfigurer
В этом интерфейсе 1 метод register, который принимает настройки, которые позволяют добавлять любое количество вычисляемых атрибутов.
Пример на Kotlin:
@Component
class CustomExtMixinConfigurer : ExtAttMixinConfigurer {
override fun configure(settings: ExtMixinConfig) {
settings.setEcosType("contract") // тип ECOS к которому добавляется новый атрибут. Атрибут добавляется к указанному типу и к его наследникам.
.addProvidedAtt("newExtAtt") // имя добавляемого атрибута
.addRequiredAtts(mapOf("ref" to "?id")) // атрибуты, которые нужны для вычисления значения нашего атрибута
.withHandler { // код по вычислению атрибута
EntityRef.create("emodel","person", "admin") // возвращаем просто ссылку на другую сущность
}
}
}
Пример на java:
public class CustomExtMixinConfigurer implements ExtAttMixinConfigurer {
@Override
public void configure(@NotNull ExtMixinConfig config) throws Exception {
Map<String, String> requiredAtts = new HashMap<>();
config.setEcosType("contract") // тип ECOS к которому добавляется новый атрибут. Атрибут добавляется к указанному типу и к его наследникам.
.addProvidedAtt("newExtAtt") // имя добавляемого атрибута
.addRequiredAtts(requiredAtts) // атрибуты, которые нужны для вычисления значения нашего атрибута
.withHandler(data -> { // код по вычислению атрибута
return EntityRef.create("emodel", "person", "admin"); // возвращаем просто ссылку на другую сущность
});
}
}
После описания новых атрибутов для типов ECOS можно пользоваться стандартным Records API для получения значения этих атрибутов.
Например, для загрузки нового атрибута в браузере можно выполнить следующий скрипт:
var rec = Records.get("emodel/contract@295ea260-df3e-493e-b27c-34b6c27e7fea"); // берем сущность с типом, на который мы добавили новый атрибут.
await rec.load("newExtAtt,", true); // загружаем значение нового атрибута