この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Newer Version Available

This content describes an older version of this product. View Latest

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 キーワードを使用します。たとえば、クラスが with 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 として宣言できます。共有設定は、初期化コード、コンストラクタ、メソッドなどクラスに含まれているすべてのコードに適用されます。
  • 内部クラスはそのコンテナクラスから共有設定を継承しません
  • クラスが別のクラスを拡張または実装している場合、親クラスからこの設定が継承されます。