こんにちは、ヨリユです。
本記事ではApexトリガーについて解説していきます。
Apexトリガーは、Salesforce開発においてよく利用されるため、使い方を押さえておきましょう!
【この記事から学べること】
・Apexトリガーの構文
・Apexトリガーのコンテキスト変数
Apexトリガーとは?
SalesforceのApexトリガーとは、データベース内でイベントが発生した際に呼び出されるApexプログラムになります。Apexトリガーを使用すると、例えば、Salesforceレコード更新の前後にカスタムロジックを実行できます。また、SOQLやDMLの実行、Apexメソッドのコールなど、Apexと同様に実行することができます。
フローなどの宣言型開発で実装できることが増えてきていますが、複雑なロジックの実装は難しい場合があります。宣言型開発で実装が難しい複雑なロジックを実装する場合は、Apexトリガーを使用することが適しているといえるでしょう。
Apexトリガーの構文
Apexトリガーの構文は、以下のとおりです。
trigger TriggerName on ObjectName (trigger_events) {
// logic
}
・TriggerName:Apexトリガー名
・ObjectName:Apexトリガーを起動するオブジェクト名
・trigger_events:Apexトリガーを起動するイベント名(複数指定可能)
Apexトリガーの指定可能なイベント(trigger_events)は、以下のとおりです。
- (挿入前)before insert
- (更新前)before update
- (削除前)before delete
- (挿入後)after insert
- (更新後)after update
- (削除後)after delete
- (復元後)after undelete
Apexトリガーのコンテキスト変数
Apexトリガーのコンテキスト変数とは、トリガを実行するレコードのランタイムにアクセスするための変数になります。コンテキスト変数にアクセスすることで、今回Apexトリガーが呼び出されたイベントや、Apexトリガー呼び出しのレコードの合計数などの情報を取得することができます。
Apexトリガーには、以下のコンテキスト変数があります。
変数 | 説明 |
---|---|
isExecuting | Apexコードの現在のコンテキストが Visualforceページ、Webサービス、またはexecuteanonymous() APIコールではなく、トリガーである場合、true を返します。 |
isInsert | 挿入操作により、Salesforceユーザーインターフェース、Apex、またはAPIからこのトリガーが実行された場合に、true を返します。 |
isUpdate | 更新操作により、Salesforceユーザーインターフェース、Apex、またはAPIからこのトリガーが実行された場合に、true を返します。 |
isDelete | 削除操作により、Salesforceユーザーインターフェース、Apex、またはAPIからこのトリガーが実行された場合に、true を返します。 |
isBefore | レコードが保存される前にこのトリガーが実行された場合に、trueを返します。 |
isAfter | すべてのレコードが保存された後にこのトリガーが実行された場合に、trueを返します。 |
isUndelete | レコードがごみ箱から復元された後にこのトリガーが実行された場合に、trueを返します。この復元は、Salesforceユーザーインターフェース、Apex、またはAPIからの復元操作の後にのみ行われます。 |
new | 新しいバージョンのsObjectレコードのリストを返します。 このsObjectリストはinsertトリガー、update トリガー、および undelete トリガーでのみ使用でき、レコードは before トリガーでのみ変更できます。 |
newMap | 新しいバージョンの sObject レコードへの ID の対応付けです。 この対応付けは before update トリガー、after insert トリガー、after update トリガー、および after undelete トリガーでのみ使用できます。 |
old | 古いバージョンの sObject レコードのリストを返します。 この sObject リストは update トリガーと delete トリガーでのみ使用できます。 |
oldMap | 古いバージョンの sObject レコードへの ID の対応付けです。 この対応付けは update トリガーと delete トリガーでのみ使用できます。 |
operationType | 現在の操作に対応する System.TriggerOperation 種別の列挙値を返します。System.TriggerOperation 列挙値の有効な値は、BEFORE_INSERT、BEFORE_UPDATE、BEFORE_DELETE、AFTER_INSERT、AFTER_UPDATE、AFTER_DELETE、AFTER_UNDELETE です。トリガーの種類に基づいて異なるプログラミングロジックを使用する場合は、switch ステートメントを使用して、一意のトリガー実行列挙状態の異なる順列を指定することを検討してください。 |
size | 古いバージョンと新しいバージョンの両方を含む、トリガー呼び出しのレコードの合計数。 |
Apexトリガーのサンプルコード
以下、Apexトリガーのサンプルコードです。
取引先(Account)レコードが新規作成されたときに、取引先の説明(Description)フィールドに特定の値を設定します。
trigger SetAccountDescription on Account (before insert) {
for(Account acc : Trigger.new) {
// 取引先の説明を設定
acc.Description = 'Apexトリガーサンプル';
}
}
おわりに
いかがでしたでしょうか。
Apexトリガーが実装されている環境はよくあるかと思いますので、サンプルコードを動かしながら使い方を身につけていきましょう!
最後までご覧いただきありがとうございました!