LoginSignup
0
0

Apex Class パブリック、プライベート、グローバルの使い分け

Last updated at Posted at 2023-12-31

パブリック
これは、このアプリケーションまたは名前空間内のすべての Apex でメソッドまたは変数を使用できることを意味します。

プライベート
このキーワードは、内部のユーザーから見えるメソッド/変数を定義します。
定義する Apex クラスのクラス。

グローバル
これは、同じアプリケーション内の Apex コードだけでなく、クラスにアクセスできるすべての Apex コードでメソッドまたは変数を使用できることを意味します。このアクセス修飾子は、SOAP API または他の Apex コードのいずれかで、アプリケーションの外部で参照する必要があるメソッドに使用する必要があります。メソッドまたは変数をグローバルとして宣言する場合は、それを含むクラスもグローバルとして宣言する必要があります。

グローバルの使用例は Batch Apex です。Apex ジョブの実行へのアクセスを管理できます。同様に、ジョブを実行する管理者は、任意のアプリケーションのコンテキスト内でジョブを実行できます。

第 2 世代管理パッケージの説明の中に、関連しそうな記述があります。

グローバル宣言されていると制約がないみたいですね。

The @NamespaceAccessible makes public Apex in a package available to other packages that use the same namespace. Without this annotation, Apex classes, methods, interfaces, and properties defined in a second-generation managed package aren’t accessible to the other packages with which they share a namespace. Apex that is declared global is always available across all namespaces, and needs no annotation.

https://developer.salesforce.com/docs/atlas.en-us.pkg2_dev.meta/pkg2_dev/sfdx_dev_dev2gp_namespace_visibility.htm

Experience Cloudから呼び出するApexはPublicで動きます。

というのが前提となります。以下のURLのソースでExCloudからPublicで呼び出すことが可能であることを確認することができました。

https://developer.salesforce.com/docs/atlas.ja-jp.communities_dev.meta/communities_dev/communities_dev_sample_code_without_sharing__let_guest_users_create_and_read_records_in_the_same_transaction.htm?q=aura

悩んでSFさんに聞いてみたら上記のURLのサンプルソースみて動くの確認できたので、Publicでもいけるんです!そこでまったく新規で同じ処理書いて、Publicにしたら動きました。なんじゃこれ?って感じですが、、、新規作成したら解決しましたです!

同じ事象が発生したら、ぜひ新規で作ってみてください。

★新規作成したら解決しました★!
つまり原因不明なんですね~。

同じ事象が発生したら、ぜひ新規で作ってみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0