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
390
sfdcNihonKajinStudyEvent-4-DataIntegration-3
sfdcnihonkajinstudy
0
300
sfdcNihonKajinStudyEvent-4-Heroku
sfdcnihonkajinstudy
0
300
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
30分でわかる!!『OCI で学ぶクラウドネイティブ実践 X 理論ガイド』
oracle4engineer
PRO
1
110
アノテーション作業書作成のGood Practice
cierpa0905
PRO
1
390
東京大学「Agile-X」のFPGA AIデザインハッカソンを制したソニーのAI最適化
sony
0
190
猫でもわかるAmazon Q Developer CLI 解体新書
kentapapa
1
300
設計に疎いエンジニアでも始めやすいアーキテクチャドキュメント
phaya72
26
17k
AWS re:Invent 2025事前勉強会資料 / AWS re:Invent 2025 pre study meetup
kinunori
0
1.1k
LLM APIを2年間本番運用して苦労した話
ivry_presentationmaterials
9
5k
実践マルチモーダル検索!
shibuiwilliam
3
550
AI連携の新常識! 話題のMCPをはじめて学ぶ!
makoakiba
0
180
DMARCは導入したんだけど・・・現場のつぶやき 〜 BIMI?何それ美味しいの?
hirachan
1
140
CLIPでマルチモーダル画像検索 →とても良い
wm3
2
780
ストレージエンジニアの仕事と、近年の計算機について / 第58回 情報科学若手の会
pfn
PRO
4
960
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
2.9k
The Cost Of JavaScript in 2023
addyosmani
55
9.1k
Become a Pro
speakerdeck
PRO
29
5.6k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
34
2.3k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
Java REST API Framework Comparison - PWX 2021
mraible
34
8.9k
How GitHub (no longer) Works
holman
315
140k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
A better future with KSS
kneath
239
18k
Stop Working from a Prison Cell
hatefulcrawdad
272
21k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
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
私立吹雪学園付属小学校
アンコールはないの? お替わりいかがですか?