dackdive's blog

新米webエンジニアによる技術ブログ。JavaScript(React), Salesforce, Python など

[Salesforce]リードの「取引の開始」時にトリガを実行する方法

リード(Lead)オブジェクトの「取引の開始」を実行すると
リードの色々な項目の情報を引き継いで新たに取引先(Account)取引先責任者(Contact)商談(Opportunity)が作成される。

このとき、

  • 特定のカスタム項目の値を作成されたオブジェクトのどこかに引き継ぎたい!

という要求はリードのカスタム項目の対応付けによって実現ができそうだけど、

  • リードにひもづけていたカスタムオブジェクトを取引先に引き継ぎたい!

といったカスタマイズをしたいと思った時、どうするのかわからなかったので その方法をメモ。

実装方法

リードのリファレンスを参考にする。

重要なこと

  1. リードの取引が開始されたかどうかはIsConvertedというフィールドを見るとわかる。
  2. リードの取引開始によって作成された各オブジェクト(取引先、取引先責任者、商談)のIDは以下で取得する。
取引先:ConvertedAccountId
取引先責任者:ConvertedContactId
商談:ConvertedOpportunityId

試してみる

カスタムオブジェクトの作成

リードから取引先に引き継ぎたい情報がカスタムオブジェクトになっているという想定で、
Myobjというカスタムオブジェクトを用意する。

f:id:dackdive:20140606014521p:plain

MyobjLeadAccount両方を参照関係の項目として持っている。

リードのトリガの実装

残念ながらリードがIsConverted=trueになったタイミングでのトリガというのはないので
普通にbefore updateトリガなどを使う。

trigger LeadTrigger on Lead (before update) {
    for (Lead lead : Trigger.new) {
        if (lead.isConverted) {
            // リードにひもづくカスタムオブジェクトを取得
            Myobj__c obj = [SELECT Id FROM Myobj__c WHERE Lead__c = :lead.id];
            
            // ConvertedAccountIdを使って取引先とひもづける
            obj.account__c = lead.convertedAccountId;
            update obj;
        }
    }
}

結果

こんなリードを

f:id:dackdive:20140606023543p:plain

「取引の開始」して

f:id:dackdive:20140606022832p:plain

結果は、こう。

f:id:dackdive:20140606022839p:plain

無事、カスタムオブジェクトを引き継ぐことができました。