Dynamics 365独自の言語! X++講座 《doUpdate()とUpdate()の使い分け》

みなさまこんにちは。黒木です。
 
業務でX++について学んできた私ですが、今回から調べて実装してみて、なるほど! と思ったことをまとめていこうと思います。
 
このブログでは、データ更新の際によく使うdoUpdate()とUpdate()の違いについてご紹介します。

doUpdate()とupdate()の違いとは?


SalesLine salesLine1;
ttsbegin;
select forupdate salesLine1 where salesLine1.RecId == 12345678;
salesLine1.PurchFormNum = 'AAA';
salesLine1.update();
ttscommit;

SalesLine salesLine2;
ttsbegin;
select forupdate salesLine2 where salesLine2.RecId == 12345678;
salesLine2.AddonColumn = 'BBB';
salesLine1.doUpdate();
ttscommit;

上記のプログラムは、D365の標準テーブルであるSalesLineを更新するプログラムです。salesLine1はPurchFormNum(標準項目)に文字列AAAを、salesLine2はAddonColumn(アドオン項目)に文字列BBBを代入して更新する処理になります。
 
一見似ているプログラムですが、最後のテーブル更新を行う部分はupdate()とdoUpdate()になっています。些細な違いですが、実はこのメソッド内でやっていることは大きく異なります。
 
その違いは……SalesLineを更新する際、他のテーブルもチェックしているかどうかです。
 
update()はSalesLineを更新する際、他項目やSalesLineに紐づく他の標準テーブルもチェックします。このチェックにより、データベースの整合性を保ったままSalesLineを更新することができます。
 
一方で、doUpdate()はAddonColumnのみを更新します。他のテーブル情報などのチェックは行いません。
 
それであれば、update()で更新するのが良いのでは? と思ってしまうかもしれません。しかし、このメソッドは他テーブルであっても適切な値に更新する場合があります。
 
私は標準の項目を更新する時はupdate()を、アドオンで追加した項目を更新する時はdoUpdate()で更新する、といった形で使い分けています。

まとめ

いかがでしたでしょうか。
 
今回はdoUpdate()とupdate()の使い分けについてご紹介しましたが、似たようなメソッドにdoInsert()とinsert()、doDelete()とdelete()もあります。
 
insertでもdeleteでも、今回解説した内容と同じ処理になっています。こちらも上手く使い分けていくといいですね。
 
それでは、また。
 
 
 
 
《関連記事》

記事をシェア
MOST VIEWED ARTICLES