[Salesforce開発] Apex:レコードタイプに応じて異なるビジネスロジックを記述するには?

SFエンジニア

レコードタイプによってApexのロジックを変えないといけないのだけど、どうすれば良いかね?

SF宣教師

Apexコード内でSObject(Salesforceオブジェクト)のスキーマ情報にアクセスするためのSchemaクラスを使うとできますよ。

目次

[Salesforce] Apex:レコードタイプに応じて異なるビジネスロジックを記述するには?

レコードタイプ名がわかっている場合に、レコードタイプに応じて異なるビジネスロジックを記述するためのサンプルコードです。

List<Account> acc_list = [SELECT Id, Name, RecordTypeId from Account LIMIT 10];

//レコードタイプ名からレコードタイプIDを取得する
Id recType1 = Schema.SObjectType.Account.getRecordTypeInfosByName().get('レコードタイプ1').getRecordTypeId();
Id recType2 = Schema.SObjectType.Account.getRecordTypeInfosByName().get('レコードタイプ2').getRecordTypeId();

//レコードタイプに応じたビジネスロジック
for(Account acc : acc_list) {
    if (acc.RecordTypeId == recType1) {
        System.debug(acc.Name + 'は「レコードタイプ1」');
    } else if (acc.RecordTypeId == recType2) {
        System.debug(acc.Name + 'は「レコードタイプ2」');
    } else {
        System.debug(acc.Name + 'は「その他の取引先」');        
    }
}

上のサンプルコードは取引先オブジェクトに「レコードタイプ1」「レコードタイプ2」という2つのレコードタイプがあることを想定しています。

Schema.SObjectType.Account.getRecordTypeInfosByName() メソッドはAccountオブジェクトのレコードタイプ情報をレコードタイプ名を指定して取得するために使用されます。Accountは取引先のオブジェクト名です。
商談オブジェクトであればSchema.SObjectType.Opportunity.getRecordTypeInfosByName() となります。

getRecordTypeId()は、レコードのレコードタイプIDを取得するために使用されるメソッドです。

7行目以降がレコードタイプに応じたビジネスロジックです。AccountレコードのレコードタイプIDとレコードタイプ名から取得したレコードタイプIDを比較して、一致した場合に処理を行います。

Schemaクラス
Apexコード内でSObject(Salesforceオブジェクト)のスキーマ情報にアクセスするためのクラスです。スキーマ情報は、データベース内のオブジェクト、フィールド、リレーションシップなどの構造とメタデータを指します。

RecordTypeInfo クラス
SalesforceのApexコード内でレコードタイプ(Record Type)に関する情報にアクセスするためのクラスです。レコードタイプは、同じSObject(オブジェクト)に異なるビジネスプロセスや異なるフィールド設定を適用するための仕組みで、オブジェクトごとに異なる表示レイアウトやフィールドを提供するために使用されます。
Apex開発者ガイド: RecordTypeInfo クラス

SF宣教師

以上です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次