5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Apex上でSelect *を実装してみた

Last updated at Posted at 2015-01-05

概要

SOQL上では"Select *"がないので、実装してみました。使う時に注意事項をご確認ください。

多分すでに実装した方はいらっしゃると思いますので、ネタがかぶったら申し訳ありません。

目的

全項目をクエリする時に、いちいち項目を指定するのが面倒な方にはぴったりです。

実装


/**
 * SOQLの"Select *"のクエリStringを取得する
 * @param tableName テーブル名
 * @param whereCondition クエリのWHEREやGROUPBYやORDERBYやLIMITなど
 * @param isCustomFieldOnly カスタム項目のみを取得するフラグ
 * @param staticFields カスタム項目のみの場合、カスタム項目をクエリに含めたらこのパラメーターを使用する
 * @return SOQLクエリString
 **/
public static String getSelectAllQuery(String tableName, String whereCondition, Boolean isCustomFieldOnly, String[] staticFields) {
    Map<String, Schema.SObjectType> m = Schema.getGlobalDescribe() ;
    Schema.SObjectType s = m.get(tableName) ;
    Schema.DescribeSObjectResult r = s.getDescribe() ;
    Map<String, Schema.SObjectField> fields = r.fields.getMap() ;
    string soql = '';
    for (String fieldName : fields.keyset()) {
        if(isCustomFieldOnly && (fieldName.indexOf('__c') < 0)) {
            continue;
        }
        if (soql != '') {
            soql += ', ';
        }
        soql += fieldName;
    }
    for (String fieldName : staticFields) {
        if (soql != '') {
            soql += ', ';
        }
        soql += fieldName;
    }
    soql = 'SELECT ' + soql + ' FROM ' + tableName + ' ' + whereCondition;
    return soql;
}

  • staticFieldsパラメータについて

カスタム項目のみのクエリを生成する際に、いくつか標準項目も取得したい場合使用することができます。

使い方

  • 全項目
String query = getSelectAllQuery('Account', 'WHERE Id=\''+accId+'\'', false, null);
Account accData = Database.query(query);

  • カスタム項目のみ
String[] fields = new String[]{'Name'};
String query = getSelectAllQuery('Account', 'WHERE Id=\''+accId+'\'', true, fields);
Account accData = Database.query(query);

注意事項

全項目をコピ・クローンーするなどの目的では、数式型かどうかや権限も持っているをちゃんとチェックしてください。

5
6
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
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?