Salesforceの開発をしているとオブジェクトを特定する3文字のKeyPrefixが必要な時があります。自分のよく使う方法を書こうと思います。
1.オブジェクト情報の格納しているオブジェクトをselectする。
オブジェクト情報は、エンティティ定義(EntityDefinition)に格納されています。
一覧で取得するのにSOQLを実行するのみなので、一番シンプルな方法です。
例えば、次のSOQLで、オブジェクトのAPI名、表示ラベル、KeyPrefixが取得できます。
Select
QualifiedApiName
,Label
,KeyPrefix
From
EntityDefinition
この方法だと、DataLoaderなどでも取得できます。エンティティ定義(EntityDefinition)には、その他にも項目があるので使いやすいと思います。
使用する際には次を注意しておく必要があります。
・エンティティ定義(EntityDefinition)はAPIバージョンは33以上で使えます。
・SOQLの発行をするので、Apex内でSOQLの発行件数にカウントされます。
・キープレフィックスは一意ではない。キープレフィックスが指定されていないオブジェクトの他に、項目変更履歴の履歴オブジェクトなど同一のキープレフィックスのものがあります。
・プロファイル(および権限セット)で参照以上の権限がついてないとSOQLの結果に含まれない。
2.ApexのdescribeGlobalを使う
ApexやAPIで用意されているdescribeGlobalを使います。コードを書かないといけないですが、SOQLは発行しないのが良い点だと思います。
Map<String, Schema.SObjectType> ret = Schema.getGlobalDescribe();
for(String key : ret.keySet() ){
Schema.DescribeSObjectResult[] descResult = Schema.describeSObjects(new String[]{key});
System.debug(key);
System.debug(descResult[0].getKeyPrefix());
System.debug(descResult[0].getLabel());
}
注意事項はSOQL発行の時と一部かぶります。
・キープレフィックスは一意ではない。キープレフィックスが指定されていないオブジェクトの他に、項目変更履歴の履歴オブジェクトなど同一のキープレフィックスのものがあります。
・プロファイル(および権限セット)で参照以上の権限がついてないとSOQLの結果に含まれない。