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

匿名ブロック

匿名ブロックとは、メタデータには格納されないが、コンパイルおよび実行できる Apex コードです。
必要なユーザー権限
Apex を匿名実行する

(API を使用した匿名 Apex の実行では、「Apex 開発」権限なしで制限付きアクセスが可能)。

「API の有効化」および「Apex 開発」
匿名 Apex コールアウトでエンドポイントとして指定ログイン情報を参照する場合: 「アプリケーションのカスタマイズ」
次のいずれかを使用して、匿名ブロックのコンパイルと実行を行います。
  • 開発者コンソール
  • Visual Studio Code 向け Salesforce 拡張機能
  • executeAnonymous() SOAP API コール:
    1ExecuteAnonymousResult executeAnonymous(String code)

匿名ブロックは、開発者コンソールや Visual Studio Code 向け Salesforce 拡張機能での Apex のすばやい評価に使用できます。

匿名ブロックの内容については、次の点に注意してください (executeAnonymous()code 文字列)。
  • ユーザー定義メソッドおよび例外を含めることができます。
  • ユーザー定義メソッドに static キーワードを含めることはできません。
  • データベースの変更を手動でコミットする必要はありません。
  • Apex トリガーが正常に完了すると、自動的にデータベースの変更がコミットされます。Apex トリガーが正常に完了しない場合、データベースへの変更はロールバックされます。
  • クラスやトリガーとは異なり、匿名ブロックは現在のユーザーとして実行するため、コードがユーザーオブジェクトの権限や項目レベルの権限に違反するとコンパイルが失敗する場合があります。
  • ローカル以外の範囲を含めないでください。たとえば、global アクセス修飾子を使用できますが機能しません。メソッドの範囲は、匿名ブロックに制限されています。
  • 匿名ブロックにクラスまたはインターフェース (カスタムデータ型) を定義すると、匿名ブロックの実行時にそのクラスまたはインターフェースはデフォルトで仮想とみなされます。これは、カスタムデータ型が virtual 修飾子で定義されなかった場合でも同様です。これを避けるには、Salesforce にクラスまたはインターフェースを保存します。匿名ブロックに定義されたクラスやインターフェースは、組織には保存されません。

ユーザー定義メソッドは、事前に宣言せずにそのメソッド自体や後のメソッドで参照できますが、変数は宣言されるまで参照できません。次の例では、整数 int は宣言する必要がありますが、myProcedure1 は宣言する必要はありません。

1Integer int1 = 0;
2
3void myProcedure1() {
4    myProcedure2();
5}
6
7void myProcedure2() {
8    int1++;
9}
10
11myProcedure1();
匿名ブロックで返される結果には次の情報が含まれます。
  • 発生したすべてのエラーを含む、コールのコンパイルフェーズと実行フェーズの状況情報
  • System.debug メソッドへのすべてのコールの出力を含むデバッグログの内容 (「デバッグログ」を参照)
  • 各コールのスタック要素に対するクラス、メソッド、行番号を含む、検出されなかったすべてのコード実行例外の Apex のスタック追跡

executeAnonymous() についての詳細は、「SOAP API を使用した Apex のリリース」を参照してください。「開発者コンソールのログの操作」および「Visual Studio Code 向け Salesforce 拡張機能」も参照してください。

「Apex 開発」権限で API を使用した匿名 Apex の実行

組織に保存されている Apex メソッドを含め、executeAnonymous() API コールを使用して Apex コードを実行するには、ユーザーに「Apex 開発」権限が必要です。「Apex 開発」権限のないユーザーの場合、API を使用すると匿名 Apex の制限付き実行が可能になります。この例外は、ユーザーが API または API を使用するツールを使用して匿名 Apex を実行する場合にのみ適用され、開発者コンソールで実行する場合には適用されません。このようなユーザーには、匿名ブロックで次の実行が許可されます。

  • 匿名ブロック内の自分が作成したコード
  • 組織に保存された Web サービスメソッド (webservice キーワードで宣言されたメソッド)
  • Apex 言語の一部である組み込みの Apex メソッド

ユーザーに「Apex 開発」権限がない場合、他の Apex コードの実行は許可されません。たとえば、組織に保存されているカスタム Apex クラスのメソッドをコールすることや、組み込みのメソッドへの引数としてカスタムクラスを使用することは、許可されません。

「Apex 開発」権限のないユーザーが匿名ブロックで DML ステートメントを実行すると、その結果としてトリガーが起動される場合があります。