Dynamics AX Blog - sysoperation-framework - Beiträge von 2018

SysOperation-Framework: Aufrufendes Formular aktualisierenHäufig wird eine Funktion, die über das SysOperation-Framework abgebildet wurde, aus einem Formular heraus über eine Schaltfläche aufgerufen. Dabei hat man meist die Anforderung, daß die angezeigten Daten im Formular nach der Ausführung aktualisiert werden sollen. Ich benutze dafür gerne die folgende Logik. Diese geht davon aus, daß der Aufruf der Funktion über eine Schalfläche erfolgt ist und dadurch die main()-Methode getriggert wird. Die eigentliche Aktualisierug erfolgt über eine Sub-Methode und könnte wie folgt aussehen: private void refreshCallingForm(args _args) { FormRun callerFormRun; #Task if(_args && _args.caller() && _args.caller() is formRun) { callerFormRun = _args.caller(); callerFormRun.task(#taskF5); } } Der Aufruf dieser Methode erfolgt in der erwähnten main(): public static void main(Args _args) { TutorialSysOperationController controller; SysOperationStartResult sysOperationStartResult; controller = new TutorialSysOperationController(); controller.parmArgs(_args); controller.parmExecutionMode( SysOperationExecutionMode::Synchronous); sysOperationStartResult = controller.startOperation(); controller.refreshCallingForm(_args); } Denkbare Variationen der refreshCallingForm()Statt der task()-Methode der Form könnte man auch Methoden der Formdatasource aufrufen. Verwendung von ExecuteQuery()Verwendet man die executeQuery() der jeweiligen FomDataSource, so gehen dabei etwaige Filter sowie der Datensatz-Fokus verloren. private void refreshCallingForm(args _args) { FormDataSource fds; if(_args && _args.record() && _args.record().isFormDataSource()) { fds = _args.record().dataSource(); fds.executeQuery(); } } Verwendung von ReSearch()private void refreshCallingForm(args _args) { FormDataSource fds; if(_args && _args.record() && _args.record().isFormDataSource()) { fds = _args.record().dataSource(); fds.research(true); } } Verwendung von ReRead()Auch ein ReRead() wäre denkbar, in diesem Fall würde aber nur der aktive Datensatz aktualisiert werden. private void refreshCallingForm(args _args) { if(_args && _args.record() && _args.record().isFormDataSource()) { _args.record().reread(); } } |
|
|
|
|
|
|
Im folgenden Szenario sollen an ein SysOperation-Konstrukt alle Datensätze einer temporären Tabelle übergeben werden.
Dafür brauchen wir:
Controller