0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Salesforceでフローを作成しよう~~リードの項目更新を起点に自動で「取引開始済み」する~かつ取引先重複を確認し取引先作成を判断

Posted at

本橋孝昭です。

今回はSalesforceフローで過去に作成したこちら の応用版となります。

Salesforceでフローを作成しよう~リードの項目更新を起点に自動で「取引開始済み」する~

応用版としては
・既存の取引先データを判断して同じ取引先があると判断した場合、新規取引先は作成しない。取引先責任者のみ作成し既存の取引先にひもづける

という設定になります。

今回は「取引先が重複」と判断する方法は「リードと取引先に カスタム項目CorporateNumber__c(法人番号)」を用意しておいてリードの取引先開始済み時に取引先のCorporateNumber__cで同じ値があれば重複判定

とします。

image.png

image.png

では、フローを見ていきましょう

1 Apexを作成しよう

Apex作成方法は以下の通りです

・ステップ1 歯車マーク設定から「開発者コンソール」クリック

・ステップ2 File→New→Apex Class をクリック 名前を付けてOKをクリック

・ステップ3 以下のコードを記載し「Save」

public class AutoConvertLeads2 {

    @InvocableMethod(label = 'Auto Convert Leads')
    public static void LeadAssign(List<RequestWrapper> requestList) {

        LeadStatus CLeadStatus = [SELECT Id, MasterLabel FROM LeadStatus WHERE IsConverted = true LIMIT 1];

        List<Database.LeadConvert> MassLeadconvert = new List<Database.LeadConvert>();

        for (RequestWrapper req : requestList) {

            // リード情報を取得
            Lead leadRecord = [SELECT Id, CorporateNumber__c FROM Lead WHERE Id = :req.LeadId LIMIT 1];

            // 同じ法人番号を持つ取引先をすべて取得
            List<Account> accounts = [
                SELECT Id 
                FROM Account 
                WHERE CorporateNumber__c = :leadRecord.CorporateNumber__c
            ];

            Database.LeadConvert Leadconvert = new Database.LeadConvert();
            Leadconvert.setLeadId(req.LeadId);

            if (accounts.size() == 1) {
                // 一意の取引先が見つかった場合
                Leadconvert.setAccountId(accounts[0].Id);
            } else if (accounts.isEmpty()) {
                // 重複する取引先がない場合、新しい取引先を作成
                if (req.AccountId != null) {
                    Leadconvert.setAccountId(req.AccountId);
                }
            } else {
                // 重複データが存在する場合、エラー情報を記録しスキップ
                System.debug('重複する取引先が見つかりました: ' + accounts);
                continue; // 処理をスキップ
            }

            Leadconvert.setConvertedStatus(CLeadStatus.MasterLabel);
            Leadconvert.setDoNotCreateOpportunity(true);

            MassLeadconvert.add(Leadconvert);
        }

        if (!MassLeadconvert.isEmpty()) {
            List<Database.LeadConvertResult> lcr = Database.convertLead(MassLeadconvert);
        }
    }

    // InvocableVariable を使ったラッパークラス
    public class RequestWrapper {
        @InvocableVariable(label = 'LeadId' required = true)
        public Id LeadId;

        @InvocableVariable(label = 'AccountID')
        public Id AccountId;
    }
}

以上でApexの設定は完了です

image.png

2 フローを作成しよう

次にフローを作成します

フローの全体像はこちら

image.png

開始条件件

image.png

image.png

以上で設定完了です

最後にフロー保存とフロー有効化も忘れずに。

もしもリードの取引先開始済み時に リードのCorporateNumber__cと取引先のCorporateNumber__cで同じ値があれば重複判定として取引先は作成されず取引先責任者が作成され取引先責任者は既存の取引先に紐づきます


CorporateNumber__c が333の取引先 株式会社ABCがあります
image.png

リードでCorporateNumber__c が333のやまださんをHOtにします

image.png

この場合、やまださんの取引先責任者は自動作成されますが取引先は作成されない。取引先責任者のやまださんは既存の取引先に紐づきます

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?