Return values from popup window
10 posts
• Page 1 of 1
Return values from popup window
Hi,
When I open a popup workscreen I know I kan send parameters through a HashMap; but how can I return values from the popup to the calling workscreen, eg. on closing the popup?
Thanks
Luc
When I open a popup workscreen I know I kan send parameters through a HashMap; but how can I return values from the popup to the calling workscreen, eg. on closing the popup?
Thanks
Luc
- lucdep
- Posts: 53
- Joined: Wed Oct 10, 2018 12:01 pm
Re: Return values from popup window
There's no specific API for that. You have different options:
1) put/set the "start" work-screen as parameter
2) open the work-screen and call a method from the new work-screen to "add a listener"
3) iterate all open work-screens, on close, and call specific methods, e.g. implement a IParameterHandler interface in your "start" work-screen
1) put/set the "start" work-screen as parameter
2) open the work-screen and call a method from the new work-screen to "add a listener"
3) iterate all open work-screens, on close, and call specific methods, e.g. implement a IParameterHandler interface in your "start" work-screen
- rjahn
- Posts: 41
- Joined: Sun Sep 13, 2009 1:54 pm
Re: Return values from popup window
This is a simple solution:
In your opener screen, write:
In your sub screen, write e.g.:
It's also possible to detect the opener automatically:
In your opener screen, write:
- Code: Select all
IWorkScreen wosc = getApplication().openWorkScreen("com.sibvisions.apps.demo.screens.SubWorkScreen", Modality.Modal);
wosc.setParameter("master", this);
eventParameterChanged("closereturn").addListener(new IParameterChangedListener()
{
public void parameterChanged(WorkScreen pScreen, String pName, Object pOld, Object pNew) throws Throwable
{
setTitle("Closed: " + pNew);
}
});
In your sub screen, write e.g.:
- Code: Select all
@Override
public void onClose() throws Throwable
{
super.onClose();
((IWorkScreen)getParameter("master")).setParameter("closereturn", "Yuhu");
}
It's also possible to detect the opener automatically:
- Code: Select all
@Override
public void onShow() throws Throwable
{
super.onShow();
if (!Beans.isDesignTime())
{
IComponent[] comps = getApplication().getDesktopPane().getComponents();
if (comps != null)
{
for (IComponent comp : comps)
{
if (comp instanceof IFrame)
{
if (((IFrame) comp).isActive())
{
IContent cont = getApplication().getContent((IFrame) comp);
if (cont != this && cont instanceof IWorkScreen)
{
// cache opener
return;
}
}
}
}
}
}
}
-
Support@SIB - Posts: 353
- Joined: Mon Sep 28, 2009 1:56 pm
Re: Return values from popup window
Hi,
This solutions seems to work in the JavaFX environment, but in Vaadin/HTML, when the popup window is closed the opening screen seems to have lost it's DataBook context and is not showing any record anymore, all fields are gray and ID field is empty. I've tried to store selection before opening the popup and restoring on closing the popup, but this doesn't help.
What could be going wrong in VAADIN?
Luc
This solutions seems to work in the JavaFX environment, but in Vaadin/HTML, when the popup window is closed the opening screen seems to have lost it's DataBook context and is not showing any record anymore, all fields are gray and ID field is empty. I've tried to store selection before opening the popup and restoring on closing the popup, but this doesn't help.
What could be going wrong in VAADIN?
Luc
- lucdep
- Posts: 53
- Joined: Wed Oct 10, 2018 12:01 pm
Re: Return values from popup window
The above solution works in our environment and our screens. Not sure what you code does, but to try to find the problem, we need an example.
-
Support@SIB - Posts: 353
- Joined: Mon Sep 28, 2009 1:56 pm
Re: Return values from popup window
Hi,
Here the code I have used:
The opener screen is the workscreen for the table Book, the edit button opens a popup Author workscreen on the table Author. When the combobox Auth_ID is null a new Author is created in the popup, after which the new Auth_ID must be returned to the master Book workscreen and inserted in the field Auth_ID. When Auth_ID is not null when clicking the edit button, the popup goes in edit mode for the selected Author.
In VAADIN the popup returns to a blank Book record, in JavaFX the original Book record remains.
This is de code for the edit button in the opener (master) Book workscreen:
In the popup Author workscreen I have following code:
Here the code I have used:
The opener screen is the workscreen for the table Book, the edit button opens a popup Author workscreen on the table Author. When the combobox Auth_ID is null a new Author is created in the popup, after which the new Auth_ID must be returned to the master Book workscreen and inserted in the field Auth_ID. When Auth_ID is not null when clicking the edit button, the popup goes in edit mode for the selected Author.
In VAADIN the popup returns to a blank Book record, in JavaFX the original Book record remains.
This is de code for the edit button in the opener (master) Book workscreen:
- Code: Select all
public void doButtoneditauthor(UIActionEvent pEvent) throws Throwable
{
rdbBook.saveAllRows();
HashMap<String, Object> htParam = new HashMap<String, Object>();
if (!Logical.equals(rdbBook.getValue("AUTH_ID"), (Object)null))
{
htParam.put("lookupid", rdbBook.getValue("AUTH_ID"));
}
else
{
htParam.put("lookupid", (Object)null);
}
IWorkScreen wosc = getApplication().openWorkScreen("be.moonfox.apps.bookshelf.screens.AuthorEditWorkScreen", htParam);
wosc.setParameter("master", this);
eventParameterChanged("closereturn").addListener(new IParameterChangedListener()
{
public void parameterChanged(WorkScreen pScreen, String pName, Object pOld, Object pNew) throws Throwable
{
rdbBook.setValue("AUTH_ID", pNew);
rdbBook.saveAllRows();
}
});
}
In the popup Author workscreen I have following code:
- Code: Select all
public void onActivate() throws Throwable
{
Object pID = getParameter("lookupid");
if (!Logical.equals(pID, (Object)null))
{
labelHeader.setText("Edit author");
rdbAuthor.setFilter(new Equals("ID", pID));
}
else
{
deleteButton.setEnabled(false);
labelHeader.setText("New author");
rdbAuthor.insert(false);
}
}
@Override
public void onClose() throws Throwable
{
super.onClose();
((IWorkScreen)getParameter("master")).setParameter("closereturn", rdbAuthor.getValue("ID"));
}
- lucdep
- Posts: 53
- Joined: Wed Oct 10, 2018 12:01 pm
Re: Return values from popup window
We'll check this.
-
Support@SIB - Posts: 353
- Joined: Mon Sep 28, 2009 1:56 pm
Re: Return values from popup window
Your opened work-screen is not modal, so in desktop mode we use MDI and the master workscreen remains open. In web UI, we use SDI and the "popup" replaces the master screen.
It's unclear how your screen works, because if you open the "popup", the master will be closed and you don't open the master-screen in your code?
In our example code, we use: Modality.Modal
Your code doesn't use this and that's the big difference!
We have different options for you:
* Test your code with Legacy application mode (see web settings) - only for test purposes.
* Use modality as we do in our example code
* Use MorphPanel instead of your solution.
The MorphPanel is able to show a table and if you click on a record, e.g. a popup will be opened or the detail view will be shown instead of the table...
The web application also has different modes where it doesn't close the screens (only hides/shows), but this needs commercial support.
It's unclear how your screen works, because if you open the "popup", the master will be closed and you don't open the master-screen in your code?
In our example code, we use: Modality.Modal
Your code doesn't use this and that's the big difference!
We have different options for you:
* Test your code with Legacy application mode (see web settings) - only for test purposes.
* Use modality as we do in our example code
* Use MorphPanel instead of your solution.
The MorphPanel is able to show a table and if you click on a record, e.g. a popup will be opened or the detail view will be shown instead of the table...
The web application also has different modes where it doesn't close the screens (only hides/shows), but this needs commercial support.
-
Support@SIB - Posts: 353
- Joined: Mon Sep 28, 2009 1:56 pm
Re: Return values from popup window
Hi,
Back/Forward navigation in Web Application Settings was the problem. After unchecking the boxes, the code works in VAADIN as well.
Luc
Back/Forward navigation in Web Application Settings was the problem. After unchecking the boxes, the code works in VAADIN as well.
Luc
- lucdep
- Posts: 53
- Joined: Wed Oct 10, 2018 12:01 pm
Re: Return values from popup window
Back/Forward is the browser navigation. This shouldn't change your screen handling.
-
Support@SIB - Posts: 353
- Joined: Mon Sep 28, 2009 1:56 pm
10 posts
• Page 1 of 1