はじめに
レコードアクセス制御について、Salesforceフローの一種であるレコードトリガフローを使ったレコード共有を紹介します。
ロール階層や共有ルールでは対応できない場合の選択肢の一つとして、参考になればと思います。
作成するレコードトリガフローの要件(想定)
以下要件があったと想定してレコードトリガフローを作成します。
1. 取引先に納入した部品を管理するカスタムオブジェクト「納入部品」を追加する
2. 納入部品は非公開とし、特定の公開グループに対して参照させる
3. 対象となる公開先グループは、グループ名が納入部品に関連する取引先.公開先グループ名(カスタム項目)と一致するものとする
4. アクセス権の付与タイミングはレコードが新規作成されたタイミングとする
納入部品オブジェクトに「公開先グループ名」があれば共有ルールで対応できますが、別オブジェクトを参照する必要があるためレコードトリガフローを使います。
レコードトリガフローを作ってみよう①環境準備
今回は開発環境としてTrailheadのハンズオン組織を使用します。
TrailheadはSaleceforce社が提供している無償のe-learningサービスなので、まだ作成されていない場合はぜひハンズオン組織を作成してみてください。
Trailhead の使用開始 単元 | Salesforce Trailhead
レコードトリガフローを作ってみよう②フロー作成
設定画面のフローから新規フローを作成していきます。
最初にフローの種類(コア)を指定します。
レコードが作成されたタイミングで実行したいので、レコードトリガフローを選びます。
フローの記述方法は自由形式と自動レイアウトがありますが、今回は自動レイアウトを使用します。
(後から変更できます)
「オブジェクトを選択」をクリックします
「オブジェクト」を納入部品に指定し、「条件の要件」をなしに変更します。
共有先の公開グループを取得する処理を追加していきましょう
フローの開始と終了の間にある「+」から、「レコードを取得」をクリックします
表示ラベル、API参照名を入力した後に取得したいオブジェクトを選択します。
公開グループのオブジェクト名はグループ(Group)になります。
公開グループ名を条件項目とするので、「項目」はNameとします。
検索値となる公開先グループ名は以下の順で選択します。
- $Record(DeliverredParts__c)
- Account__r(取引先)
- PublishedGroupName__c(公開先グループ名)
- Account__r(取引先)
入力後、表示名が$Record > 取引先 > 公開先グループ名となることを確認して完了をクリックします
公開グループが取得できたので、次に納入部品へのレコード共有を行います。
先ほど追加したレコード取得の下にある「+」から、「レコードを作成」をクリックします。
レコード作成と同様に表示ラベル、API参照名を入力します。
レコード項目の設定方法で「個別のリソースおよびリテラル値を使用」に変更し、作成するオブジェクトを選択します。
「納入部品」と入力すると、納入部品の共有オブジェクトに該当する共有:納入部品が候補に出るので選択します。
Tips:共有オブジェクトについて
各オブジェクトの共有設定はそれぞれ対応する共有オブジェクトで管理されています。
共有オブジェクトの詳細についてはApex を使用したレコードの共有を参照してください。
次に設定値を登録します。
全部で4項目あるので「項目を追加」で入力欄を追加し、項目名・設定値を入力します。
項目名 | 説明 | 設定値 |
---|---|---|
ParentId | 共有を行う対象となる納入部品レコードのIdを設定します | $Record > カスタムオブジェクトID |
UserOrGroupId | 共有先のユーザIdまたは公開グループIdを設定します | GetPublicGroupId(※) グループ > グループID ※作成したレコード取得のAPI参照名
|
RowCause | アクセス権の付与理由を設定します | Manual |
AccessLevel | 付与するアクセスレベルを設定します。 参照のみ(Read)または参照・更新(Edit)を指定します
|
Read |
レコードトリガフローを作ってみよう③動作確認
これで取得した公開グループをもとに共有レコードを作成するフローが作成できました。
これから動作テストを行いますが、レコードトリガフローではデバッグ機能が使えないため、実際にレコードを登録して確認します。
フローを保存し、有効化することで動作可能になります。
納入部品レコードを作成し、レコードトリガフローが動作するか確認します。
納入部品レコード登録後、共有画面を表示します。
取引先「株式会社テラスカイ」に登録されている公開先グループ名「SH001」が共有先として登録されています。
レコードトリガフローを作ってみよう④エラー対応
次はエラー発生時の回避処理を実装していきます。
レコードトリガフローは処理中にエラーが発生した場合にレコードの登録も中断されてしまうため、エラー対策は必須になります。
先ほど作成したレコードトリガフローを修正していきましょう。
既にフローを有効化している場合、そのままでは修正できないため、一度「別名で保存」を行います。
別名保存することで、新しいバージョンとして修正ができます。
既に作成している「レコード取得」から「障害パスを追加」をクリックします。
赤い点線で障害発生時のフローが追加されました。
エラーが発生したことを通知するChatter投稿を追加します。
追加した障害パスにアクション要素を追加し、「Chatterに投稿」のアクションを選択します。
障害パスを追加したことで、フローでエラーが発生してもレコード登録は中断することなく登録されます。
同様に「納入部品のレコード」作成に対しても障害パスとChatter通知を追加し、保存と有効化を行います。
おわりに
レコード共有をレコードトリガフローで実装してみました。
今回はシンプルな要件でしたが、条件分岐やループ処理を追加することでより複雑な要件にも対応することができます。
- 納入部品レコード更新時にレコード共有を再設定する
- 条件分岐でより複雑な条件に基づいたレコード共有に対応する
- ループ処理による複数の共有レコードを作成する
Salesforceフローについては別記事【Salesforce フロー】とは?初心者なら知っておきたい5つのテクでもまとめていますので、そちらもご覧いただければと思います。
ロール階層、共有ルールでは対応できない場合に、レコードトリガフローを一度試してみてください。