ApexでレコードIDからオブジェクトを判定する

前書き

やり方色々ありますが、今回下記の三つをご紹介します。

①sObjectTypeの一致判定
②オブジェクト名の一致判定
③オブジェクトPrefixの一致判定

本記事で用いる例:レコードIDからContactかどうかを判定する

推奨:sObjectTypeの一致判定

Id testId = '003a000001bcY9t';              
Schema.sObjectType entityType = testId.getSObjectType();
System.assertEquals(entityType == Contact.sObjectType);

非推奨:オブジェクト名の一致判定

Id testId = '003a000001bcY9t';
String sObjectType entityType = testId.getSObjectType().getDescribe().getName();            

System.assertEquals(entityType == 'Contact');

非推奨理由:カスタムオブジェクトの場合、オブジェクト名変更したらコードが機能しなくなる。

非推奨:オブジェクトPrefixの一致判定

Id testId = '003a000001bcY9t';              
String entityPrefix = testId.getSObjectType().getDescribe().getKeyPrefix();
System.assertEquals(entityPrefix == '003');

非推奨理由:コードが正しいかどうかをコードから判定できない。すなわち、静的に指定したオブジェクトPrefixが正しいかどうか(※上記の例の場合、そもそもContactのPrefixが’003’なのかどうか)を判断する術がコードの外の世界の知識(=オブジェクトPrefix一覧表)に依存している

関連記事

Salesforce

Posted by regardie