Salesforceで特定のユーザにデータを参照・編集させる設定は、共有設定を使うか、Apexで共有オブジェクトを操作するかになります。
共有オブジェクトに特定のユーザのロールを指定したい時があります。
例えば、代表者(User)を入力すると、その代表者は「参照・編集」、その代表者のロールに所属するユーザは「参照」ができるという仕組みにしたいとします。
その際はApexで共有オブジェクトを操作するのが簡単です。次のようになります。
- Apexにて、"編集"の「カスタムオブジェクトのアクセス権」で、代表者のユーザIDを共有オブジェクトに登録。
- Apexにて、"参照"の「カスタムオブジェクトのアクセス権」で、代表者のユーザのロールに対応するグループIDを共有オブジェクトに登録。
上記2のユーザのロールに対応するグループIDの関係は次のようになります。
1つのロールに対してグループは複数あります。データイメージは次の通りです。
種別の内部の値は次の通りで、この中から指定したい種別を選びます。
種別 | 内部で指定する値 |
ロール | Role |
ロール & 内部下位ロール | RoleAndSubordinates |
ロール、内部 & ポータル下位ロール | RoleAndSubordinatesInternal |
上記を踏まえて、2の代表者のユーザのロールに対応するグループIDを共有オブジェクトへ登録する際には次のようなデータになります。
ラベル | 名前 | セットする値 |
参照先 ID | ParentId | 参照するレコードID |
ユーザ / グループ ID | UserOrGroupId | ユーザのロールに対応するグループID |
カスタムオブジェクトのアクセス権 | AccessLevel | Read |
テリトリー割り当て方法 | RowCause | Manual もしくは 「Apex 共有の理由」の理由名 |
共有ボタンから手動でも参照させたい人を指定する場合、 「Apex 共有の理由」を作成してその理由名を、テリトリー割り当て方法にセットした方がいいと思います。
というのは、ApexからもManualで登録してしまうと、判断がつかなくなりますので。