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

本橋孝昭です。

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

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

https://qiita.com/Takaa/items/6010ecb76cd0ede1346e


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

という設定になります。

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

とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/b8dc5f50-abe4-47aa-bef5-3dce8935ddce.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/c49b4f0d-a9ba-4f0d-b846-511f24d5dab0.png)


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

## 1 Apexを作成しよう

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

### ・ステップ１　歯車マーク設定から「開発者コンソール」クリック
### ・ステップ２　File→New→Apex Class　をクリック　名前を付けてOKをクリック

### ・ステップ３　以下のコードを記載し「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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/b0b3b097-ddf7-47ed-950a-bc90f65d761f.png)



## 2 フローを作成しよう

次にフローを作成します

フローの全体像はこちら

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/48e229b1-cf36-479e-b4f9-3bab9755d2f4.png)


開始条件件

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/7f980cac-ff38-4a0f-af26-e3d6f364a773.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/719677e0-810e-482e-8a30-70de2ee9a0df.png)


以上で設定完了です

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

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


例
CorporateNumber__c　が333の取引先　株式会社ABCがあります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/45bab5b2-e37d-4087-8364-962272bf40f2.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/5b42ce79-6318-4241-b850-6223c4d38724.png)


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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/17d316a0-a64d-4dd3-818d-a1c4247634c5.png)