ApexやAPI経由で作成されたリードへの「リード割り当てルール」適用

By | July 7, 2020

前書き

「リード割り当てルール」を有効化しても、ApexやAPI経由で作成されたリードについてはルールが適用されません。

当該問題を回避するためには、database.DMLOptionsオブジェクトのassignmentRuleHeaderメソッドを利用することで割り当てルールが適用されるようにしてあげる必要があります。

方法

After Triggerに全部書いてもよいですが、エンタープライズでよほどパフォーマンスを考慮しないといけない場合を除いて、プロセスビルダーから呼び出した方が汎用的なので、今回はその方針で実装していきます。

まずは下記のApex Classを作成。

public class RunAssignmentRules {
    @InvocableMethod
    public static void assignLeads(List<Id> leadIds){
        Database.DMLOptions dmo = new Database.DMLOptions();
        dmo.AssignmentRuleHeader.useDefaultRule = TRUE;
        List<Lead> toAssign = [SELECT Id FROM Lead WHERE Id = :leadIds];
        Database.update(toAssign,dmo);
    }
}

次に当該のApex Classを呼び出すためのProcess Builderを組みます。

Apex経由にせよWeb API経由にせよ、当該のソースから作成されたリードであるという属性情報などがあるはずなので、Criteria Componentにその情報を入力。

次にさきほど作成したApex Classを呼び出すのですが、超重要なポイントとして、このApex Classの呼び出し(というより一般にdatabase.DMLOptions関連のメソッドの呼び出し)は「Scheduled Action」扱いにする必要があります。

なので、「0 Hours After Last Modified Date」で当該のClassを呼び出し。

ちなみに、Apexで書く場合でも同様の処理を行わなければならないらしいです。(参考サイト


上をサボると動きません(と言われても一度は試してしまうのが人間というもの)
お試しいただいた通り、動きません。

これで完成…なのですが、一点注意。
当該のApex Class呼び出しがScheduled Actionとしてなされている関係で、リードの所有者が「デフォルトの割り当て先」から「リード割り当てルール」適用後の所有者に更新されるまで60秒ほどのラグが存在します。

なので、検証時にロジックが動作しているにもかかわらず動作していないと勘違いしてしまわないよう気をつけてくださいノ