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

Newer Version Available

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

NamespaceAccessible アノテーション

@NamespaceAccessible アノテーションは、パッケージ内の公開または保護された Apex を、同じ名前空間を使用する他のパッケージで使用可能であるとマークします。明示的なアノテーションがない限り、第二世代 (2GP) パッケージで定義されている Apex クラス、メソッド、インターフェース、およびプロパティは、名前空間を共有する他のパッケージからアクセスできません。パッケージ化されていない Apex には影響はありません。

グローバルとして宣言されている Apex は、このアノテーションを必要とせず、常にすべての名前空間で使用できます。

メモ

2GP パッケージについての詳細は、『Salesforce DX 開発者ガイド』の「ロック解除済みパッケージ (正式リリース) と第二世代管理パッケージ (ベータ)」を参照してください。

パッケージレベルの Apex の参照に対する制限は、Apex が別の Apex クラスまたはトリガから呼び出された場合に適用されます。ただし、Apex が Visualforce コントローラとして呼び出された場合、パッケージ間で使用されるアノテーションは適用されません。今後のリリースで適用される予定です。

Lightning コンポーネントから参照される @AuraEnabled Apex メソッドで @NamespaceAccessible アノテーションは使用できません。

メモ

@NamespaceAccessible アノテーションはいつでも追加または削除できます。管理およびリリース済み Apex コードに対しても可能です。アノテーションを追加または削除する前に、その機能に依存する連動パッケージがないことを確認してください。

パッケージの @NamespaceAccessible Apex を追加または削除するときには、このパッケージのアノテーションを参照する他のパッケージのインストール済みバージョンを使用しているユーザへの影響を考慮します。パッケージアップグレードを転送する前に、アップグレードが転送されると完全なコンパイルに失敗するパッケージバージョンを実行しているユーザがいないことを確認します。

メモ

次の例は、@NamespaceAccessible アノテーションでマークされている Apex クラスを示します。このクラスは、同じ名前空間内の他のパッケージからアクセスできます。最初のコンストラクタも同じ名前空間内で参照できますが、2 つ目のコンストラクタは参照できません。
1// A namespace-visible Apex class
2@NamespaceAccessible
3public class MyClass {
4    private Boolean bypassFLS;
5
6    // A namespace-visible constructor that only allows secure use
7    @NamespaceAccessible
8    public MyClass() {
9        bypassFLS = false;
10    }
11
12    // A package private constructor that allows use in trusted contexts,
13    // but only internal to the package
14    public MyClass (Boolean bypassFLS) {
15        this.bypassFLS = bypassFLS;
16    }
17    @NamespaceAccessible
18    protected Boolean getBypassFLS() {
19       return bypassFLS;
20    }
21}

バージョン管理動作の変更

API バージョン 47.0 以降の場合、@AuraEnabled でマークされているエンティティでは、@NamespaceAccessible を使用できません。したがって、あるパッケージからインストールされた Aura または Lightning Web コンポーネントは、別のパッケージからの Apex メソッドをコールできません。これは、両方のパッケージが同じ名前空間に存在している場合であっても当てはまります。