こんにちは、にいるです。
Apexの共有の理由について書いてみます。
・【ヘルプ】Apex を使用したレコードの共有
・【ヘルプ】CriteriaBasedSharingRule
1.Apexの共有の理由とは
「Apexの共有の理由」とは、Apexを使用してレコードの共有をするときに使う機能です。
例えば、ApexでDMLによってレコードを作成しますよね。
その作成時に、Apexを使用してレコードを共有したい時に使う機能です。
図にするとこんな感じです。
AさんがApex実行で作成したレコードを自動でBさんに共有する仕組みです。
自動で付与できるので、実装することができればとても便利だと思います。
2.標準オブジェクトのApexの共有
設定についてみていきます。
まずは、標準オブジェクトの場合(取引先)です。
コードはこれです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// 共有レコードのインスタンス作成します。 AccountShare accShare = new AccountShare(); // 共有するレコードを指定します。 accShare.AccountId = '0010o00002DUjPF'; // 共有したいユーザやグループを指定します。 accShare.UserOrGroupId = '0050o00000VuRqW'; // 取引先に対するアクセス権限を定義します。 accShare.AccountAccessLevel = 'Edit'; // 取引先に関連する取引先責任者に対するアクセス権限 accShare.ContactAccessLevel = 'Read'; // 取引先に関連する商談に対するアクセス権限 accShare.OpportunityAccessLevel = 'Read'; // 取引先に関連するケースに対するアクセス権限 accShare.CaseAccessLevel = 'Edit'; // 登録 insert accShare; |
取引先の場合、子レコードの取引先責任者と商談とケースへのアクセス権限も付与する必要があります。
取引先責任者の場合、親レコードに連動の場合、アクセス権限の定義は省略されます。
3.カスタムオブジェクトのApexの共有
カスタムオブジェクトだと、まずはオブジェクト設定画面からApexの共有理由を作成する必要があります。
カスタムオブジェクトの共有オブジェクトは__shareというサフィックスになります。
M_Product__cというカスタムオブジェクトであれば、M_Product__shareというAPIの共有オブジェクトになります。
コードです。
ここで作成したApexの共有理由をApexでInsertします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
M_Product__Share mpShare = new M_Product__Share(); // 作成したレコードのID(共有したいレコードのID) mpShare.ParentId = 'a1g0o00000Efghx'; // 共有するユーザ mpShare.UserOrGroupId = '0050o00000VuRqW'; // アクセス権限(他にEditが指定可能) mpShare.AccessLevel = 'Read'; // 共有の理由をセット mpShare.RowCause = Schema.M_Product__Share.RowCause.NewSharingReason__c; // 共有レコードを登録 insert mpShare; |
4.まとめ
いかがでしたでしょうか。
最初、Apexの共有の理由ってなんだ?と、全く理解できませんでした。
もっとわかりやすいネーミングであればよかったのですが、でも字面そのままの意味なのでもうこれで覚えました笑
実際に共有ルールを使って、重要なレコードを作成するプログラムがある場合は使わないといけない機能ですね。
皆さんもぜひ色々と試してみてください。
他にも色々と標準機能やSalesforce機能について紹介していますので、ご覧ください。
ではでは!