Dynamics AX 2012 の data() と buf2Buf() の違い
出版された: 2025年2月15日 22:53:49 UTC
この記事では、Dynamics AX 2012 の buf2Buf() メソッドと data() メソッドの違い、それぞれの使用が適切な場合、および X++ コード例について説明します。
The Difference Between data() and buf2Buf() in Dynamics AX 2012
この投稿の情報は Dynamics AX 2012 R3 に基づいています。他のバージョンでは有効ではない可能性があります。
Dynamics AX で 1 つのテーブル バッファーから別のテーブル バッファーにすべてのフィールドの値をコピーする必要がある場合、従来は次のようにします。
これはうまく機能し、ほとんどの場合、正しい方法です。
ただし、代わりに buf2Buf 関数を使用するオプションもあります。
これもうまく機能します。では違いは何でしょうか?
違いは、buf2Buf はシステム フィールドをコピーしないことです。システム フィールドには、RecId、TableId、そしておそらくこのコンテキストで最も重要な DataAreaId などのフィールドが含まれます。後者が最も重要である理由は、data() の代わりに buf2Buf() を使用する最も一般的なケースは、通常 changeCompany キーワードを使用して会社アカウント間でレコードを複製する場合であるためです。
たとえば、あなたが「dat」という会社に所属していて、「com」という別の会社があり、その会社の CustTable のすべてのレコードをコピーしたいとします。
{
buf2Buf(custTableFrom, custTableTo);
custTableTo.insert();
}
この場合、buf2Buf はシステム フィールドを除くすべてのフィールド値を新しいバッファーにコピーするため、機能します。代わりに data() を使用した場合、その値も新しいバッファーにコピーされるため、新しいレコードは "com" 会社アカウントに挿入されます。
(実際には重複キー エラーが発生しますが、これも望ましい結果ではありません)。