ApexからのDML操作、普通にinsertやupdateを使用しているのではないでしょうか?
今回はDatabaseクラスに着目して違った形のDML操作を記載したいと思います。
Databaseクラスとは
データ操作を行うメソッドが多く含まれているクラスになります。
詳しくはこちら。
まずは以下の例文から。
List<Account> accList = new List<Account>(); accList.add(new Account(name = 'Hoge1', YearStarted = '2016')); accList.add(new Account(name = 'Hoge2', YearStarted = '2017')); accList.add(new Account(name = 'Hoge3', YearStarted = '2018')); insert accList;
ちなみに、AccountのYearStartedは開始年でテキスト4文字の項目です。
よくある、リストでまとめてinsertするコードです。
実は、このinsertコマンド、Database.insert(accList, true);と同等の意味を持ちます。
おそらくみなさんは、省略したinsertなんちゃらの方を使い慣れていると思います。
では、次のコードはどうでしょう。
3番目にあえて桁数エラーが起こるような書き方にしました。
List<Account> accList = new List<Account>(); accList.add(new Account(name = 'Hoge1', YearStarted = '2016')); accList.add(new Account(name = 'Hoge2', YearStarted = '2017')); accList.add(new Account(name = 'Hoge3', YearStarted = '201801')); insert accList;
この場合は、insertに失敗しますが、正常であるはずの1,2件も一緒に登録されません。
正常なものは登録したい場合は、以下のようにDatabase.insertの第2引数をfalseに指定することで正常なものは登録可能になります。
第2引数のBooleanの意味は、
true→登録できないレコードがあったら全てオジャンにして、エラーを出す
false→エラーを吐き出さず、登録できるレコードは全て登録する
List<Account> accList = new List<Account>(); accList.add(new Account(name = 'Hoge1', YearStarted = '2016')); accList.add(new Account(name = 'Hoge2', YearStarted = '2017')); accList.add(new Account(name = 'Hoge3', YearStarted = '201801')); Database.insert(accList, false);
この通り、正常なものだけ登録されていますね。
エラーで止まってしまうことがありません。
ちなみに、3件全部エラーのケースでもエラーは発生しませんでした。
また、Database.insertの戻り値はDatabaseSavePointなので、途中結果を記録する場合は活用してください。
今回の例はinsertでしたが、updateやdeleteなどでも同じように第2引数が指定できます。
今日はこれだけなのでまとめはなし!
コメント