4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Salesforce】【資格】デベロッパー勉強メモ:プロセスの自動化とロジック②

Last updated at Posted at 2021-09-26

デベロッパー試験勉強時にまとめたメモ書きです。内容が間違っていたら優しくご指摘ください。
他投稿はデベロッパー試験に関する記事からどうぞ。

あくまでも個人のメモ書きなので信用しすぎてはいけません。
参考に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の基本
デベロッパー勉強メモ:データモデリング
デベロッパー勉強メモ:プロセスの自動化とロジック①
デベロッパー勉強メモ:プロセスの自動化とロジック② ←当記事
デベロッパー勉強メモ:ユーザインタフェース
デベロッパー勉強メモ:テスト、デバッグ、リリース 

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?