Apex による共有管理の再適用
組織のデフォルトアクセスレベルが変更されると、オブジェクトの全レコードの共有が自動的に再適用されますSalesforce。再適用により、適切な場合は Force.com 共有管理が追加されます。また、付与されたアクセス権が冗長である場合は、すべてのタイプの共有が削除されます。たとえば、オブジェクトの共有モデルが「非公開」から「公開/参照のみ」に変更されると、ユーザに「参照のみ」アクセス権を付与する共有の直接設定が削除されます。
Apex 共有管理を再適用するには、Salesforce が提供する再適用を行うインターフェースを実装する、Apex クラスを記述する必要があります。その後、[Apex 共有の再適用] 関連リストのカスタムオブジェクトの詳細ページで、クラスとカスタムオブジェクトを関連付ける必要があります。
Apex 共有の理由を指定するカスタムオブジェクトの詳細ページからこのクラスを実行します。ロックの問題により、アプリケーションのロジックに定義されたユーザへのアクセス権限の付与が Apex コードで実行されない場合、管理者はオブジェクトの Apex 共有管理を再適用する必要があることがあります。Database.executeBatch メソッドを使用して、Apex 共有管理の再適用をプログラムで呼び出すこともできます。
Apex の再適用の実行を監視または停止するには、[設定] から または をクリックします。
共有の再適用のための Apex クラスの作成
Apex 共有管理を再適用するには、再適用を行う Apex クラスを記述する必要があります。このクラスは、Salesforce が提供する Database.Batchable インターフェースを実装している必要があります。
Database.Batchable インターフェースは、Apex 共有管理の再適用など、すべての Apex の一括処理プロセスに使用されます。このインターフェースは、組織で複数回実装できます。実装する必要があるメソッドの詳細は、「Apex の一括処理の使用」を参照してください。
Apex 共有管理の再適用を作成する前に、ベストプラクティスについても検討してください。
Apex による共有管理の再適用の例
この例では、人事採用アプリケーションの構築中で、Job というオブジェクトが存在すると仮定しています。ジョブにリストされた採用担当者および採用担当マネージャにレコードへのアクセス権が付与されていることを確認したいと考えています。次の Apex クラスでこの検証を実行できます。この例では、User レコードと関連付けられた、Hiring_Manager および Recruiter という 2 つの参照項目を持つ Job というカスタムオブジェクトが必要です。また、Job カスタムオブジェクトには、Hiring_Manager と Recruiter という 2 つの共有の理由を追加する必要があります。このサンプルを実行する前に、メールアドレスを、エラー通知とジョブ完了通知を送信する有効なメールアドレスに置き換えます。
Apex による共有管理の再適用のテスト
この例では、5 つの Job レコードを挿入し、前の例で使用した一括処理クラスに実装される一括処理ジョブを呼び出します。この例では、User レコードと関連付けられた、Hiring_Manager および Recruiter という 2 つの参照項目を持つ Job というカスタムオブジェクトが必要です。また、Job カスタムオブジェクトには、Hiring_Manager と Recruiter という 2 つの共有の理由を追加する必要があります。このテストを実行する前に、組織全体の Job のデフ��ルト共有設定を [非公開] に設定します。テストからはメールメッセージは送信されないため、また、一括処理クラスはテストメソッドによって呼び出されるため、この場合、メール通知は送信されません。
再適用に使用される Apex クラスの関連付け
再適用に使用される Apex クラスはカスタムオブジェクトと関連付けられている必要があります。
- [設定] で、 をクリックします。
- カスタムオブジェクトを選択します。
- [Apex 共有の再適用] 関連リストで [新規] をクリックします。
- このオブジェクトの Apex 共有を再適用する Apex クラスを選択します。選択するクラスは、Database.Batchable インターフェースを実装している必要があります。同じ Apex クラスを、同じカスタムオブジェクトと複数関連付けることはできません。
- [保存] をクリックします。