在顶点中的动态soql中使用通配符作为列名

时间:2016-10-18 17:12:15

标签: salesforce apex soql

我的情况是我的列名称可以是genesis__prod__c / docgen__prod__c / lnd__prod__c等类型,具体取决于使用我的解决方案包的包。这里创世纪,docgen和使用我的解决方案的不同产品包。

我的解决方案需要从那里的产品中的相应sObjects中获取任何这些(genesis__prod__c / docgen__prod__c / lnd__prod__c)字段。

我想构造一个通用查询,它将使用通配符省略命名空间,并且只在指定的sObject中查找prod__c。有了这个,我不必在查询中硬编码任何命名空间。

例如,我不想像这样形成我的查询

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

这里我特别提到了要从运行时解析的sObject名称docgen__CL_Product__c获取的sObjectType名称w.r.t和appId

如何构建查询,而不必在docgen,genesis之前提供名称空间prod__c。我不想为每个可以使用我的包的产品写if-else

1 个答案:

答案 0 :(得分: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');