Dynamics AX 2012 の data() と buf2Buf() の違い
出版された: 2025年2月15日 22:53:49 UTC
最終更新日 2026年1月12日 8:41:03 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」会社アカウントに挿入されていたはずです。
(実際には重複キー エラーが発生しますが、これも望ましい結果ではありません)。
さらに読む
この投稿が気に入った場合は、次の提案も気に入るかもしれません:
- Dynamics AX 2012 の X++ から AIF ドキュメント サービスを直接呼び出す
- Dynamics AX 2012 でのマクロと strFmt を使用した文字列の書式設定
- Dynamics AX 2012 の SysOperation データ コントラクト クラスでクエリを使用する
