Обновить содержимое browse-экрана после commit

В browse-экране есть кнопка для создания нового объекта. При ее нажатии открываем edit-экран. В этом экране добавлена кнопка для программного запуска процесса bpm, в которой я выполняю commit(), а затем закрытие окна getWindowManager().close(this).
Как обновить содержимое browse-экрана?

В контроллере browse экрана сделать inject TableCreateAction и, по хорошему, TableEditAction.
Затем, в методе init() указать либо setAfterCommitHandler(), либо setAfterWindowClosedHandler().
Если совсем просто, то сделать tableDataSource.refresh()

При использовании setAfterWindowClosedHandler() можно реализовать разную логику на разные actionId закрытия экрана.

Дополнение: setAfterCommitHandler сработает скорее всего только при коммите экрана кнопкой “ОК”, так что в любом случае лучше использовать setAfterWindowClosedHandler. При использовании этого метода будет еще и id действия закрытия

1 симпатия

Алексей, спасибо за совет.
Как выяснилось в моем случае все несколько сложнее:
Объекты я создаю не в “штатном” CreateAction, а с помощью popupButton, в которой определены Action. У Action отсутствуют нужные хендлеры…
Попробовал указать CreateAction для popupButton не декларативно, а в контроллере, предварительно добавив его к таблице:

    @Override
    public void init(Map<String, Object> params) {
        super.init(params);
        activitiesTable.addAction(new CreateAction(activitiesTable, WindowManager.OpenType.NEW_TAB, "newInstallActivity") {
            @Override
            public void actionPerform(Component component) {
                //super.actionPerform(component);
                Object entity = metadata.create(ActivityInstall.class);
                Window window = openEditor((Entity) entity, openType);
            }
        });
        CreateAction createAction = (CreateAction) activitiesTable.getAction("newInstallActivity");
        createAction.setCaption("NEW INSTALL");
        newActivityBtn.addAction(activitiesTable.getAction("newInstallActivity"), 0);
        createAction.setAfterWindowClosedHandler((window, closeActionId) -> {
            showNotification("пусто");
        });
    }

setAfterWindowClosedHandler не отрабатывает.

Сделал следующим образом.
При создании окна в popupButton навешиваю listener:

        ActivityInstall entity = metadata.create(ActivityInstall.class);
        Window window = openEditor(entity, WindowManager.OpenType.NEW_TAB);
        window.addCloseListener(actionId -> {
            if (actionId.equals(COMMIT_ACTION_ID))
                activitiesDs.refresh();

А при запуске процесса закрываю окно так:

       this.close(COMMIT_ACTION_ID);

Здравствуйте, Михаил.

К сожалению, у меня не удалось воспроизвести вашу проблему. Не могли бы вы поделиться небольшим тестовым проектом, где я смогу её воспроизвести?

Даниил.

1 симпатия

Даниил, добрый день.

Спасибо за желание помочь.
Но, как у меня случается уже не в первый раз, при попытке реализовать это в тестовом проекте, все работает, как нужно.

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