2016-10-18 4 views
0

ソリューションパッケージを使用しているパッケージに応じて、私のカラム名がgenesis__prod__c/docgen__prod__c/lnd__prod__cなどのタイプになるシナリオがあります。ここでは起源、docgenと私のソリューションを使用して別の製品パッケージです。頂点にある動的なsoqlのカラム名にワイルドカードを使用する

私のソリューションでは、そこにある製品の各sObjectから、これらのフィールド(genesis__prod__c/docgen__prod__c/lnd__prod__c)のいずれかを取得する必要があります。

ワイルドカードを使用して名前空間を省略し、指定されたsObject内のprod__cだけを検索する一般的なクエリを作成します。これで、私はクエリ内の名前空間をハードコードする必要はありません。例えばのための

。、私は、実行時に解決のsObject名からsObjectType WRT appId

をフェッチするdocgen__CL_Product__c名を具体的に記載されているここでは、この

String query = 'select Id,Name,docgen__CL_Product__c from '+ sObjectType + ' where id= \'' + appId + '\''; 
List<sObject> runtimeDeterminedObject = Database.query(query+' LIMIT 1'); 

のように私のクエリを形成する必要はありませんの前に名前空間docgen,genesisを指定する必要がないクエリをどのように作成できますか?私のパッケージを利用できる製品ごとにif-elseと書いてはいけません。

+0

これは、 elseアプローチ –

答えて

0

何らかの条件に基づいてクエリに追加される変数を名前空間にしないのはなぜですか?正確にはあなたが探しているものではありませんが、環境を判断する方法がいくつかあると仮定しています。それに基づいて、クエリを動的に調整することができます。

String env = someCondition ? 'genesis__' : 'docgen__'; 

String query = 'select Id, Name, ' + env + 'CL_Product__c from '+ sObjectType + ' where id= \'' + appId + '\''; 
List<sObject> runtimeDeterminedObject = Database.query(query+' LIMIT 1'); 
関連する問題