Miklix

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 つのテーブル バッファーから別のテーブル バッファーにすべてのフィールドの値をコピーする必要がある場合、従来は次のようにします。

toTable.data(fromTable);

これはうまく機能し、ほとんどの場合、正しい方法です。

ただし、代わりに buf2Buf 関数を使用するオプションもあります。

buf2Buf(fromTable, toTable);

これもうまく機能します。では違いは何でしょうか?

違いは、buf2Buf はシステム フィールドをコピーしないことです。システム フィールドには、RecId、TableId、そしておそらくこのコンテキストで最も重要な DataAreaId などのフィールドが含まれます。後者が最も重要である理由は、data() の代わりに buf2Buf() を使用する最も一般的なケースは、通常 changeCompany キーワードを使用して会社アカウント間でレコードを複製する場合であるためです。

たとえば、あなたが「dat」という会社に所属していて、「com」という別の会社があり、その会社の CustTable のすべてのレコードをコピーしたいとします。

while select crossCompany : ['com'] custTableFrom
{
    buf2Buf(custTableFrom, custTableTo);
    custTableTo.insert();
}

この場合、buf2Buf はシステム フィールドを除くすべてのフィールド値を新しいバッファーにコピーするため、機能します。代わりに data() を使用した場合、その値も新しいバッファーにコピーされるため、新しいレコードは "com" 会社アカウントに挿入されます。

(実際には重複キー エラーが発生しますが、これも望ましい結果ではありません)。

BlueskyでシェアFacebookでシェアLinkedInでシェアTumblrでシェアXでシェアLinkedInでシェアPinterest にピン留めする

ミッケル・バン・クリステンセン

著者について

ミッケル・バン・クリステンセン
ミッケルはmiklix.comの開発者でありオーナーです。プロのコンピューター・プログラマー/ソフトウェア開発者として20年以上の経験を持ち、現在はヨーロッパの大手IT企業に常勤している。ブログを書いていないときは、さまざまな興味、趣味、活動に余暇を費やしている。