An den Aufrufer gelangen
Angenommen der RunBase-Dialog ruft ein weiteres Formular auf, welches über spezielle Selektionseinstellungen für das RunBase-Objekt verfügt (z.B. wenn die Darstellung dieser speziellen Einstellungen im RunBase-Dialog nicht möglich ist). So wird dem Dialog also ein Menu-Item-Button hinzugefügt, damit der Benutzer das Formular mit den speziellen Einstellungsmöglichkeiten aufrufen kann:
DialogRunbase ret;
;
ret = super(dialog, forceOnClient);
ret.addMenuItemButton(MenuItemType::Display, menuItemDisplayStr(MyRunBaseSelectionForm));
Wie erhält nun aber das Formular Zugriff auf das RunBase-Objekt? Dafür muss durch die Aufrufer 'gegraben' werden:
FormRun formRunCaller;
DialogRunBase dialogRunBase;
MyRunBaseClass caller;
;
formRunCaller = element.args().caller(); // returns the dialog's form
dialogRunBase = formRunCaller.args().caller(); // returns a DialogRunBase object
caller = dialogRunBase.runBaseBatch(); // finally returns the RunBase object
Wenn man über das Handle des RunBase-Objekts verfügt, hat man Zugriff auf alle öffentlichen Parametermethoden und auch auf das QueryRun-Objekt des RunBase-Objekts.
Den Aufrufer benachrichtigen
Wenn der Benutzer nun das Formular mit den speziellen Selektionskriterien mit OK schliesst, muss das RunBase-Objekt mit den allenfalls vorgenommenen Einstellungen aktualisiert werden. Am besten wird dies in der closeOK()-Methode auf dem Formular implementiert:
public void closeOk()
{
QueryRun qr = caller.queryRun();
;
qr.whatEverYouHaveToManipulate(...);
caller.parmThisAndThat(...);
super();
}Dialogfelder aktualisieren
Damit der Benutzer die gemachten Änderungen auf dem RunBase-Dialog sieht, müss zusätzlich die Dialogfelder aktualisiert werden, dies wird mit der Methode dialogUpdate() sichergestellt:
public void closeOk()
{
QueryRun qr = caller.queryRun();
;
qr.whatEverYouHaveToManipulate(...);
caller.parmThisAndThat(...);
caller.dialogUpdate(); // updates at least query range fields
super();
}Ein kleines sample steht als XPO-Datei zum Download bereit und demonstriert, was ich hier zu erklären versucht war. Nach dem Importieren der XPO-Datei einfach die Klasse MyRunBaseClass öffnen und auf die "Pick customer"-Schaltfläche drücken.
Dieser Beispielcode wurde weder auf Optimale Verfahren geprüft, noch ist er gegen Fehler gefeit!
Hoffe das dieser Beitrag den Entwicklerhorizont ein klein wenig erweitert :)

No comments:
Post a Comment