SFエンジニア
レコードタイプによってApexのロジックを変えないといけないのだけど、どうすれば良いかね?
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を比較して、一致した場合に処理を行います。
以上です。
コメント