Apexコードを書くのに必要な知識は何
Apex
Apexは強く型付けされたオブジェクト指向のプログラミング言語です。構文はJavaライクであり、Force.com プラットフォームサーバで処理を描く時に使用します。Apex を使うと、ボタンクリック、関連レコードの更新などのほとんどのシステムイベントにビジネスロジックを追加できます。
Lightning ComponentがクライアントサイドでApexがサーバサイドと言う理解でも良いと思います。
Lightning Componentからのリクエストをサーバサイドで処理できるようになります。
Lightning Componentから $A
キーワードを利用することでエンドポイントの呼び出しができるので調べてみてください。
SOQL (Salesforce Object Query Language)
Force.com プラットフォームのデータベース操作に利用するクエリ言語です。SQLのような構文で書く事ができますが両者は違うものです。例えばSOQLでは SELECT *
が出来ません。Salesforceはマルチテナント環境にありますが、マルチテナント環境では全員が「データベースを共有」しているようなものであるため、 *
などのワイルドカード文字を使用すると問題が発生するからです。
ガバナ制限
これがApexコード格上での曲者。実はApexにはマルチテナント環境ゆえの制限事項が幾つかあります。
実行ガバナと制限 - Salesforce Developers
実行プロセスが共有リソースを独占しないように制限しており、超えた場合は 処理できない実行時例外 がthrowされるようになっています。何度も update
や insert
命令を発行したりすると簡単にSOQLの制限に引っかかってしまいます。
他にもforループで上記クエリを発行するのは絶対にやめましょう。
SOQLの制限で困ったときには実行したいトランザクションがどこからどこまでなのか把握してクエリを削減することに勤めましょう。トランザクションが分割可能であれば分割しましょう。
Apexトリガ
Salesforce のレコードに対するイベント (挿入、更新、削除) の前または後に処理できるApexプログラムです。
やたら操作の多いSalesforce上の仕事を自動化する際に利用できます。
これもガバナ制限には注意が必要です。特にトリガが原因で他のトリガを誘発してしまうことがあります。
例えば Opportunity
のトリガは OpportunityLineItem
の変更にも反応してしまうので、 OpportunityLineItem
のトリガを作る際には Opportunity
のトリガ内容にも注意しなくてはいけません。
先に書いてしまいましたがトリガは一つのsObject(Opportunity...etc.)に関連付けます。
Apex一括処理
どうしてもガバナ制限を超えるような大規模ジョブを行う必要がある時にはApex一括処理を利用しましょう。
Apex 一括処理の内部的なしくみは次のとおりです。Apex 一括処理を使用して 100 万件のレコードを処理するとします。一括処理クラスの実行ロジックは、処理するレコードのバッチごとに 1 回コールされます。一括処理クラスを呼び出すたびに、ジョブは Apex ジョブキューに置かれ、別個のトランザクションとして実行されます。この機能には 2 つの大きな利点があります。
Apex 一括処理の使用 単元 | Salesforce Trailhead
単体テスト
Salesforceのリリース時には変更セットという機能を使ってリリースするのですが、この際には必ず単体テストが実行されます。 失敗すればリリースできないですし、 コードカバレッジ も75%なければエラー扱いとなりリリースできません。 なので単体テストは必ず書きましょう。テストしやすいように疎結合なコードを書くことももちろん大切ですよ。
まとめ
かなり簡素に大切なことだけ書きました。 逆にもっと細かいけどメモとして残していた知識がいくつかあるのでそちらは別途記事にします。