2012-04-04

Force.com : Apex でオブジェクト及び項目の情報を取得する


Apex でオブジェクト及び項目の情報を取得する



○ すべてのオブジェクト及び項目の情報を取得する

Map<String, Schema.SObjectType> smap = Schema.getGlobalDescribe();
for (String objKey : smap.keySet()) {

    // Object
    System.debug('##### key: object API reference name: ' + objKey);

    Schema.SObjectType sobj = smap.get(objKey);
    Schema.DescribeSObjectResult sr = sobj.getDescribe();

    System.debug('##### object is Custom: ' + sr.isCustom());
    System.debug('##### object label: ' + sr.getLabel());
    System.debug('##### object API reference name: ' + sr.getName());

    // field
    Map<String, Schema.SObjectField> fmap = sr.fields.getMap();
    for (String fieldKey : fmap.keySet()) {

        System.debug('***** key: field API reference name: ' + fieldKey);

        Schema.SObjectField f = fmap.get(fieldKey);
        Schema.DescribeFieldResult fr = f.getDescribe();

        System.debug('***** field is Custom: ' + fr.isCustom());
        System.debug('***** field label: ' + fr.getLabel());
        System.debug('***** field API reference name: ' + fr.getName());
        System.debug('***** field type: ' + fr.getType());

        if(fr.getController() != null) {
            System.debug('***** field is controller');
            System.debug('***** controller'
                        + ' label: ' + fr.getController().getDescribe().getLabel());
                        + ' name: ' + fr.getController().getDescribe().getName());
        }

        if(fr.getReferenceTo().isEmpty()) {
            System.debug('***** field is reference to');
            List<Schema.sObjectType> olist = fr.getReferenceTo();
            for(Schema.sObjectType o : olist) {
                System.debug('***** reference to'
                                + ' label:' + o.getDescribe().getLabel() 
                                + ' API reference name:' + o.getDescribe().getName());
            }
        }

        if(!fr.getPicklistValues().isEmpty()) {
            System.debug('***** field is picklist');
            List<Schema.PicklistEntry> plist = fr.getPicklistValues();
            for(Schema.PicklistEntry e : plist) {
                System.debug('***** picklist'
                                + ' label:' + e.getLabel() 
                                + ' value:' + e.getValue());
            }
        }
    }
}



○ オブジェクト

■ カスタムオブジェクトかの判定 (ex. 取引先)
Account.sObjectType.getDescribe().isCustom()
  • true: カスタムオブジェクト
  • false: 標準オブジェクト
■ 表示ラベル (ex. 取引先)
Account.sObjectType.getDescribe().getLabel()
■ API 参照名 (ex. 取引先)
Account.sObjectType.getDescribe().getName()



○ 項目

■ カスタムオブジェクトかの判定 (ex. 取引先.取引先名)
Account.Name.getDescribe().isCustom()
  • true: カスタム項目
  • false: 標準項目
■ 表示ラベル (ex. 取引先.取引先名)
Account.Name.getDescribe().getLabel()
■ API 参照名 (ex. 取引先.取引先名)
Account.Name.getDescribe().getName()
■ データ型 (ex. 取引先.取引先名)
Account.Name.getDescribe().getType()
■ 制御項目 (ex. 取引先.種別)
Account.Type.getDescribe().getController()
  • 制御項目の設定がなければ null
  • 制御項目の設定があれば getDescribe() で制御側項目の詳細の取得が可能
■ 参照関係 (ex. 取引先.最終更新者)
Account.LastModifiedById.getDescribe().getReferenceTo()
  • 参照関係でなければ空
  • 参照関係であれば getDescribe で参照先オブジェクトの詳細の取得が可能
■ 選択リスト (ex. 取引先.種別)
Account.Type.getDescribe().getPicklistValues()
  • 選択リストでなければ空
  • 選択リストであれば値の Schema.PicklistEntry からラベルと値が取得可能



◆ メモ

  • 詳細、その他は参考先を参照のこと



◇ 環境

  • Salesforce - Developer Edition - API バージョン 24.0



◇ 参考


0 件のコメント:

コメントを投稿