LoginSignup
0
2

More than 5 years have passed since last update.

小ネタ)すべてのSalesforceオブジェクトにName項目はない

Posted at

概要

 不特定多数のオブジェクトを対象としたアプリケーションを開発する際に、すべてのオブジェクトにName項目があると思って、ソースコードにNameをベタ書きするとNGです。残念ながらすべてのオブジェクトにName項目はないです!
なので、DescribeからName項目ないオブジェクトリストを作成して、それと突き合わせることが安全策です

Name項目がない代表的なオブジェクト

契約やケースといったよく使うオブジェクトにもName項目はないんです

オブジェクト名
契約 Contract
ケース Case
ソリューション Solution
ToDo Task
行動 Event
アイデア Idea

確認方法

DescribeからName項目の有無を確認する

※下記のサンプルコードでクエリ可能か、アクセス可能かなどの条件を追加していますが、必要に応じて変更して実行してください

Map<String, Schema.SObjectType> gs = Schema.getGlobalDescribe();
for(String objectName : gs.keySet()) {
    Schema.DescribeSObjectResult schemaSobj = gs.get(objectName).getDescribe();
    if(schemaSobj.isQueryable() &&
       schemaSobj.isAccessible() &&
       schemaSobj.isUpdateable() &&
       (schemaSobj.isSearchable() || schemaSobj.isCustom()) &&
       !schemaSobj.isDeprecatedAndHidden() &&
       !schemaSobj.isCustomSetting()) {
        Map<String, Schema.SObjectField> gf = gs.get(objectName).getDescribe().fields.getMap();
           if(!gf.containsKey('Name')) {
               // Name項目を待たないオブジェクト名が表示されます
               system.debug(objectName);               
           }

       }
}
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2