概要
Salesforceでオブジェクト一覧から必要なオブジェクトを選ぶような機能を作る際に、Salesforceのシステム用オブジェクトがたぶんいい感じ(完全ではない)にフィルタリングされたオブジェクト一覧を取得する方法
まだ、若干不要なオブジェクトもあるが、なにかいいフラグはないのかな。。。名前を直に指定するのもカッコ悪いしな。。。
方法
sample.cls
//すべてのオブジェクトを取得
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
for(String k : schemaMap.keySet()) {
Schema.DescribeSObjectResult schemaSobj = schemaMap.get(k).getDescribe();
//クエリできるオブジェクト
if(schemaSobj.isQueryable() &&
//アクセスできるオブジェクト
schemaSobj.isAccessible() &&
//更新可能なオブジェクト
schemaSobj.isUpdateable() &&
//新規機能用に予約されたオブジェクトではない
!schemaSobj.isDeprecatedAndHidden() &&
//カスタム設定ではない(任意)
!schemaSobj.isCustomSetting() &&
//グローバル検索できないオブジェクトまたはカスタムオブジェクトである
//カスタムオブジェクトを新規作成した場合は、デフォルトでカスタムオブジェクトがオフになっているため、
//OR条件でカスタムオブジェクトであるを追加しています
(schemaSobj.isSearchable() || schemaSobj.isCustom())) {
//do something
system.debug(schemaMap.get(k).getDescribe().getName()+'('+ schemaMap.get(k).getDescribe().getLabel() +')');
}
}
実行結果(システム管理者)
実行ユーザがシステム管理者以外の場合は、アクセス権限によって変わります
Account(取引先)
Asset(納入商品)
Attachment(添付ファイル)
Campaign(キャンペーン)
Case(ケース)
CaseComment(ケースコメント)
CollaborationGroup(グループ)
Contact(取引先責任者)
ContentDocument(コンテンツドキュメント)
ContentVersion(コンテンツバージョン)
Contract(契約)
Document(ドキュメント)
DandBCompany(D&B 企業)
EmailTemplate(メールテンプレート)
Event(行動)
Group(グループ)
Idea(アイデア)
IdeaComment(アイデアのコメント)
Lead(リード)
Macro(マクロ)
Note(メモ)
Opportunity(商談)
Order(注文)
PermissionSet(権限セット)
Pricebook2(価格表)
Product2(商品)
Solution(ソリューション)
SOSSession(SOS セッション)
Task(ToDo)
Topic(トピック)
User(ユーザ)
UserRole(ロール)
xxxxxx__c(xxxxxxカスタムオブジェクト)
…
以上