No Results
Search Tips:
- Please consider misspellings
- Try different search keywords
with sharing または without sharing キーワードの使用
クラスで with sharing または without sharing キーワードを使用して、共有ルールを適用するかどうかを指定します。
with sharing キーワードでは、クラスで現在のユーザの共有ルールを考慮するように指定できます。Apex コードはシステムコンテキストで実行されるため、このキーワードはクラスで明示的に設定する必要があります。システムコンテキストでは、Apex コードはすべてのオブジェクトと項目にアクセスできます。オブジェクト権限、項目レベルセキュリティ、共有ルールは現在のユーザには適用されません。これは、ユーザには非表示の項目またはオブジェクトが原因でコードの実行が失敗することを避けるためです。このルールの唯一の例外は、executeAnonymous コールおよび Chatter in Apex と共に実行される Apex コードです。executeAnonymous は常に、現在のユーザのフル権限を用いて実行されます。executeAnonymous の詳細は、「匿名ブロック」を参照してください。
現在のユーザに適用されている共有ルールを強制実行するには、クラスの宣言時に with sharing キーワードを使用します。次に例を示します。
1public with sharing class sharingClass {
2
3// Code here
4
5}現在のユーザに適用されている共有ルールを強制実行されないようにするには、クラスの宣言時に without sharing キーワードを使用します。次に例を示します。
1public without sharing class noSharing {
2
3// Code here
4
5}with sharing または without sharing キーワードでは、次の点に留意してください。
- メソッドがコールされるクラスの共有設定ではなく、メソッドが定義されているクラスの共有設定が適用されます。たとえば、with sharing が宣言されたクラス内に定義されているメソッドが、without sharing が宣言されたクラスでコールされる場合、そのメソッドの実行では共有ルールが適用されます。
- with sharing も without sharing もクラスで宣言されていない場合、現在の共有ルールが有効となります。つまり、そのクラスが、共有が強制実行されているクラスからコールされると、コールされたクラスでも共有が強制実行されます。
- 内部クラスと外部クラスは、どちらも with sharing として宣言できます。共有設定は、初期化コード、コンストラクタ、メソッドなどクラスに含まれているすべてのコードに適用されます。
- 内部クラスはそのコンテナクラスから共有設定を継��しません。
- クラスが別のクラスを拡張または実装している場合、親クラスからこの設定が継承されます。