プログラマ38の日記

主にプログラムメモです。

【Salesforce】Apexで共有オブジェクト(・・Share)にロールを指定する

Salesforceで特定のユーザにデータを参照・編集させる設定は、共有設定を使うか、Apexで共有オブジェクトを操作するかになります。

 

共有オブジェクトに特定のユーザのロールを指定したい時があります。

例えば、代表者(User)を入力すると、その代表者は「参照・編集」、その代表者のロールに所属するユーザは「参照」ができるという仕組みにしたいとします。

その際はApexで共有オブジェクトを操作するのが簡単です。次のようになります。

 

  1. Apexにて、"編集"の「カスタムオブジェクトのアクセス権」で、代表者のユーザIDを共有オブジェクトに登録。
  2. Apexにて、"参照"の「カスタムオブジェクトのアクセス権」で、代表者のユーザのロールに対応するグループIDを共有オブジェクトに登録。

上記2のユーザのロールに対応するグループIDの関係は次のようになります。

f:id:crmprogrammer38:20170721130637p:plain

1つのロールに対してグループは複数あります。データイメージは次の通りです。

f:id:crmprogrammer38:20170721131335p:plain

 種別の内部の値は次の通りで、この中から指定したい種別を選びます。

種別 内部で指定する値
ロール Role
ロール & 内部下位ロール RoleAndSubordinates
ロール、内部 & ポータル下位ロール RoleAndSubordinatesInternal

 

上記を踏まえて、2の代表者のユーザのロールに対応するグループIDを共有オブジェクトへ登録する際には次のようなデータになります。

ラベル 名前 セットする値
参照先 ID ParentId 参照するレコードID
ユーザ / グループ ID UserOrGroupId ユーザのロールに対応するグループID
カスタムオブジェクトのアクセス権 AccessLevel Read
テリトリー割り当て方法 RowCause Manual もしくは 「Apex 共有の理由」の理由名

共有ボタンから手動でも参照させたい人を指定する場合、 「Apex 共有の理由」を作成してその理由名を、テリトリー割り当て方法にセットした方がいいと思います。

というのは、ApexからもManualで登録してしまうと、判断がつかなくなりますので。