Добрый день!
Подскажите, пожалуйста, можно ли сделать такую штуку:
У нас есть родительская сущность (ParentEntity) и две дочерние сущности (ChildEntity1 и ChildEntity2), связанные с родительской с помощью Composition. При этом ChildEntity2 имеет также связь по Association с ChildEntity1.
Есть экран редактирования ParentEntity, в котором эти дочерние сущности живут в таблицах на табах. Когда мы редактируем ParentEntity, можем подобавлять ему записей ChildEntity1 и ChildEntity2 и разом всё это сохранить.
Но пока мы не сохранили, мы не можем выбрать с помощью EntityPicker на форме редактирования ChildEntity2 уже введенные, но еще не сохраненные записи ChildEntity1. Приходится сначала сохранять всё, а потом заново заходить и этим ChildEntity2 добавлять ссылки на ChildEntity1. Можно ли каким-то образом подсунуть в loader на browse форме ChildEntity1 (который вызывается по EntityPicker на edit форме ChildEntity2) уже созданные, но ещё не сохраненные в БД записи? Есть ли какая-то методика для этого?
Добрый день!
Очевидно вам нужно использовать для выбора ChildEntity1 не EntityPicker а EntityComboBox. Тогда если ChildEntity2 может ссылаться только на экземпляры ChildEntity1 того же ParentEntity, то достаточно будет использовать для optionsContainer контейнер данных со списком ChildEntity1 который уже есть в экране. Если же возможны и другие экземпляры ChildEntity1, то нужно формировать список опций программно, см. ComboBox :: Jmix Documentation.
Спасибо! А с picker’ом никак нельзя, да? Мы думали про ComboBox, но дело в том, что ChildEntity1 может быть, во-первых, довольно много, а во-вторых, для правильного выбора может быть недостаточно видеть один instance name, желательно, чтобы были при выборе видны и значения других колонок. Думали, может, есть какой-то штатный способ
Если сильно постараться, то можно сделать примерно так:
- Создать специальный экран lookup, принимающий через сеттер коллекцию сущностей. В сеттере эту коллекцию надо сохранить в поле, а в обработчике
AfterShow
добавить сущности в основной collection container. - В действии EntityPicker добавить обработчик ScreenConfigurer и передать коллекцию новых сущностей в сеттер экрана выбора.
Таким образом экран выбора будет показывать и загруженные и новые экземпляры.