[Salesforce.com] Apexトリガの勉強

お客様の依頼で、Salesforce.comのCRMをカスタマイズしています。

リード ~ Salesforce - Developer Edition

同一の氏名が入力されたとき、重複フラグにチェックが付く

今回の依頼は、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ループ文で処理するように記述しておきます。

さらなるコードの説明は、この記事で後日付け加えます。
あしからずご了承ください。

2 comments

  1. コブタイカ より:

    はじめまして。コメントをありがとうございます。こちらこそ、宜しくお願いします。
    Apex使いの方でしょうか?勉強は如何ですか?

  2. 匿名 より:

    今日は よろしくお願いしますね^^すごいですね^^