Dynamics 365 Business Central 2022 Wave 2: Einführung des neuen DataTransfer-Datentyps

Ich habe vor ein paar Tagen über einige Verbesserungen der Benutzeroberfläche in der Version Dynamics 365 Business Central 2022 Wave 2 (Version 21) gesprochen. Die Einzelheiten können Sie hier nachlesen. Es gibt ein weiteres ziemlich verstecktes Feature, das ich in dieser neuen Version sehr liebe (noch nicht dokumentiert), und es hängt mit der Verfügbarkeit eines neuen Konstrukts zum Schreiben von schnellerem Upgrade-Code zusammen.

Beim Refactoring einer App ist es üblich, ein Feld von einer Tabelle in eine andere zu verschieben oder alle Daten von einer Tabelle in eine andere Tabelle zu kopieren. Mit dieser neuen Funktion, die in Version 21 verfügbar ist, kann der Entwickler die Daten aus dem alten Feld in das neue Feld oder die Daten aus der alten Tabelle in die neue Tabelle satzbasiert kopieren, ohne eine Schleife schreiben zu müssen .

Was bedeutet das im Einzelnen?

Ab Dynamics 365 Business Central 2022 Wave 2 Release (Version 21) wird ein neuer Datentyp namens Datentransfer ist verfügbar. Dieser neue Datentyp ist derzeit nur auf Upgrade-Codeunits verfügbar (Codeunits mit Untertyp = Upgrade) und ermöglicht es, Daten schnell zu verschieben.

Wie funktioniert dieser neue Datentyp?

Betrachten wir das folgende Szenario, um die Verwendung des neuen Datentyps zu zeigen. Ich habe eine V1-Erweiterung mit einer Tabelle wie der folgenden:

Diese Tabelle enthält Daten aus Einkaufs- und Verkaufsbelegen und hier die Typ Feld (Enum mit Werten wie Verkauf und Kaufen) ist Teil eines Primärschlüssels, den wir ändern möchten.

In einer neuen Erweiterungsversion wollen wir diese alte Tabelle obsolet machen und durch eine neue Tabelle ersetzen, die nur die Verkaufsdatensätze aus der alten Tabelle enthält. Die neue Tabelle ist wie folgt definiert:

Hier wird der Primärschlüssel geändert und wir haben auch ein neues Feld namens Anfangsdatum dass wir beim Upgrade mit dem aktuellen Datum initialisieren wollen.

Um das Daten-Upgrade durchzuführen, definieren wir eine Aktualisierung Codeunit und auf dieser Codeunit können wir etwa Folgendes schreiben:

Dieser Code verwendet die neue Datentransfer Datentyp zum Durchführen des Datenübertragungs-Upgrade-Prozesses.

Mit dem SetTables(SourceTable: Integer, DestinationTable: Integer) Prozedur definieren wir die Quell- und Zieltabellen für die Datenübertragung.

Dann verwenden wir die AddSourceFilter(SourceField: Integer, String: Text, [Value: Joker, …]) -Methode, um den Filter hinzuzufügen, den wir auf die Quelltabelle für die Datenübertragung anwenden möchten.

Das DataTransfer-Konstrukt hat auch eine aufgerufene Methode AddJoin(Quellfeld: Ganzzahl, Zielfeld: Ganzzahl) Dadurch können Sie ein Feldpaar hinzufügen, das zum Erstellen einer Join-Bedingung verwendet wird, die bestimmt, welche Zeilen übertragen werden sollen, optional für Übertragungen derselben Tabelle.

Wie bereits erwähnt, möchten wir im Datenaktualisierungsprozess das Feld Startdatum in der Zieltabelle mit dem aktuellen Datum initialisieren. Dazu können wir die verwenden AddConstantValue(Wert: Joker, DestinationField: Integer) Methode, die es ermöglicht, den Wert anzugeben, der in das angegebene Feld in der Zieltabelle gesetzt werden soll.

Wenn die Regeln festgelegt sind, können wir die Datenübertragung starten, indem wir die aufrufen CopyFields Methode. Diese Methode kopiert die in angegebenen Felder Felder hinzufügen mit Filtern aus Quellfilter hinzufügenund die Join-Bedingungen von Joins hinzufügen in eine Massenoperation in SQL.

Für die Datenübertragung können Sie auch die verwenden Zeilen kopieren () -Methode, die die Zeilen aus der Quelltabelle in die Zieltabelle mit den mit ausgewählten Feldern kopiert Felder hinzufügen und die angewendeten Filter mit Quellfilter hinzufügenin einem Massenvorgang in SQL.

Warum ist dieser neue Datentyp so cool?

Da Es generiert und führt eine einzige satzbasierte SQL-Abfrage aus, anstatt eine Schleife + Einfüge- oder Aktualisierungsoperation auszuführen, und das bedeutet im Wesentlichen ein Wort: Leistung! Mit diesem neuen Konstrukt Daten-Upgrades sind jetzt 50- bis 90-mal schneller (nicht 50%, aber 50x… ja!).

Die neue Basisanwendung von Dynamics 365 Business Central 2022 Wave 2 (Version 21) verwendet dieses neue Konstrukt häufig für interne Upgrade-Verfahren:

Hier ist ein Beispiel für die Verwendung in der Standard-Basisanwendung:

und hier ein Beispiel mit Joins:

Beim Schreiben von Upgrade-Code in Ihren AL-Erweiterungen empfehle ich unbedingt, diesen neuen Datentyp ab sofort zu verwenden. Ihre Upgrade-Prozesse werden schneller.

Die häufige Frage, die meiner Meinung nach jetzt auftauchen könnte, lautet: Kann ich die neue verwenden Datentransfer Datentyp auch in meinen Standard-Codeunits für eine schnellere Datenübertragung? Im Moment ist die Antwort nein, es wird nur in Upgrade-Codeunits ausgeführt. Ich denke, dass es absolut interessant ist, die Möglichkeit zu haben, es auch in Standardprozessen zu haben, um eine schnelle Datenbewegung zwischen Tabellen durchzuführen, und ich bin mir ziemlich sicher, dass das Team unter dieser Funktion für nächste Versionen darüber nachdenken wird …

.

Author: admin

Leave a Reply

Your email address will not be published.