レコードアクセス制御に伴う承認プロセスエラー対応の備忘録

  • URLをコピーしました!

Salesforceの承認プロセスを使用している環境でレコードアクセス制御を設定したところ、
エラーや問題が発生したため、事象や対応などを備忘録として残します。
標準ボタンや標準コンポーネントではなく、Apexやフローを使用している場合のケースになります。

目次

①承認申請時エラー「該当する承認プロセスは見つかりませんでした」

承認プロセスの「申請者」に設定されていないユーザが承認申請すると発生します。
標準ボタンの承認申請ではメッセージとして表示され、承認申請することはできませんが、
Apexやフローで発生させてしまうとエラーになってしまいます。

オブジェクト権限に「すべて変更」を持つユーザでは、申請者に設定されていない場合でも
承認申請が可能です。
レコードアクセス制御で「すべて変更」を持たないユーザを作成したことで
エラーが発生してしまいました。

申請者が適切に設定されているか、開発以降も定期的に確認が必要です。

②エラー「レコードがロックされました」

承認申請されると編集できないようレコードがロックされます。
申請が却下されるか、すべての承認が完了して承認済みになることでロックが解除されます。
もしロックされているタイミングでApexやフローでレコードを編集しようとするとエラーになります。

このケースでもオブジェクト権限に「すべて変更」を持つユーザでは編集できてしまいます。
※すべてのデータの編集 権限も同様です
Salesforce公式HELP:承認の管理に関する考慮事項

もし、処理タイミングの調整で解決できない場合はApexでロックを解除することができます。
※レコードのロックを解除して問題ないかは必ず関係者に確認してください

レコードのロック解除 ~Apex~

Apexによるロック解除を行うにはまず設定が必要です。※未設定では実行時にエラーが発生します
  Salesforceの設定 → プロセスの自動化設定
  「Apex でのレコードのロックおよびロック解除を有効化」にチェックします

// レコードのロック状態を判定
boolean isLocked = Approval.isLocked({レコードIDを指定});
System.debug(isLocked);
// レコードのロック解除
Approval.UnlockResult result = Approval.unlock({レコードIDを指定}, false);

Salesforce公式HELP:Apex 承認プロセスロックの追加または削除の有効化
Apex 開発者ガイド:Approval クラス

まとめ

オブジェクト権限「すべて変更」はレコードの制限がないだけではなく、
大きな権限であることが分かりました。
他の機能にも類似した権限を持つ可能性もありますので、設定する際は十分な調査と検証が必要です。
今後の承認プロセスの開発にこの経験を活かしていきたいと思います。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次