【Salesforce】Apexで作成したレコードに割り当てルールが適用されない

creative internet computer display Salesforce
Photo by Markus Spiske on Pexels.com

以前、クイックアクションでケース作成時に割り当てルールが適用されないことについて記事で紹介しました。

この現象は、Apexでケース作成時にも起こるそうです。しかし、Apexでのケース作成時に関しては、解決法がありました。

また、割り当てルールは複数ルールを作成できても一つのルールしか有効化することができません。こちらも、今回紹介するプロパティを使えばApex上で有効化していない割り当てルールを適用することができます。

今回はその二つについて紹介いたします!
※今回はケースについての解決法を書いていますが、リードの割り当てルール適用時も同じ実装になります。

解決法

今回実装で使用するのが、DmlOptions.AssignmentRuleHeader クラス です。
このクラスには、割り当てルール適用を有効化するプロパティ特定の割り当てルールのみを適用させるプロパティの2種類があります。本記事では、両方のプロパティについて解説していきます。

割り当てルール適用を有効化する

Apexで作成したレコードに割り当てルールを適用する場合は、useDefaultRuleというプロパティを使用します。
公式ドキュメントではこのような説明が記載されています。

ケースまたはリードに true を指定した場合、システムはケースまたはリードのデフォルトの (有効な) 割り当てルールを使用します。

https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_class_Database_AssignmentRuleHeader.htm#apex_class_Database_AssignmentRuleHeader

実際にコードを書いてみます。

Database.DMLOptions dmo = new Database.DMLOptions();
dmo.assignmentRuleHeader.useDefaultRule= true;

Case c = new Case(Status = '新規');
insert c;

useDefaultRule = true とすることで、Apex処理で作成したレコードに対しても割り当てルールが実行されます。

特定の割り当てルールのみを適用させる

もし、「すべての割り当てルールではなく、特定の割り当てルールのみを実行したい!」という場合は、assignmentRuleID を使用します。通常、ケースの割り当てルールは複数ルールを作成できても一つのルールしか有効化できません。しかし、この実装を使うことによって有効化されていないルールをApex上で有効化し実行することができます。

Database.DMLOptions dmo = new Database.DMLOptions();
dmo.assignmentRuleHeader.assignmentRuleId= '01QD0000000EqAn';

Case c = new Case(Status = '新規');
c.setOptions(dmo);
insert c;

書き方は、assignmentRuleIDに、割り当てルールのIDを指定し、insertするレコードに対してsetOptionsメソッドでオプションを設定します。


割り当てルールのIDは、割り当てルールの設定画面のURLから取得もしくは、開発者コンソールのQuery Editorで取得が可能です。

Query Editorで取得する場合は、以下が例となります。

ケースの割り当てルール

SELECT id, Name FROM AssignmentRule WHERE SobjectType = 'Case'

リードの割り当てルール

SELECT id, Name FROM AssignmentRule WHERE SobjectType = 'Lead'

Active = trueを検索条件とすることによって、有効化されている割り当てルールのみを取得できます。

まとめ

いかがでしたでしょうか?Apexでレコードを作成し、割り当てルールを適用させる場合は、今回紹介した実装を覚えておきましょう。
Salesforceの画面上では実現できないことも、Apexを活用することにより実現できることが多々あります。今後も、様々な裏技を紹介していけたらと思います。

今回参考にした公式ドキュメント
-DMLOptions クラス
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_methods_system_database_dmloptions.htm

プロフィール
この記事を書いた人
ikumi

20代エンジニア

◆Salesforce保有資格
-認定アドミニストレーター
-認定Platformアプリケーションビルダー
-認定Platformデベロッパー
-認定SalesCloudコンサルタント
-認定ServiceCloudコンサルタント
-認定CRM Analytics and Einstein Discovery コンサルタント

◆Tableau保有資格
-Tableau Desktop Specialist

◆その他
-データサイエンティスト検定

ikumiをフォローする
Salesforce
スポンサーリンク
シェアする
Patrie-tech
タイトルとURLをコピーしました