見積のレコードロック(承認プロセス)の影響
- 見積がレコードロックかかると、見積品目の作成編集削除ができなくなる。
- 見積がレコードロックされていると商談との同期ができない。
- 同期している見積レコードがロックされていると商談商品の作成編集削除ができなくなる。
Apexで見積と商談を同期させる
- 基本的には、Apexで見積と商談を同期させたいときは、商談のSyncedQuoteIdに見積IDを設定するだけで良い。
- 見積がレコードロックされている場合は、レコードロックを解除してから同期を行う必要がある。
- レコードロックの解除は、ログインユーザがロックされているオブジェクトのすべて編集権限をもっているか、Apexの
without sharing
が必要。 - Apexでレコードロックを解除する場合、Approvalクラスを使用する。レコードロック、ロック解除はDMLとして処理されるため、ガバナ制限に注意。
- レコードロックの解除は、ログインユーザがロックされているオブジェクトのすべて編集権限をもっているか、Apexの
Quote approvedQuote = [SELECT OpportunityId FROM Quote WHERE Id = :objId];
Approval.unlock(approvedQuote);
update new Opportunity(Id = approvedQuote.OpportunityId, SyncedQuoteId = approvedQuote.Id);
Approval.lock(approvedQuote);
商談見積同期内容
- 品目レコード項目変更
- 商談→見積: 反映される
- 見積→商談: 反映される
- 品目レコード削除
- 商談→見積: 反映される
- 見積→商談: 反映される
- 品目レコード作成
- 商談→見積: 反映される
- 見積→商談: 反映される(スケジュール(OpportunityLineItemSchedule)は作られない)