匿名ブロック
| 必要なユーザ権限 | |
|---|---|
|
Apex を匿名実行する (API を使用した匿名 Apex の実行では、「Apex 開発」権限なしで制限付きアクセスが可能) |
「Apex 開発」 |
- 開発者コンソール
- Force.com IDE
-
executeAnonymous() SOAP API コール:
1ExecuteAnonymousResult executeAnonymous(String code)
匿名ブロックは、開発者コンソールや Force.com IDE での Apex のすばやい評価や、実行時に動的に変化するコードの記述に使用できます。たとえば、名前や住所などのユーザ入力を取得して、Apex の匿名ブロックを使用し、その名前と住所の取引先責任者をデータベースに書き込むクライアント側の Web アプリケーションを記述できます。
- ユーザ定義メソッドおよび例外を含めることができます。
- ユーザ定義メソッドに 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() についての詳細は、「Apex の SOAP API および SOAP ヘッダー」を参照してください。「開発者コンソールのログの操作」および「Force.com IDE」も参照してください。
「Apex 開発」権限で API を使用した匿名 Apex の実行
組織に保存されている Apex メソッドを含め、executeAnonymous() API コールを使用して Apex コードを実行するには、ユーザに「Apex 開発」権限が必要です。「Apex 開発」権限のないユーザの場合、API を使用すると匿名 Apex の制限付き実行が可能になります。この例外は、ユーザが API または API を使用するツールを使用して匿名 Apex を実行する場合にのみ適用され、開発者コンソールで実行する場合には適用されません。このようなユーザには、匿名ブロックで次の実行が許可されます。
- 匿名ブロック内の自分が作成したコード
- 組織に保存された Web サービスメソッド (webservice キーワードで宣言されたメソッド)
- Apex 言語の一部である組み込みの Apex メソッド
ユーザに「Apex 開発」権限がない場合、他の Apex コードの実行は許可されません。たとえば、組織に保存されているカスタム Apex クラスのメソッドをコールすることや、組み込みのメソッドへの引数としてカスタムクラスを使用することは、許可されません。
「Apex 開発」権限のないユーザが匿名ブロックで DML ステートメントを実行すると、その結果としてトリガが起動される場合があります。