Расширение экранной логики StandardDetailView: DevelopmentException если нет аннотации @ReplaceEntity

Добрый день. При расширении экранной логики по руководству на jmix2 (Расширение функциональности :: Документация Jmix) (аннотацию @ReplaceEntity не использую) возникла следующая проблема:

ExtEntity extends Entity,
ExtEntityDetailsView extends EntityDetailScreen, EntityDetailScreen implements StandardDetailView
Тип сущности в data-контейнерах переопределил.

При открытии экрана редактирования новой сущности ExtEntity возникает ошибка DevelopmentException: Invalid item’s metaClass ‘Entity’.
Ошибка возникает, т.к. DetailViewTypeExtractor определяет тип сущности через resolvableType интерфейса DetailView как “Entity”, а не как “ExtEntity”.

Временно решил проблему переопределением StandardDetailView#initNewEntity.

Подскажите пожалуйста,может есть более правильный подход?
P.S. если использовать аннотацию @ReplaceEntity то проблема не возникает.

тестовый проект (138.5 КБ)
Воспроизводится в тестовом проекте при попытке создания новой сущности ExtEntity

Добрый день!
А почему вы не используете @ReplaceEntity?
Описанный в документации механизм расширения как раз предполагает замену сущности.

@ReplaceEntity не использую так как для расширенной сущности требуется небольшая модификация экранной логики, при этом экран старой сущности требуется сохранить.

Аналогичный подход я использовал в CUBA platform, и там такой подход работал т.к. тип сущности определялся из InstanceContainer, а не через тип дженерика.

Если такой подход неправильный подскажите пожалуйста, как правильно добиться такого поведения в Jmix? На текущий момент я просто переопределил StandardDetailView#initNewEntity

Спасибо, мотивация понятна. Мы проверим и постараемся исправить проблему.

1 симпатия

Здравствуйте!
Посмотрела прикрепленный проект, описанная вами проблема была замечена только на вашем проекте, но были найдены другие проблемы, которые не дают выполниться корректно данному кейсу.

Создан тикет