Apex-概要

Apexとは何ですか?

Apexは、Salesforce.comによって開発された独自の言語です。公式の定義によると、Apexは強く型付けされたオブジェクト指向プログラミング言語であり、開発者はForce.comAPIの呼び出しと組み合わせてForce.comプラットフォームサーバーでフローおよびトランザクション制御ステートメントを実行できます。

Javaに似た構文を持ち、データベースのストアドプロシージャのように機能します。これにより、開発者は、ボタンのクリック、関連するレコードの更新、Visualforceなど、ほとんどのシステムイベントにビジネスロジックを追加できます。pages.Apexコードは、Webサービス要求およびオブジェクトのトリガーから開始できます。Apexは、Performance Edition、Unlimited Edition、Enterprise Edition、およびDeveloperEditionに含まれています。

言語としてのApexの機能

言語としてのApexの機能について説明しましょう-

統合

Apexには、INSERT、UPDATE、DELETEなどのDML操作とDML例外処理のサポートが組み込まれています。sObjectレコードのセットを返すインラインSOQLおよびSOSLクエリ処理をサポートしています。sObject、SOQL、SOSLについては、今後の章で詳しく説明します。

Javaのような構文と使いやすい

Apexは、Javaのような構文を使用するため、使いやすいです。たとえば、変数宣言、ループ構文、条件文などです。

データと強力に統合

Apexはデータに焦点を合わせており、複数のクエリとDMLステートメントを一緒に実行するように設計されています。データベース上で複数のトランザクションステートメントを発行します。

強いタイプ

Apexは強く型付けされた言語です。sObjectなどのスキーマオブジェクトへの直接参照を使用し、削除された場合やデータ型が間違っている場合、無効な参照はすぐに失敗します。

マルチテナント環境

Apexはマルチテナント環境で実行されます。したがって、Apexランタイムエンジンは、コードの暴走を防ぐように設計されており、共有リソースを独占することを防ぎます。制限に違反するコードは失敗し、わかりやすいエラーメッセージが表示されます。

自動的にアップグレード

Apexは、Salesforceリリースの一部としてアップグレードされます。手動でアップグレードする必要はありません。

簡単なテスト

Apexは、カバーされているコードの量やコードのどの部分をより効率的にできるかを示すテスト結果など、単体テストの作成と実行に対する組み込みのサポートを提供します。

開発者はいつApexを選ぶべきですか?

Apexは、事前に構築された既存の機能を使用して複雑なビジネス機能を実装できない場合に使用する必要があります。以下は、Salesforce構成ではなくapexを使用する必要がある場合です。

Apexアプリケーション

必要なときにApexを使用できます-

  • 他のシステムを統合してWebサービスを作成します。

  • メールブラストまたはメール設定用のメールサービスを作成します。

  • 複数のオブジェクトに対して同時に複雑な検証を実行し、カスタム検証の実装も実行します。

  • 既存のワークフロー機能またはフローではサポートされていない複雑なビジネスプロセスを作成します。

  • レコードを更新するためにデータベースメソッドを使用するように、カスタムトランザクションロジック(単一のレコードまたはオブジェクトだけでなく、トランザクション全体で発生するロジック)を作成します。

  • レコードが変更されたときにロジックを実行するか、トリガーを起動する原因となったイベントがあるときに関連オブジェクトのレコードを変更します。

Apexの動作構造

次の図(参照:Salesforce開発者ドキュメント)に示すように、Apexは完全にオンデマンドで実行されますForce.comプラットフォーム

アクションの流れ

開発者がコードを保存するときと、エンドユーザーが以下に示すようにApexコードを呼び出すアクションを実行するときの2つのアクションシーケンスがあります。

開発者アクション

開発者がApexコードを記述してプラットフォームに保存すると、プラットフォームアプリケーションサーバーは最初にコードをApexランタイムインタープリターが理解できる一連の命令にコンパイルし、次にそれらの命令をメタデータとして保存します。

エンドユーザーアクション

エンドユーザーがボタンをクリックするかVisualforceページにアクセスすることにより、Apexの実行をトリガーすると、プラットフォームアプリケーションサーバーは、メタデータからコンパイルされた命令を取得し、結果を返す前にランタイムインタープリターに送信します。エンドユーザーは、標準のアプリケーションプラットフォーム要求と比較して実行時間に違いはありません。

ApexはSalesforce.comの独自言語であるため、一般的なプログラミング言語がサポートする一部の機能をサポートしていません。以下は、Apexがサポートしていないいくつかの機能です-

  • ユーザーインターフェイスに要素を表示することはできません。

  • 標準のSFDCが提供する機能を変更することはできません。また、標準の機能の実行を妨げることもできません。

  • 他の言語で作成できるため、複数のスレッドを作成することもできません。

Apex構文を理解する

Apexコードには通常、他のプログラミング言語でおなじみの多くのものが含まれています。

変数宣言

強く型付けされた言語として、Apexでデータ型を持つすべての変数を宣言する必要があります。以下のコード(以下のスクリーンショット)に見られるように、lstAccはアカウントのリストとしてデータ型で宣言されています。

SOQLクエリ

これは、Salesforceデータベースからデータをフェッチするために使用されます。以下のスクリーンショットに示されているクエリは、Accountオブジェクトからデータをフェッチしています。

ループステートメント

このループステートメントは、リストを反復処理したり、コードの一部を指定された回数だけ反復処理したりするために使用されます。以下のスクリーンショットに示されているコードでは、反復はレコードの数と同じになります。

フロー制御ステートメント

このコードでは、フロー制御にIfステートメントが使用されています。特定の条件に基づいて、実行に進むか、特定のコードの実行を停止するかが決定されます。たとえば、以下に示すコードでは、リストが空であるか、レコードが含まれているかをチェックしています。

DMLステートメント

データベース内のレコードに対して、レコードの挿入、更新、アップサート、削除操作を実行します。たとえば、以下のコードは、新しいフィールド値でアカウントを更新するのに役立ちます。

以下は、Apexコードスニペットがどのように表示されるかの例です。このチュートリアルでは、これらすべてのApexプログラミングの概念についてさらに学習します。