Как можно подменить entity в StandardEditor?

Здравствуйте. Необходимо что-бы существовала единственная сущность CompanySettings для каждого tenant. При заходе в StandardEditor данной сущности необходимо брать существующую сущность из базы данных или создавать новую, если таковая в базе отсутствует.

@Subscribe
private fun onInit(event: InitEvent) {
    val existedEntity = dataManager.load(CompanySettings::class.java).all().list().firstOrNull()
    if (existedEntity != null) {
        setEntityToEdit(existedEntity)
    }
}

Подобный код не имеет эффекта. Подобный же код для onInitEntity также не работает. Не могли бы вы подсказать правильно подменить автоматически создаваемую сущность для StandardEditor?

Просто вы выполняете этот код слишком рано.
Редактируемая сущность на экран редактирования загружается после инициализации экрана и переписывает ваши старания :).
Делайте эту подмену в слушателе BeforeShowEvent.

Спасибо за ответ. В итоге так сделал. Вместо setEntityToEdit() через editedEntityContainer.item сделал подмену, с setEntityToEdit() не работало.

@UiController(“CompanySettings.edit”)
@UiDescriptor(“company-settings-edit.xml”)
@EditedEntityContainer(“companySettingsDc”)
class CompanySettingsEdit : StandardEditor() {
@Autowired
private lateinit var dataManager: DataManager

@Subscribe
private fun onBeforeShow(event: BeforeShowEvent) {
    val existedEntity = dataManager.load(CompanySettings::class.java).all().list().firstOrNull()
    if (existedEntity != null) {
        setEntityToEdit(existedEntity)
        editedEntityContainer.item = existedEntity
    }
}

@Subscribe
private fun onBeforeCommitChanges(event: BeforeCommitChangesEvent) {
    event.preventCommit()
    dataManager.save(editedEntity)
    close(StandardOutcome.CLOSE)
}

}

Похоже, что у вас экран вызывается по стандартному действию “Create”, которое вызывает экран редактирования несколько иначе, чем в сценарии открытия существующей сущности на редактирование.
На экране Edit даже событие есть специальное InitEntityEvent - срабатывает поле того как в контейнер установлена Новая сущность в сценарии вызова экрана по действию “Create”.
А при открытии экрана edit для редактирования Существующей записи (по действию “Edit”) это событие не срабатывает.
onBeforeShow, естественно, сработает всегда.

Только для того, чтобы загруженная вами existedEntity отслеживалась в контексте экрана и автоматически сохранялась без вашего кода в onBeforeCommitChanges - надо existedEntity поместить в контекст экрана.
Если я чего-то не упустил по вашим фрагментам кода, то достаточно кот такого кода:

@Subscribe
private fun onBeforeShow(event: BeforeShowEvent) {
    val existedEntity = dataManager.load(CompanySettings::class.java).all().list().firstOrNull()
    if (existedEntity != null) {
        val trackedEntity = dataContext.merge(existedEntity)
        editedEntityContainer.item = trackedEntity 
    }
}
1 симпатия