Apexを使って、コミュニティのロールに対して共有レコードを割り当てる時の備忘録。
カスタマーコミュニティ(Customer Community Plusのみ)とパートナーコミュニティでは取引先に対してロールが割り当てられているので、以下のフローでロールに対する共有レコードを割り当てることが可能です。
- 共有対象(コミュニティユーザ)のAccountIDをキーにUserRoleを取得
- UserRoleのIDをキーにGroupを取得
- GroupのIDを使って共有レコードを作成
Id accId = '{input your account id}';
List<UserRole> roles = [
SELECT
id,
PortalAccountId,
Name
FROM
UserRole
WHERE
PortalAccountId = :accId
AND
PortalRole = 'Worker' // or 'Executive', 'Manager'
];
List<Group> groups = [
SELECT
Id,
RelatedId,
Type
FROM
Group
WHERE
RelatedId = :roles[0].Id
AND
Type = 'RoleAndSubordinates' // or 'Role'
];
insert new AccountShare(
RowCause = 'Manual',
AccountId = accId,
UserOrGroupId = groups[0].Id,
AccountAccessLevel = 'Edit',
ContactAccessLevel = 'Edit',
OpportunityAccessLevel = 'Edit',
CaseAccessLevel = 'Edit'
);
取引先1つ当たりのロールを1つ以上に指定した場合は、UserRoleが複数取得されてしまうので、PortalRoleに”Executive”、”Manager”、”Worker”を指定して絞り込めば、それぞれ”エグゼクティブ”、”マネージャ”、”ユーザ”なロールを取得することが出来ます。
RoleAndSubordinatesはロール&下位ロールを指します。