Der Unterschied zwischen data() und buf2Buf() in Dynamics AX 2012
Veröffentlicht: 15. Februar 2025 um 22:53:17 UTC
In diesem Artikel werden die Unterschiede zwischen den Methoden buf2Buf() und data() in Dynamics AX 2012 erläutert. Außerdem wird angegeben, wann welche Methode angemessen ist, und es wird ein X++-Codebeispiel gegeben.
The Difference Between data() and buf2Buf() in Dynamics AX 2012
Die Informationen in diesem Beitrag basieren auf Dynamics AX 2012 R3. Sie sind möglicherweise auch für andere Versionen gültig, müssen es aber nicht.
Wenn Sie in Dynamics AX die Werte aller Felder von einem Tabellenpuffer in einen anderen kopieren müssen, gehen Sie normalerweise wie folgt vor:
Das funktioniert gut und ist in den meisten Fällen die richtige Lösung.
Sie haben jedoch auch die Möglichkeit, stattdessen die Funktion buf2Buf zu verwenden:
Das funktioniert auch gut. Was ist also der Unterschied?
Der Unterschied besteht darin, dass buf2Buf keine Systemfelder kopiert. Zu den Systemfeldern gehören Felder wie RecId, TableId und in diesem Zusammenhang vielleicht am wichtigsten: DataAreaId. Der Grund, warum letzteres am wichtigsten ist, ist, dass der typischste Fall, in dem Sie buf2Buf() anstelle von data() verwenden würden, das Duplizieren von Datensätzen zwischen Unternehmenskonten ist, normalerweise durch Verwendung des Schlüsselworts changeCompany.
Wenn Sie beispielsweise in der Firma „dat“ arbeiten und eine andere Firma namens „com“ haben, von der Sie alle Datensätze in CustTable kopieren möchten:
{
buf2Buf(custTableFrom, custTableTo);
custTableTo.insert();
}
In diesem Fall funktioniert es, weil buf2Buf alle Feldwerte außer den Systemfeldern in den neuen Puffer kopiert. Hätten Sie stattdessen data() verwendet, wäre der neue Datensatz in die Firmenkonten „com“ eingefügt worden, weil dieser Wert ebenfalls in den neuen Puffer kopiert worden wäre.
(Tatsächlich hätte dies zu einem Fehler wegen doppeltem Schlüssel geführt, aber das ist auch nicht das, was Sie wollen.)