[salesforce] ApexのDatabase.DmlOptionsには気をつけよう

By |8月 6, 2013|salesforce, |


Force.com Apexコード開発者ガイドのp117(131スライド目)から書かれていますがDatabase.DmlOptionsは思わぬところでハマったり、逆に使い方を知ると便利だったりします。以下のブログ記事などはDatabase.DmlOptionsが関連した内容のようです。

以下、それぞれのプロパティの意味をまとめました。

allowFieldTruncationプロパティ

これは項目の文字列の切り捨てをするかどうか指定できます。デフォルトはfalseなので80文字しか入らない項目に200文字入れようとすると「データ値が大きすぎる」というエラーが返ります。これにtrueを指定すると80文字以降は切り捨てられエラーなく保存されます。

[html]
Account acc = new Account(Name = ‘aaaa…’); <=多量文字列
Database.DMLOptions dml = new Database.DMLOptions();
dml.allowFieldTruncation = true;
acc.setOptions(dml);
insert acc;
[/html]

assignmentRuleHeaderプロパティ

これは[salesforce]APEXから作成したレコードに対して、割り当てルールを実行の通りです。assignmentRuleHeaderプロパティを使用すると、assignmentRuleIDとuseDefaultRuleといったオプションを設定できます。

emailHeaderプロパティ

これはTodo作成時のメール通知をApexから行う方法【saleforce】「ケース所有者に新規ケースコメントを通知する」のメールが飛ばないゼイ。が該当しますが、それ以外にも以下の場合に関連するようです。気をつけましょう。

  • ケースメールの取引先責任者への変換
  • 新規ユーザのメール通知
  • リードキューのメール通知
  • パスワードのリセット

emailHeaderプロパティを使用すると、triggerAutoResponseEmail、triggerOtherEmail、triggerUserEmailといったオプションを設定できます。

localeOptionsプロパティ

これは…ちょっと使いどころがよくわかりません。表示ラベルの言語を選択できるように読めますが…describeと合わせて使う??

optAllOrNoneプロパティ

これは複数レコードをDMLする際にエラーレコード以外をロールバックするかコミットするか指定するプロパティです。trueにしてリストをInsertした場合、エラーレコードが1行でもあれば全てロールバックし、falseにすればエラーレコード以外はコミットします(以下のようにInsert後、Database.SaveResultで結果を受け取るように書かないと処理が落ちるだけになります)

※なお、DMLメソッドにはoptAllOrNoneプロパティと同様の動きをするopt_allOrNoneというパラメータもあります。参考: Database Class