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
420
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
sfdcNihonKajinStudyEvent-5-Trigger and Order
salesforce Trigger and Order
SfdcNihonKajinStudy
May 18, 2019
More Decks by SfdcNihonKajinStudy
See All by SfdcNihonKajinStudy
sfdcNihonKajinStudyEvent-5-Mobile
sfdcnihonkajinstudy
0
310
sfdcNihonKajinStudyEvent-5-Salesforce To Salesforce
sfdcnihonkajinstudy
0
410
sfdcNihonKajinStudyEvent-4-DataIntegration-3
sfdcnihonkajinstudy
0
320
sfdcNihonKajinStudyEvent-4-Heroku
sfdcnihonkajinstudy
0
310
sfdcNihonKajinStudyEvent-4-SFDCApex data types and variables
sfdcnihonkajinstudy
0
300
sfdcNihonKajinStudyEvent-3-DataIntegration-2
sfdcnihonkajinstudy
1
370
sfdcNihonKajinStudyEvent-3-TriggerAndOrder
sfdcnihonkajinstudy
0
580
sfdcNihonKajinStudyEvent-2-Multi-tenant architecture
sfdcnihonkajinstudy
1
280
sfdcNihonKajinStudyEvent-2-DataIntegration
sfdcnihonkajinstudy
1
270
Other Decks in Technology
See All in Technology
What's new in Go 1.27?
ciarana
0
290
AI for Science時代を切り開く、政府の次世代HPC戦略の展望
gpuunite_official
0
150
:syncing_time:
sksat
2
220
MulticaとPi Coding Agentで、小規模OSSを30本同時運用した流れ
eiei114
0
140
Digitization部 紹介資料
sansan33
PRO
2
7.7k
平文パスワードはログに“残り” ── 肝心の侵入は“痕跡すら残らない”
kuroneko13
0
110
ハッカソンで入賞した話 @ Findy LT
asari194617
0
1.4k
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
19k
Kiro Crew入門 - 常駐エージェントの仕組みと使いどころ / Intro to Kiro Crew
k_adachi_01
1
700
LLM Internals: 언어 모델의 계보와 알고리즘 진화 (2023~2026)
inureyes
PRO
1
830
Invisible to AI? Making TYPO3 Sites Quotable by AI Search Systems
wolfgangwagner
0
240
20260817_生成AIの動向と中学校・高等学校での活用を考える_v1.00_公開用
doradora09
PRO
0
170
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
430
Designing Experiences People Love
moore
143
24k
The SEO Collaboration Effect
kristinabergwall1
1
530
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Paper Plane (Part 1)
katiecoart
PRO
1
10k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
970
Done Done
chrislema
186
16k
Music & Morning Musume
bryan
47
7.3k
Test your architecture with Archunit
thirion
2
2.4k
Utilizing Notion as your number one productivity tool
mfonobong
4
550
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
私立吹雪学園付属小学校
アンコールはないの? お替わりいかがですか?