![見出し画像](https://assets.st-note.com/production/uploads/images/111498293/rectangle_large_type_2_9191302e6812aa3a1471ac038b532b04.png?width=1200)
【Salesforce管理業務の効率化】ApexとFlowのトリガーについて図にしてみた
2023/07/23
Twitterで下記のような指摘をいただいたため修正しております!
Shunさん、ユウタさん ご指摘ありがとうございます!!!
フロートリガにもBeforeがあるけれど、意図的に省略しているのかな?🤔 https://t.co/SbMn3jlhMf
— Shun Kosaka (@shunkosa) July 23, 2023
以下の図によると、一番場じめに実行されるのはbeforeのフローですね pic.twitter.com/jU2QJWYJah
— ユウタ | salesforce (@310YYYUUUTTTAAA) July 23, 2023
少し雑にまとめています🙇♂️
本記事の目的としては、トリガー処理でできることは何か、どういった使い方ならこれを活かせるのかと言った、気づきを共有することです。
トリガーの実行順序
Salesforceにはレコードの作成や更新を行った際に、それをトリガーとした処理のカスタマイズが設定できます。
現状はApexかFlowのどちらかを使うと思いますが、これらは実は実行タイミングが異なります。下記の図をご確認ください。
![](https://assets.st-note.com/img/1690098499652-Buua81IPPP.png)
ほぼノーコードなFlow(フロー)は、トリガーで処理をする場合、トリガー元のレコードが処理を完了する前とに呼び出され実行します。
Apexで"before"というレコードの処理実行前に呼び出される設定ですと、レコードの作成や更新など何かしらの操作が「これから行われる」ってときに呼び出すことができます。
Flowでもimgのように、レコードの処理はじめ、完了前に呼び出して実行ができるそうな!
さらにいうと、Apexトリガーの前後にFlowによるトリガーの実行順序が来るとのことで、いっそうApexでないとできないということがない限りFlow一択となりそうです。
ここまでで、Salesforceに馴染みのあるアドミンやエンジニアは想像がつくかもしれませんが、レコード生成をする直前まででエラーが発生している場合のエラーはApexやFlowでは感知できないんです。
※だからなんだという気持ちもあるかもですがね、、、
トリガーの使い道
Flowの場合は、レコードの操作予定の処理結果がコミットされずに一時的に保持されるため、それをベースにレコードへのデータを加工したりは容易にできます。ただし、APIコールなどの処理は基本はApexで作成が必要です。
Apexの場合、APIコールや複雑な処理による結果を格納したいかどうかで決めるのがいいかもです。特にない場合かつ、after設定を使いたいなら、Flowで作成した方が楽に実装できます。
※Flowでもafterとbeforeなレコードトリガー ができるそうな
何が言いたいかというと、Apexでわざわざ使う必要がないならFlowを使ってくれた方がアドミン業務はクソほど楽になるということです。
そんだけです!