
Salesforceの承認プロセスは、レコードの整合性を保つために非常に便利な機能です。しかし、申請中のレコードはレコードロックという状態になり、原則として編集できなくなります。この仕様が、特定の状況下で運用の柔軟性を損なうことも少なくありません。
例えば、「承認プロセス中であっても、特定の権限を持つユーザーだけは一部の項目を修正したい」といった要件が挙がることがあります。
今回は、Salesforceのフローと動的フォームを活用して、この課題を解決する方法を具体的に解説します。
レコードロックの基本
まず、Salesforceの承認プロセスにおけるレコードロックの基本をおさらいしましょう。
レコードが承認プロセスに申請されると、そのレコードはロックされ、申請者や承認者であっても基本的には編集ができなくなります。これは、承認プロセス中に意図しない変更が加えられ、データの整合性が失われるのを防ぐための重要な仕組みです。
このロックされたレコードを編集できるのは、デフォルトでは「すべての編集」権限を持つシステム管理者などに限定されます。しかし、業務要件によっては、システム管理者以外の特定のプロファイルを持つユーザーにも編集を許可したい場合があります。
フローによるレコードロックの解除と疑似編集画面
この課題を解決する鍵となるのが、Salesforceフローです。フローのアクションを利用することで、一時的にレコードロックを解除し、編集を可能にすることができます。
具体的な実装方法は以下の通りです。
- 画面フローを作成: ユーザーが編集したい項目を入力するための画面を持つフローを作成します。
- レコードロック解除のアクション: フローの初めに、標準で用意されている「レコードをロックまたはロック解除」アクションを追加し、対象のレコードのロックを解除します。
- パラメーターは「Unlock」になります。
- パラメーターは「Unlock」になります。
- レコードの更新: ユーザーが入力した情報で、対象のレコードを更新する処理を追加します。
- 再度レコードロック: 最後に、再度「レコードをロックまたはロック解除」アクションを追加し、レコードをロック状態に戻します。
- パラメーターは「Lock」になります。
- パラメーターは「Lock」になります。
- フローの実行方法の指定: 保存時に「共有なしのシステムコンテキスト」で実行するように指定します。

これにより、フローが実行されている間だけ一時的にロックが解除され、処理が完了すると再びロックされるため、安全にレコードの更新が可能になります。このフローを起動することで、ユーザーにとっては疑似的な編集画面として機能します。
動的フォームによるボタンの表示制御
次に、作成したフローを起動するためのボタンを配置し、適切なユーザーにのみ表示されるように設定します。これには動的フォーム(Dynamic Forms)が非常に有効です。
Lightningアプリケーションビルダーで対象のレコードページを編集し、以下の手順で設定します。
- アクションとおすすめコンポーネントを追加: ページに「アクションとおすすめ」コンポーネントを配置します。
- アクションボタンの作成: 事前に、作成したフローを呼び出すアクションを作成しておきます。
- 表示条件を設定: 配置したアクションボタンに対して、表示条件を設定します。ここで、以下のような条件を組み合わせることが可能です。
- ユーザーのプロファイル: 特定のプロファイルを持つユーザーにのみ表示する。(例:
ユーザー > プロファイル > 名前 = "営業部長"
) - レコードのフェーズ(状況): 承認プロセス中であることを示す特定のフェーズや状況のときにのみ表示する。(例:
レコード > 状況 = "承認申請中"
)
- ユーザーのプロファイル: 特定のプロファイルを持つユーザーにのみ表示する。(例:
この設定により、「承認申請中」のレコードを、特定のプロファイル(例: 営業部長)のユーザーが表示した場合にのみ、編集用のフローを起動するボタンが出現します。他のユーザーや、承認プロセス中でないレコードにはボタンが表示されないため、誤操作を防ぐことができます。
まとめ
Salesforceの標準機能であるレコードロックは、データの整合性を保つ上で不可欠です。しかし、フローと動的フォームを組み合わせることで、この強力な制御を維持しつつ、業務要件に応じた柔軟な運用を実現できます。
今回ご紹介した手法により、「承認プロセスでロックされたレコードを、特定のプロファイルを持つユーザーのみが編集できる」という、一見複雑な要件もスマートに実装することが可能です。ぜひ、自社のSalesforce環境でも活用を検討してみてください。