В browse-экране есть кнопка для создания нового объекта. При ее нажатии открываем edit-экран. В этом экране добавлена кнопка для программного запуска процесса bpm, в которой я выполняю commit(), а затем закрытие окна getWindowManager().close(this).
Как обновить содержимое browse-экрана?
В контроллере browse экрана сделать inject TableCreateAction и, по хорошему, TableEditAction.
Затем, в методе init() указать либо setAfterCommitHandler(), либо setAfterWindowClosedHandler().
Если совсем просто, то сделать tableDataSource.refresh()
При использовании setAfterWindowClosedHandler() можно реализовать разную логику на разные actionId закрытия экрана.
Дополнение: setAfterCommitHandler сработает скорее всего только при коммите экрана кнопкой “ОК”, так что в любом случае лучше использовать setAfterWindowClosedHandler. При использовании этого метода будет еще и id действия закрытия
Алексей, спасибо за совет.
Как выяснилось в моем случае все несколько сложнее:
Объекты я создаю не в “штатном” 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);
Здравствуйте, Михаил.
К сожалению, у меня не удалось воспроизвести вашу проблему. Не могли бы вы поделиться небольшим тестовым проектом, где я смогу её воспроизвести?
Даниил.
Даниил, добрый день.
Спасибо за желание помочь.
Но, как у меня случается уже не в первый раз, при попытке реализовать это в тестовом проекте, все работает, как нужно.
Судя по всему, и это мое утверждение тоже не верно. Пост выше сейчас подправлю.