プログラマ38の日記

主にプログラムメモです。

Salesforce: オブジェクトのキープレフィックス(KeyPrefix:IDの頭3桁)の一覧を取得する方法

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の結果に含まれない。