Переопределение поведения кнопки "Удалить"

Добрый день!

Не так давно приступил к изучению платформы версии 7.1. Вот появился вопрос, как переопределить поведение кнопки “Удалить” таблицы. Вроде бы понятно, что надо переопределить метод, куда вставить свои собственные проверки и сам код для удаления:

public class SubsidiaryDepartmentBrowse extends StandardLookup<SubsidiaryDepartment> {
    @Subscribe("subsidiaryDepartmentsTable.remove")
    public void onSubsidiaryDepartmentsTableRemove(Action.ActionPerformedEvent event) {
        
    }
}

Но совершенно не могу понять, как:

  1. Получить сущность, которая является выделенной в таблице и которую я собственно хочу удалить.
  2. Как собственно удалить сущность, после того как я выполню все проверки и решу, что это допустимо.

Мигрирую на Java с Oracle Forms, поэтому прошу сильно ногами не бить :slight_smile:

На первый вопрос ответ нашел:

@Inject
private GroupTable subsidiaryDepartmentsTable;

И далее:

subsidiaryDepartmentsTable.getSelected();

Прошу помощи со вторым вопросом.

По второму пока сделал так:

@Inject
private GroupTable subsidiaryDepartmentsTable;
@Inject
private DataManager dataManager;
@Inject
private CollectionLoader subsidiaryDepartmentsDl;

@Subscribe(“subsidiaryDepartmentsTable.remove”)
public void onSubsidiaryDepartmentsTableRemove(Action.ActionPerformedEvent event) {
Set selectedEntities = subsidiaryDepartmentsTable.getSelected();
selectedEntities.forEach(entity -> dataManager.remove(entity));
subsidiaryDepartmentsDl.load();
}

Но не оставляет ощущение, что это неверно. Прошу помочь.

Добрый день!
Как вариант, можно удалить сущности с помощью RemoveOperation. Пример кода, который делает проверку и удаляет записи, если проверка пройдена:

@UiController("resttest_Book.browse")
@UiDescriptor("book-browse.xml")
@LookupComponent("booksTable")
@LoadDataBeforeShow
public class BookBrowse extends StandardLookup<Book> {

    @Inject
    private GroupTable<Book> booksTable;

    @Inject
    private RemoveOperation removeOperation;

    @Inject
    private Notifications notifications;

    @Subscribe("booksTable.remove")
    public void onBooksTableRemove(Action.ActionPerformedEvent event) {
        removeOperation.builder(booksTable)
                .beforeActionPerformed(beforeActionPerformedEvent -> {
                    List<Book> selectedItems = beforeActionPerformedEvent.getItems();
                    boolean booksStartsWithAFound = selectedItems.stream()
                            .anyMatch(book -> book.getTitle().startsWith("A"));
                    if (booksStartsWithAFound) {
                        notifications.create(Notifications.NotificationType.WARNING)
                                .withCaption("Books with title starting with A found")
                                .show();
                        beforeActionPerformedEvent.preventAction();
                    }
                })
                .remove();
    }
}
1 симпатия

Спасибо большое, то, что надо!