デベロッパー試験勉強時にまとめたメモ書きです。内容が間違っていたら優しくご指摘ください。
他投稿はデベロッパー試験に関する記事からどうぞ。
あくまでも個人のメモ書きなので信用しすぎてはいけません。
参考にSalesforce公式ページを載せていますので、最新かつ正しい情報をご確認ください。
データ型
・プリミティブデータ型
Blob
Boolean
Date
Datetime
Decimal
Double
ID
Integer
Long
String
Time
Object ※すべてのApexデータ型がObjectから継承される
・sObject:標準オブジェクト、カスタムオブジェクトなど
・コレクション:List、Set、Map
・列挙型:enum
・null
トリガコンテキスト変数
isExecuting Apexコードの現在のコンテキストがトリガである場合、trueを返す
isInsert 挿入
isUpdate 更新
isDelete 削除
isUndelete ごみ箱から復元された後
isBefore レコードが保存される前
isAfter すべてのレコードが保存された後
new 新しいバージョンのレコードのリストを返す
newMap 新しいバージョンのレコードとIDのMapを返す
old 古いバージョンのレコードのリストを返す
oldMap 古いバージョンののレコードとIDのMapを返す
new | newMap | old | oldMap | |
---|---|---|---|---|
before insert | 〇 | |||
before update | 〇 | 〇 | 〇 | 〇 |
before delete | 〇 | 〇 | ||
after insert | 〇 | 〇 | ||
after update | 〇 | 〇 | 〇 | 〇 |
after delete | 〇 | 〇 | ||
after undelete | 〇 | 〇 |
DescribeSObjectResultクラスのメソッド(すべて引数無し)
getKeyPrefix() オブジェクトの3文字のプレフィックスコードを返す
getLabel() オブジェクトの表示ラベルを返す
getName() オブジェクトの名前を返す
getRecordTypeInfos() RecordTypeInfoのリストを返す
getRecordTypeInfosByDeveloperName() レコードタイプのAPI名とRecordTypeInfoのリストを返す
getRecordTypeInfosById() レコードタイプのIDとRecordTypeInfoのリストを返す
getRecordTypeInfosByName() レコードタイプのラベルとRecordTypeInfoのリストを返す
getSobjectType() 同じsObjectTypeを返す
isAccessible()などis~~のメソッド アクセス権などを返す
DescribeFieldResultクラスのメソッド(すべて引数無し)
getDefaultValue() 項目のデフォルト値を返す
getLabel() 項目の表示ラベルを返す
getName() 項目名を返す
getPicklistValues() PicklistEntry(選択リスト値)のリストを返す ※選択リストでない場合ランタイムエラーを返す
getRelationshipName() リレーション名を返す
getType() DisplayType(データ型)を返す
isAutoNumber() 自動採番の場合はtrue、そうでない場合はfalseを返す
isCustom() カスタム項目の場合はtrue を、標準項目の場合はfalseを返す
isAccessible()などis~~のメソッド アクセス権などを返す
DescribeSObjectResultクラスとDescribeFieldResultクラスは記述方法が頻出のようです。
下記のコードはそのまま匿名実行やApexで使用できます。
// 取引先のレコードタイプ情報のリストを取得
List<Schema.RecordTypeInfo> recordTypeInfoList = Account.sObjectType.getDescribe().getRecordTypeInfos();
// (実行ユーザが)取引先レコードへアクセス可能か
boolean isAccessible = Account.sObjectType.getDescribe().isAccessible();
// 取引先の評価項目の選択リスト値のリストを取得
List<Schema.PicklistEntry> ratingList = Account.Rating.getDescribe().getPicklistValues();
// (実行ユーザが)取引先の評価項目へアクセス可能か
boolean isAccessible = Account.Rating.getDescribe().isAccessible();
アノテーション
@AuraEnabled クライアント側およびサーバ側からApexメソッドへのアクセスが可能になる
@future :非同期で実行するメソッドを指定する
@InvocableMethod :フローやプロセスビルダーから呼び出し可能になる
@isTest :テストに使用するコードのみを含むクラスおよびメソッドを定義する
@testSetup:テストメソッドで使用できる一般的なテストレコードの作成に使用する。引数を取らず、値を返さない。
@TestVisible :非公開のメンバーやメソッドに、テストメソッドからアクセスが可能になる
ApexクラスとJavaクラスの違い
・内部クラスは外部クラスの1つ下のレベルでのみ宣言できる
→複数レベル下の内部クラスは宣言不可
・静的メソッドと変数は、最上位クラスでのみ宣言できる
→内部クラスでは不可
・デフォルトのアクセス修飾子は private
・publicアクセス修飾子は、このアプリケーションまたは名前空間内のすべてのApexで使用可能なことを意味する
・globalアクセス修飾子は、クラスへのアクセス権を付与されたすべてのApexコードで使用可能なことを意味する
※アプリケーション外から参照されるすべてのメソッドはこのアクセス修飾子を使用する必要がある
※メソッドまたは変数を global として宣言する場合、それを含むクラスも global として宣言する必要がある
・メソッドおよびクラスはデフォルトで final
・インターフェースメソッドは常にglobalとなる
→インターフェースメソッドにアクセス修飾子の指定不可
※インターフェースはメソッドが実装されていないクラスのようなもの、メソッドの署名はあるが本文は空
継承
継承される側 | 継承する側 | |
---|---|---|
インタフェース | interface | implements |
インタフェースのメソッド | - | - |
クラス | virtual | extends |
クラスのメソッド | virtual | overrid |
実行順序
項目の必須・型・長さの検証
フロー
Beforeトリガ
入力規則
重複ルール
データベースへの保存(コミットはされない)
Afterトリガ★
割り当てルール
レスポンスルール
ワークフロールール★
プロセスビルダー★
エスカレーションルール
エンタイトルメントルール
親オブジェクトの更新(積み上げ集計項目、クロスオブジェクトの項目自動更新)
共有ルール
コミット(DML操作)
メール送信・TODO作成・アウトバウンドメッセージなど
(★は同一オブジェクトに対して再度Apexトリガが実行される可能性のあるもの)
※入力規則についてInsert時は作成日・最終更新日を使用した式は無視される →ISNEW()を使用
※ワークフロールールやプロセスビルダーは1回だけ、トリガは複数回通ることがある
参考
↓Salesforce公式の開発者ガイドやヘルプページなどのリンクになっています
データ型
トリガコンテキスト変数
DescribeSObjectResult クラス
DescribeFieldResult クラス
アノテーション
Apex クラスと Java クラスの違い
デベロッパー試験に関する記事
Salesforce 認定 Platform デベロッパー 合格までのあれこれ
デベロッパー勉強メモ:Salesforceの基本
デベロッパー勉強メモ:データモデリング
デベロッパー勉強メモ:プロセスの自動化とロジック①
デベロッパー勉強メモ:プロセスの自動化とロジック② ←当記事
デベロッパー勉強メモ:ユーザインタフェース
デベロッパー勉強メモ:テスト、デバッグ、リリース