クエリビルダーを作成しようとしています。この場合、sObjectの結果に不確定な数のフィールドが含まれる可能性があります。結果を使用して動的テーブルを作成していますが、クエリに含まれていたフィールドのリストのsObjectを読み取る方法がわかりません。
getDescribe情報を使用してすべてのフィールドのリストを取得する方法を知っていますが、クエリにこれらのフィールドのすべてが含まれていない可能性があります。
これを行う方法はありますか?
クエリビルダーを作成しようとしています。この場合、sObjectの結果に不確定な数のフィールドが含まれる可能性があります。結果を使用して動的テーブルを作成していますが、クエリに含まれていたフィールドのリストのsObjectを読み取る方法がわかりません。
getDescribe情報を使用してすべてのフィールドのリストを取得する方法を知っていますが、クエリにこれらのフィールドのすべてが含まれていない可能性があります。
これを行う方法はありますか?
おそらくクエリを文字列として構築しているのは動的なので、説明情報のフィールドをループして.contains()
、クエリ文字列で使用して、それが要求されたかどうかを確認することはできませんか? クレイジーでエレガントではありませんが、ここでは最も簡単な解決策のようです。
これをさらに進めると、おそらく、文字列のリストなどで選択されたフィールドのリストがあり、そのリストをそのまま使用できますか?
クエリとテーブルの両方を作成するためにフィールドのリストを使用することをお勧めします。結果にフィールドのリストを入れて、それを使用するすべての人がアクセスできるようにすることができます。次に、result.getFields()を使用してテーブルを作成し、result.getRows()を使用してデータを取得できます。
for (sObject obj : result.getRows()) {
for (String fieldName : result.getFields()) {
table.addCell(obj.get(fieldName));
}
}
制御できないクエリを処理しようとしている場合は、クエリを解析してフィールドのリストを取得する必要があります。しかし、私はそれを試すことをお勧めしません。それは、従うのが難しい方法でコードを複雑にします。
sObjectのフィールドのリストを取得するには、次のようなメソッドを使用できます。
public Set<String> getFields(sObject sobj) {
Set<String> fieldSet = new Set<String>();
for (String field : sobj.getSobjectType().getDescribe().fields.getMap().keySet()) {
try {
a.get(field);
fieldSet.add(field);
} catch (Exception e) {
}
}
return fieldSet;
}
コンテキストに合わせてこのアプローチをまとめてリファクタリングする必要がありますが、機能します。sObjectを渡すだけで、フィールド名のセットが返されます。
これがまさにあなたが求めていたものかどうかはわかりませんが、このようなものですか?
public list<sObject> Querylist {get; set;}
検索文字列の定義
string QueryString = 'select field1__c, field2__c from Object where';
ユーザーがこれらのフィールドで検索する場合、検索を構築するために必要な数のこれらを追加します
if(searchParameter.field1__c != null && searchParameter.field1__c != '')
{
QueryString += ' field1__c like \'' + searchParameter.field1__c + '%\' and ';
}
if(searchParameter.field2__c != null && searchParameter.field2__c != '')
{
QueryString += ' field2__c like \'' + searchParameter.field2__c + '%\' and ';
}
最後を外して
QueryString = QueryString.substring(0, (QueryString.length()-4));
QueryString += ' limit 200';
リストにクエリを追加する
for(Object sObject : database.query(QueryString))
{
Querylist.add(sObject);
}