Визуализация связи Many-to-Many с явной промежуточной таблицей

Добрый день, помогите сделать желаемый экран для связи двух сущностей через явную промежуточную таблицу. Есть следующая связь сущностей в модели данных:
2023-08-09_10-54-28
Текущее воплощение экрана для связи Alert и Model выглядит так:
2023-08-09_10-15-37
Хочу реализовать более удобный экран примерно по следующему макету:
image
При выборе нужных чекбоксов, экземпляры модели с соответствующими датами должны связываться с последним созданным Alert без явного его указания, по дефолту.
Не могу сообразить, что и где нужно прописать, чтобы реализовать данную форму:

  1. Не получается связать в одной таблице DataGrid атрибут из сущности Model (Model Name) c атрибутами из промежуточной сущности Alert_model (Даты производства) и относящийся к обеим сущностям единый чекбокс.
  2. Прописать в контроллере экрана нужный код для подтягивания последнего созданного Alert к соответствующим моделям.

Эксперты JMIX, помогите разобраться

Я лично пока не понимаю зачем грузить именно последний Alert? Вы из меню будете сразу данный экран открывать? Не открывать его через таблицу Alert? Тогда добавьте в BeforeShowEvent загрузку и установку последнего Alert.

С таблицей то-же не все ясно… Зачем здесь чекбокс? Вы хотите подгружать все Alert_Model что у вас есть, не зависимо от того к какому Alert они относятся, а при нажатии на чекбокс должна создаваться копия Alert_Model с нужным вам Alert?

Почему бы просто в таблице не добавить action который откроет для юзера возможность выбора Model какие ему надо и создавать на их основе Alert_Model?

    @Subscribe("alertModelTable.addAlertModel")
    protected void onAddAlertModel(Action.ActionPerformedEvent event) {
        screenBuilders.lookup(Model.class, this)
            .withSelectHandler(models-> {
                models.stream()
                    .map(this::createAlertModelFromModel)
                    .forEach(this::addToAlert);
            })
            .build()
            .show();
    }
    
    private AlertModel createAlertModelFromModel(Model model) {
        AlertModel alertModel= metadata.create(AlertModel.class);
        alertModel.setAlert(alertDc.getItem());
        alertModel.setModel(model);

        return insuranceMembership;
    }

    private void addToTable(AlertModel alertModel ) {
        alertModelsDc.getMutableItems().add(alertModel);
    }

В дескрипторе что-то такое должно быть

<instance id="alertDc" class="...Alert">
        <loader/>
        <collection id="alertModelsDc" property="alertModels"/>
</instance>

для Alert_Model добавить редактор чтоб юзер мог изменить production dateAlert и Model не изменяемые)?

Я лично пока не понимаю зачем грузить именно последний Alert ? Вы из меню будете сразу данный экран открывать?

Хочу сделать самостоятельный экран, который бы являлся последовательным шагом либо в бизнес-процессе NPMN, либо по кнопке типа “Next” после ввода атрибутов сущности Alert.

Вы хотите подгружать все Alert_Model что у вас есть, не зависимо от того к какому Alert они относятся, а при нажатии на чекбокс должна создаваться копия Alert_Model с нужным вам Alert ?

Я хочу подгружать все модели из Models. Их приемлемое для чекбоксов кол-во (5-6шт). Мне кажется, что выбрать из небольшого списка нужные модели с помощью чекбоксов и ввести даты напротив выбранной модели пользователю удобнее.

Так как второй шаг выбора моделей будет последовательным после определения основных атрибутов алерта, то хотелось бы не выбирать только что созданный алерт, а просто видеть, что мы к нему добавляем новый параметр “Модели”.

Создал тестовый проект. У Alert есть 2 экрана AlertEdit и AlertCreate В Таблице Alert при создании открывается AlertCreate, при редактировании AlertEdit.
В AlertCreate как мне кажется вся логика что вам нужна.

Если вы захотите открывать экран с “последним сохраненным” Alert то грузите его и открывайте экран AlertCreate

       screenBuilders.editor(alertsTable)
            .withScreenClass(AlertCreate::class.java)
            .editEntity(newAlert)
            .show()

Если у вас будет экран с кнопкой Next то мб не сохранять Alert а сразу открывать экран через

       screenBuilders.editor(alertsTable)
            .withScreenClass(AlertCreate::class.java)
            .newEntity(newAlert)
            .show()

Я здесь сделал создание новых AlertModel! Если у вашего Alert уже будут AlertModel то логику надо будет менять.
jmix-test.7z (209.3 КБ)

Спасибо за проделанную работу, но не могу запустить приложение по всей видимости из-за Kotlin
bootrun error.txt (1.6 КБ)

jmix-test-java.7z (238.4 КБ)

С виду это то, что нужно, в ближайшее время попробую перенести и адаптировать в своем проекте. Большое спасибо.