Open Internal Frame
4 posts
• Page 1 of 1
Open Internal Frame
Hallo,
wir wollen ein Dialog-Fenster öffnen wenn die selektierte Zeile im Databook geändert wird um den User zu fragen ob die Änderungen gespeichtert werden oder verworfen sollen.
Folgenden Listener für das Event BeforRowSelected haben wir dafür geschrieben:
Folgende Probleme haben sich dabei aufgetan:
Können Sie uns weiterhelfen, was wir falsch oder vergessen haben?
Gruß Mark
wir wollen ein Dialog-Fenster öffnen wenn die selektierte Zeile im Databook geändert wird um den User zu fragen ob die Änderungen gespeichtert werden oder verworfen sollen.
Folgenden Listener für das Event BeforRowSelected haben wir dafür geschrieben:
- Code: Select all
private void checkAndAskToSaveChanges(DataBookEvent event) throws Throwable {
if(this.hasChanges()) {
UIFormLayout askForSavePanelLayout = new UIFormLayout();
UIPanel askForSavePanel = new UIPanel(askForSavePanelLayout);
Dialog askForSaveDialog = new Dialog(askForSavePanel);
UIButton discard = new UIButton("verwerfen", (eventVerwerfen) -> {
zolltarifnummernDataBook.restoreSelectedRow();
zolltarifnummernTextGermanDataBook.restoreSelectedRow();
zolltarifnummernTextFrenchDataBook.restoreSelectedRow();
zolltarifnummernTextEnglishDataBook.restoreSelectedRow();
askForSaveDialog.doCancel();
getApplication().close(askForSaveDialog);
});
askForSavePanel.add(discard);
Dialog.openInternalFrame(this, "Test", true, askForSaveDialog);
}
}
Folgende Probleme haben sich dabei aufgetan:
- Dialog.openInternalFrame(this, "Test", true, askForSaveDialog); liefert den Fehler, dass die Übergebenen Argumente nicht der Schnittstelle entsprechen (siehe angehängtes Bild). Dabei haben wir uns am Beispiel aus der Doku gehalten: http://doc.sibvisions.com/jvx/client/gui/custom_dialog
- Wenn wir den Dialog mit openContent Aufrufen öffnet sich der Dialog aber der Workscreen wartet nicht auf die User Interaktion und die nächste Zeile wird selektiert.
Können Sie uns weiterhelfen, was wir falsch oder vergessen haben?
Gruß Mark
- Attachments
-
- Dialog_test.jpg (77.66 KiB) Viewed 21169 times
- hansemar
- Posts: 15
- Joined: Tue Jun 26, 2018 10:46 am
Re: Open Internal Frame
Moin.
Wie die Fehlermeldung vermuten laesst, erwartert openInternalFrame(...) eine IComponent, nicht einen ganzen Dialog. Also zum oeffnen muss man einfach askSavePanel uebergeben.
Das zweite ist etwas komplexer, die meisten GUI Technologien erlauben nicht das blocken des GUI Threads, aus dem simplen Grund weil dann ebenfalls die gesamte Nahrichten-Schleife ebenfalls geblockt waere, was es unmoeglich machen wuerde jemals wieder mit der GUI zu interagieren. Wenn man eine Operation verschieben will auf einen spaeteren Zeitpunkt, muss man dies in der Programlogik einbauen. Eine einfache Idee ist auf dem IDataBook den WritebackIsolationLevel auf DATASOURCE zu setzen. Damit werden Zeilen nur noch gespeichert wenn dies explizit vom Benutzer-Code aus passiert, also muss man sich dann sowohl um das speichern als auch um das verwerfen kuemmern.
Wie die Fehlermeldung vermuten laesst, erwartert openInternalFrame(...) eine IComponent, nicht einen ganzen Dialog. Also zum oeffnen muss man einfach askSavePanel uebergeben.
Das zweite ist etwas komplexer, die meisten GUI Technologien erlauben nicht das blocken des GUI Threads, aus dem simplen Grund weil dann ebenfalls die gesamte Nahrichten-Schleife ebenfalls geblockt waere, was es unmoeglich machen wuerde jemals wieder mit der GUI zu interagieren. Wenn man eine Operation verschieben will auf einen spaeteren Zeitpunkt, muss man dies in der Programlogik einbauen. Eine einfache Idee ist auf dem IDataBook den WritebackIsolationLevel auf DATASOURCE zu setzen. Damit werden Zeilen nur noch gespeichert wenn dies explizit vom Benutzer-Code aus passiert, also muss man sich dann sowohl um das speichern als auch um das verwerfen kuemmern.
-
rzenz - Posts: 36
- Joined: Mon Dec 12, 2016 1:40 pm
- Location: Vienna, Austria
Re: Open Internal Frame
Die Doku zum Thema Dialog.
Wir rzenz schon richtig sagte, ist das Blockieren keine gängige Lösung und würde im Web auch nicht funktionieren. Aber ganz einfach die Programmlogik dahingehend abändern, das die Ausführung im Listener passiert.
Wir rzenz schon richtig sagte, ist das Blockieren keine gängige Lösung und würde im Web auch nicht funktionieren. Aber ganz einfach die Programmlogik dahingehend abändern, das die Ausführung im Listener passiert.
-
Support@SIB - Posts: 353
- Joined: Mon Sep 28, 2009 1:56 pm
Re: Open Internal Frame
Das Problem mit dem Dialog ist nicht IComponent, da Dialog auch ein Content ist und daher auch IComponent. Das Problem ist das der erste Parameter die Application sein muss und nicht der WorkScreen!
-
Development@SIB - Posts: 325
- Joined: Mon Sep 28, 2009 1:54 pm
4 posts
• Page 1 of 1