Salesforce 認定 Platform Data アーキテクト 無料問題 1 / 10 ・ 分野1: データモデリング/データベースデザイン
商談が成立したときに、商談のフローから成立の記録をカスタムの Big Object「成立履歴」へ書き込みたい。Big Objects Implementation Guide(Spring '23) の考慮事項に合う組み方はどれか。
- フローのレコード作成の要素を使い、成立履歴へ1件ずつ同期で書き込む
- 書き込む前に商談のレコードをロックし、同期の Apex で挿入をまとめる
- フローから非同期の Apex(Queueable など)を呼んで書く
- 商談の更新と同じトランザクションで、成立履歴への挿入も一緒に確定する
正解と解説を見る
正解: C
正解の理由
ガイドの Big Objects Best Practices は、Big Object はトランザクションに対応しないと書き、sObject のトリガー・プロセス・フローから Big Object を読み書きするなら非同期の Apex を使うとする。非同期の Apex には Queueable のインターフェースのように、別の種類の sObject への DML を切り離して混在 DML のエラーを防ぐ仕組みがある。
違う選択肢
「フローのレコード作成の要素を使い、成立履歴へ1件ずつ同期で書き込む」… ガイドは、Big Object はトランザクションに対応しないので、sObject のトリガー・プロセス・フローから Big Object を読み書きするなら非同期の Apex を使うと書く。同期で書く組み方はガイドの勧めと逆である。
「商談の更新と同じトランザクションで、成立履歴への挿入も一緒に確定する」… Big Object はトランザクションに対応しない。商談の更新と一緒に確定させる形は取れず、ガイドは混在 DML のエラーを避けるためにも Queueable のような非同期の Apex で切り離すとする。
「書き込む前に商談のレコードをロックし、同期の Apex で挿入をまとめる」… ガイドが示すのはロックではなく非同期の Apex である。Big Object はトランザクションを持たないので、商談をロックしても Big Object への書き込みを同じ単位で守ることにはならない。
つまずき方
Big Object は、項目履歴や利用ログのような大量の記録を置くための仕組みで、ふつうのオブジェクトと同じ感覚で「同じトランザクションの中で一緒に書く」と組むと動かない。業務のオブジェクトの更新を起点にするときは、書き込みを非同期の処理に渡す形を最初から設計に入れておく。