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