Dynamics AX Blog - Beiträge von 2018 - Seite 2
Momentan angezeigt werden nur Beiträge von »2018«.
Ladung an Lagerort freigebenDas folgende Code-Snippet führt die Funktion "Für Lagerort freigeben" einer Ladung aus, allerdings ohne die Wellen/Arbeiten zu generieren.
static void Job1(Args _args)
{
ttsBegin;
WHSLoadPostEngine::post(whsLoadTable::find('USMF-000004', true));
ttsCommit;
} |
Welle per Code verarbeitenMit Hilfe des folgenden Code, kann man eine Welle verarbeiten. Dies wird abhängig von den WHS-Parametern bei Aufruf der Funktion "Für Lagerort freigeben" ausgeführt.
WHSPostEngine::post(WaveTable::find('USMF-000000003'));
|
Auftragspositionen zu bestehender Ladung hinzufügenIn diesem Beitrag möchte ich zeigen, wie man alle Positionen eines Auftrages bzw. auch nur einzelne Auftragspositionen per Code zu einer bestehenden Ladung hinzufügen kann. |
|
|
|
|
|
|
Hä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(); } }