お客様の依頼で、Salesforce.comのCRMをカスタマイズしています。
今回の依頼は、Web-to-Leadにおいて新規リード・データを登録するとき、登録されているリード・リスト(もしくは顧客リスト)のデータに重複データが無いかチェックを行い、もし「氏名」と比較して重複するデータがあった場合には自動的に「重複」という項目にチェックが入るというものです。つまり、トリガが動作する流れは以下のようになります。
Web-to-Leadでデータの取り込み
↓
既存リード・データとの照合
↓
もし、既存リード・データと氏名が合致した場合は、
Web-to-Leadで追加される新規データの項目にある「重複」フラグをTrueにして保存する。
↓
終了
こうすれば、Web-to-Leadから大量に入力されるリードのデータを後にマージするときに便利になります。
Apexトリガの作り方は至極簡単で、「設定」>「開発」>「Apexトリガ」>「新規」を選択します。
Apexトリガの編集画面までの手順は割愛しますが、今回は「リード・レコードを新規登録するとき」にトリガをかけるので「Before Insert」を選択しておきます。
以下にソースコードを記します。
trigger LeadCheckTrigger on Lead (before insert) { if(Trigger.isInsert){ for(Lead newLead : Trigger.new){ String strName = newLead.LastName + newLead.FirstName; List <LeadList> = new List<Lead>(); LeadList = [select firstname, lastname from Lead]; for(Lead ld : LeadList){ //氏名の重複チェック if(strName != null && strName.length() > 0){ if(ld.lastname+ld.firstname == strName){ newLead.Choufuku__c = true; } } } } } }
01行目:ApexトリガをSalesforce.com_CRMで作成したとき、自動的に作成してくれます。今回は「LeadCheckTrigger」という名前で登録しています。
02行目:今回は新規リード・データの取り扱いを対象としているため、Trigger.isInsertが「真」のときのみ動作するように「安全装置」を付けておきます。
03行目:Salesforce.comをご利用のユーザはご存じだと思いますが、Web-to-Leadでの取り込みは結構なタイムラグがあります。どのようにデータを処理しているのか詳細は分かりませんが、新規データをサーバのメモリ上に一度展開して、タスクを見計らって処理を行っているならば、数件のWeb-to-Leadデータが一気に処理されるかも知れません。そのため、たとえトリガで処理されるデータが1つだとしても、forループ文で処理するように記述しておきます。
さらなるコードの説明は、この記事で後日付け加えます。
あしからずご了承ください。
はじめまして。コメントをありがとうございます。こちらこそ、宜しくお願いします。
Apex使いの方でしょうか?勉強は如何ですか?
今日は よろしくお願いしますね^^すごいですね^^