[salesforce] ApexのDatabase.DmlOptionsには気をつけよう
Force.com Apexコード開発者ガイドのp117(131スライド目)から書かれていますがDatabase.DmlOptionsは思わぬところでハマったり、逆に使い方を知ると便利だったりします。以下のブログ記事などはDatabase.DmlOptionsが関連した内容のようです。
- [salesforce]APEXから作成したレコードに対して、割り当てルールを実行
- Todo作成時のメール通知をApexから行う方法
- 【saleforce】「ケース所有者に新規ケースコメントを通知する」のメールが飛ばないゼイ。
以下、それぞれのプロパティの意味をまとめました。
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