Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
sfdcNihonKajinStudyEvent-5-Trigger and Order
Search
SfdcNihonKajinStudy
May 18, 2019
Technology
0
390
sfdcNihonKajinStudyEvent-5-Trigger and Order
salesforce Trigger and Order
SfdcNihonKajinStudy
May 18, 2019
Tweet
Share
More Decks by SfdcNihonKajinStudy
See All by SfdcNihonKajinStudy
sfdcNihonKajinStudyEvent-5-Mobile
sfdcnihonkajinstudy
0
300
sfdcNihonKajinStudyEvent-5-Salesforce To Salesforce
sfdcnihonkajinstudy
0
380
sfdcNihonKajinStudyEvent-4-DataIntegration-3
sfdcnihonkajinstudy
0
300
sfdcNihonKajinStudyEvent-4-Heroku
sfdcnihonkajinstudy
0
290
sfdcNihonKajinStudyEvent-4-SFDCApex data types and variables
sfdcnihonkajinstudy
0
280
sfdcNihonKajinStudyEvent-3-DataIntegration-2
sfdcnihonkajinstudy
1
350
sfdcNihonKajinStudyEvent-3-TriggerAndOrder
sfdcnihonkajinstudy
0
560
sfdcNihonKajinStudyEvent-2-Multi-tenant architecture
sfdcnihonkajinstudy
1
250
sfdcNihonKajinStudyEvent-2-DataIntegration
sfdcnihonkajinstudy
1
250
Other Decks in Technology
See All in Technology
AWSを利用する上で知っておきたい名前解決のはなし(10分版)
nagisa53
10
3.2k
Claude Code でアプリ開発をオートパイロットにするためのTips集 Zennの場合 / Claude Code Tips in Zenn
wadayusuke
5
2.2k
スクラムガイドに載っていないスクラムのはじめかた - チームでスクラムをはじめるときに知っておきたい勘所を集めてみました! - / How to start Scrum that is not written in the Scrum Guide 2nd
takaking22
2
210
[ JAWS-UG 東京 CommunityBuilders Night #2 ]SlackとAmazon Q Developerで 運用効率化を模索する
sh_fk2
3
460
これでもう迷わない!Jetpack Composeの書き方実践ガイド
zozotech
PRO
0
1.1k
まずはマネコンでちゃちゃっと作ってから、それをCDKにしてみよか。
yamada_r
2
120
Create Ruby native extension gem with Go
sue445
0
130
Evolución del razonamiento matemático de GPT-4.1 a GPT-5 - Data Aventura Summit 2025 & VSCode DevDays
lauchacarro
0
210
slog.Handlerのよくある実装ミス
sakiengineer
4
480
プラットフォーム転換期におけるGitHub Copilot活用〜Coding agentがそれを加速するか〜 / Leveraging GitHub Copilot During Platform Transition Periods
aeonpeople
1
240
Aurora DSQLはサーバーレスアーキテクチャの常識を変えるのか
iwatatomoya
1
1.2k
LLM時代のパフォーマンスチューニング:MongoDB運用で試したコンテキスト活用の工夫
ishikawa_pro
0
170
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
What's in a price? How to price your products and services
michaelherold
246
12k
The Power of CSS Pseudo Elements
geoffreycrofte
77
6k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
A Modern Web Designer's Workflow
chriscoyier
696
190k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
GraphQLの誤解/rethinking-graphql
sonatard
72
11k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
A better future with KSS
kneath
239
17k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Transcript
SFDC在日華人交流会 トリガと実行の順序の再発見 (上級編) 吹雪 真夏 2019/03/30 第3回 吹雪 真夏 2019/05/18
第5回 準備がいいかい? そろそろ始まるよ 第3回 第5回
自己紹介 本名:非公開(国家秘密) 愛称:吹雪真夏、吹雪詩織、吹雪桜梨、 :八神吹雪、四面楚歌…など 問い合わせ:FBI/CIA/MI6にご連絡下さい 所属:株式会社ユエンタジャパン 資格:非公開(地球秘密) 走れ、走れ… 年齢:永遠の17歳(高校2年生)
私立吹雪学園付属小学校 ご入学 おめでとうございます
画面、WF、PBの設定イメージ
WorkFlowについて • 社員マスタに給料項目があります • BeforceTrigger:+10万 • AfterTrigger:+10万 • 入力規則:>=100万 •
WorkFlow:+10万(項目自動更新) • WorkFlow:メールアラート
レベル1:小学校1年生レベルの問題 N O 画面 入力 Trigger カスタム 入力規則 WorkFlow 結果確認
BF AF 項目 更新 メール アラート 画面 メール 1 100 >=100 ? 2 95 +10 >=100 ? 3 85 +10 >=100 ? 給料項目に金額を入力して、保存ボタンを押す 結果確認:画面の表示とメールの金額 1.1:画面(エラーメッセージ ※入力規則で指定したエラーメッセージ) 1.2:画面(エラーメッセージ ※入力規則で指定したエラーメッセージ) 1.3:画面(95)
レベル2:小学校2年生レベルの問題 N O 画面 入力 Trigger カスタム 入力規則 WorkFlow 結果確認
BF AF 項目 更新 メール アラート 画面 メール 1 85 +10 ? 2 85 +10 >=100 +10 ? 3 85 +10 >=100 +10 • ? ? 給料項目に金額を入力して、保存ボタンを押す 結果確認:画面の表示とメールの金額 2.1:画面(システムエラー ※AFには自身を更新できません) 2.2:画面(115 ) 2.3:画面(115)、メール(95 ※項目自動更新前の値)、何で?? ※課題:検証方法が間違いか、それとも、バグ? 公式サイト(https://help.salesforce.com/articleView?id=workflow_field_update_considerations.htm&type=5) 項目自動更新は、メールアラート、ToDo、およびアウトバウンドメッセージの前に実行されます。 項目自動更新は、ケース割り当て、リード割り当て、自動レスポンスの各ルールの後に実行されます。
ProcessBuilderについて • 社員マスタに給料項目があります • BeforceTrigger:+10万 • AfterTrigger:+10万 • 入力規則:>=100万 •
ProcessBuilder:+10万(項目更新) • ProcessBuilder:メールアラート
N O 画面 入力 Trigger カスタム 入力規則 ProcessBuilder 結果確認 BF
AF メール アラート 項目 更新 メール アラート 画面 メール 1 85 +10 >=100 +10 ? 2 75 +10 >=100 +10 ? 3 60 +10 >=100 +10 ? レベル3:小学校3年生レベルの問題 給料項目に金額を入力して、保存ボタンを押す 結果確認:画面の表示とメールの金額 3.1:画面(システムエラー ※入力規則エラー) 3.2:画面(システムエラー ※入力規則エラー) 3.3:画面(90)
ProcessBuilderメール設定例
N O 画面 入力 Trigger カスタム 入力規則 ProcessBuilder 結果確認 BF
AF メール アラート 項目 更新 メール アラート 画面 メール 1 60 +10 >=100 • +10 ? ? 2 60 +10 >=100 +10 • ? ? 3 60 +10 >=100 • +10 • ? ? レベル4:小学校4年生レベルの問題 給料項目に金額を入力して、保存ボタンを押す 結果確認:画面の表示とメールの金額 4.1:画面(90)、メール(70) 4.2:画面(90)、メール(90) 4.3:画面(90)、メール(70) 、メール(90)
N O 画面 入力 Trigger カスタム 入力規則 WorkFlow ProcessBuilder 結果確認
BF AF 項目 更新 メール アラート メール アラート 項目 更新 メール アラート 画面 メール 1 95 +10 >=100 +10 • • +10 • ? ? 2 50 +10 >=100 +10 • • +10 • ? ? 3 20 +10 >=100 +10 • • +10 • ? ? レベル5:小学校5年生レベルの問題 給料項目に金額を入力して、保存ボタンを押す 結果確認:画面の表示とメールの金額 5.1:画面(エラーメッセージ ※入力規則で指定したエラーメッセージ) 5.2:画面(システムエラー ※PB入力規則エラー) ※課題:回避方法は? 5.3:画面(70)、メール(30) 、メール(50) 、メール(70)
レベル6:小学校6年生レベルの問題 (私立吹雪学園付属中学校入試試験)
Q1:Trigger.Newについて List<Account> actListに5件Accountがある (内訳【:新規:2件、更新:3件】) Upsert actList; Trigger(Before Insert, Before Update)
{ system.debug(Trigger.new); } 問題:Triggerが何回実行するか? :Trigger.Newには何件Accountがあるか? :DML実行回数? 答え:Trigger(2回 ※insert、Update) :Trigger.New(新規2件 ※InsertTrigger) 、Trigger.New(更新3件 ※UpdateTrigger) :DML(1回)
Q2:DML実行回数について List<Account> actListに210件新規Accountがある Insert actList; Trigger(After Insert) { List<Contact> contactList
= new List<Contact> (); for (Account act :Trigger.New) { contactList.add(new Contact(name=‘責任者’, accountid=act.di)); } insert contactList; } 問題:Triggerが何回実行するか? :DML実行回数は? 答え:Trigger(2回 ※200件と10件)、DML(3回) 説明:Triggerには最大200件レコードを処理する、つまり、Trigger.Newには最大200件レコードを保持する
トリガと実行の順序の纏め 2.3.WorkFlow: 画面入力→BfTrigger→カスタム入力規則→AfTrigger→WF処理(MailAlertの作成→項目自動更新→ BfTrigger → AfTrigger )→DBCommit→ MailAlertの送信 4.1.ProcessBuilder (MailAlert→項目更新):
画面入力→BfTrigger →入力規則→ AfTrigger →PB処理( MailAlertの作成→項目更新→ BfTrigger →カスタム入力規則 → AfTrigger ) →DBCommit→ MailAlertの送信 4.2.ProcessBuilder (項目更新→ MailAlert) : 画面入力→BfTrigger →入力規則→ AfTrigger →PB処理( 項目更新→ BfTrigger →カスタム入力規則→ AfTrigger → MailAlertの作成 ) →DBCommit→ MailAlertの送信 4.3.ProcessBuilder (MailAlert→項目更新→ MailAlert) : 画面入力→BfTrigger →入力規則→ AfTrigger →PB処理( MailAlertの作成→項目更新→ BfTrigger →カスタム入力規則 → AfTrigger → MailAlertの作成) →DBCommit→ MailAlertの送信 5.3.WorkFlow とProcessBuilder (MailAlert→項目更新→ MailAlert) : 画面入力→BfTrigger→カスタム入力規則→AfTrigger→WF処理(MailAlertの作成→項目自動更新→ BfTrigger → AfTrigger )→PB処理( MailAlertの作成→項目更新→ BfTrigger →カスタム入力規則→ AfTrigger → MailAlertの作 成) →DBCommit→ MailAlertの送信
実行の順序の注意事項 AfterTriggerには自分自身を更新できません WFのMailAlertの値はWFのFieldUpdate実行前の値です PBのFiledUpdateは自分自身を更新すると、入力規則でシステムエラーが発生する恐れがあ る(5.2の例) PBのFiledUpdateは親項目を更新する時に、参照された子項目の値は、PB実行前の値です
(例:親金額=子金額(PB実行前)+10万) PB更新は一つDMLで更新レコード数の制限が適用(一万件) 結論:TriggerとWF/BFを一緒に使わないでください
親の項目の更新モデル TestChildren TestParent
親の項目の更新モデル(Case1) 子金額1=子金額1 + 10万 子金額2=子金額1 + 5万 親金額1=子金額1+ 6万 親金額2=子金額2+
6万
N O 子画面入力 Trigger ProcessBuilder項目更新 結果確認 BF AF 子金額1 子金額2
親金額1 親金額2 金額 メール 1 金額1 20 +10 +5 子金1+6 金額2 20 子金2+6 2 金額1 20 +10 +10 +5 子金1+6 金額2 20 子金2+6 親の項目の更新モデル(Case1) 答え 子金額1 子金額2 親金額1 親金額2 備考 1 30 25 26 26 2 50 35 36 26
親の項目の更新モデル(Case1の結果) 1-2:結果 1-1:結果 ←左記も同じ結果です
親の項目の更新モデル(Case2) 子金額1=子金額1 + 10万 子金額2=子金額1 + 5万 親金額1=子金額1 + 6万
親金額2=子金額2 + 6万
N O 子画面入力 Trigger ProcessBuilder項目更新 結果確認 BF AF 子金額1 子金額2
親金額1 親金額2 金額 メール 1 金額1 20 +10 +5 子金1+6 金額2 20 子金2+6 2 金額1 20 +10 +10 +5 子金1+6 金額2 20 子金2+6 親の項目の更新モデル(Case2) 答え 子金額1 子金額2 親金額1 親金額2 備考 1 30 25 26 26 2 60 35 36 26
親の項目の更新モデル(Case2の結果) 2-2:結果 2-1:結果
親の項目の更新モデル(Case3) 子金額1=子金額1+ 10万 MailAlert 子金額2=子金額1 + 5万 MailAlert 親金額1=子金額1 +
6万 MailAlert 親金額2=子金額2 + 6万 MailAlert MailAlert
親の項目の更新モデル(Case3の画面) N O 子画面入力 Trigger ProcessBuilder項目更新 結果確認 BF AF 子金額1
子金額2 親金額1 親金額2 金額 メール 1 金額1 20 +10 +10 メール +5 メール +6 メール 金額2 20 +6 メール 実行前 実行後
親の項目の更新モデル(Case3メール) N O 子画面入力 Trigger ProcessBuilder項目更新 結果確認 BF AF 子金額1
子金額2 親金額1 親金額2 金額 メール 1 金額1 20 +10 +10 メール +5 メール +6 メール 金額2 20 +6 メール
子の項目の更新モデル(1万件以上) エラーが発生しました: Too many DML rows: 10001
私立吹雪学園付属小学校
アンコールはないの? お替わりいかがですか?