Różnica między data() i buf2Buf() w Dynamics AX 2012
Opublikowano: 15 lutego 2025 22:53:56 UTC
W tym artykule wyjaśniono różnice między metodami buf2Buf() i data() w systemie Dynamics AX 2012, w tym, kiedy warto używać każdej z nich, a także podano przykład kodu X++.
The Difference Between data() and buf2Buf() in Dynamics AX 2012
Informacje zawarte w tym poście dotyczą systemu Dynamics AX 2012 R3. Mogą być lub nie być ważne dla innych wersji.
Gdy zachodzi potrzeba skopiowania wartości wszystkich pól z jednego bufora tabeli do innego w systemie Dynamics AX, tradycyjnie wykonuje się następującą operację:
To rozwiązanie sprawdza się i w większości przypadków jest właściwe.
Możesz jednak również skorzystać z funkcji buf2Buf:
To też działa dobrze. Więc jaka jest różnica?
Różnica polega na tym, że buf2Buf nie kopiuje pól systemowych. Pola systemowe obejmują pola takie jak RecId, TableId i być może najważniejsze w tym kontekście DataAreaId. Powodem, dla którego to drugie jest najważniejsze, jest to, że najbardziej typowym przypadkiem, w którym użyłbyś buf2Buf() zamiast data(), jest duplikowanie rekordów między kontami firmowymi, zazwyczaj za pomocą słowa kluczowego changeCompany.
Na przykład, jeśli pracujesz w firmie „dat” i masz inną firmę o nazwie „com”, z której chcesz skopiować wszystkie rekordy w tabeli CustTable:
{
buf2Buf(custTableFrom, custTableTo);
custTableTo.insert();
}
W tym przypadku zadziała, ponieważ buf2Buf kopiuje wszystkie wartości pól, z wyjątkiem pól systemowych, do nowego bufora. Gdybyś użył data(), nowy rekord zostałby wstawiony do kont firmowych „com”, ponieważ ta wartość zostałaby również skopiowana do nowego bufora.
(W rzeczywistości doprowadziłoby to do błędu duplikatu klucza, ale nie o to nam chodzi).