yujiroのプログラミング

勉強内容をアウトプットし、サボらないようにする為のブログ

<DAY217>トリガーなのか、プロセスビルダーなのか(使い分け)

\ Follow me!! /

●9/26(木)
●学習日数 217日
●学習時間(本日)4時間
●累計学習時間 922.0時間
●一日あたりの平均学習時間 4.28時間

f:id:yujiro0320:20190904163314p:plain

プロセスビルダーとAPEXトリガーの使い分け


基本、プロセスビルダーでできる事はプロセスビルダーで設定する。
できない事はAPEXでコードを書く。
何ができて、できないのかを整理して把握する必要がある。

プロセスビルダーでできる事

(例)
Account checkbox__cがtureの時に
Accountの郵便番号(請求先)のデーターを郵便番号(納入先)とコピーする。

trailheadでAPEXで実行させたトリガーはわざわざコード書かなくても実行できる。

コードで書くとこんな感じになる。

trigger TestAccount1 on Account (before insert,before update) {   
    for(Account a :trigger.new){
        if(a.checkbox__c==true){
            a.ShippingPostalCode = a.BillingPostalCode;
        }
    }
}

プロセスビルダーでできない事

(例)
Accountとひもづくopportunityがない時に、
商談結果にAccountのnameと文字列の結合した表題の表示
そのほか項目を追加し、レコードを作成する。

(1)Accountとひもづくopportunityの数を探すのはできない。(親→子)の参照。レコードがない
(2)Accountの名前を参照し、商談の表題に書き込むのはできるが,文字列も追加して書き込むのはできない。

このような場合はAPEXのコードをかく。

trigger TestAccount2 on Account (after insert,after update) {
    
    List<Opportunity> opps = new List<Opportunity>();
    
      List<Account> accs = [SELECT Id,(SELECT Id FROM Opportunities) FROM Account
        WHERE Id IN :Trigger.New AND
                                             Id NOT IN (SELECT AccountId FROM Opportunity)];
    
    for(Account a : accs){
            opps.add(new Opportunity(
                Name=a.Name + '商談',
                StageName='Prospecting',
                CloseDate=System.today().addMonths(1),
                AccountId=a.Id
            ));
  
    }
    
    if(opps.size() > 0){
        insert opps;
    }
}

結論

SOQLを用いて、関連するデーターのみを更新するなどができない。
関連するデーターと同じのを入力ならできるが、同じもの+’文字列’はできない。