Использование подстановочных знаков для имен столбцов в динамическом soql в apex

#salesforce #apex #soql

#salesforce #apex #soql

Вопрос:

У меня есть сценарий, в котором имена моих столбцов могут иметь тип genesis__prod__c / docgen__prod__c / lnd__prod__c и т. Д. В зависимости от того, какой пакет использует мой пакет решений. Здесь genesis, docgen и разные пакеты продуктов, использующие мое решение.

Мое решение должно извлекать любое из этих полей (genesis__prod__c / docgen__prod__c / lnd__prod__c) из соответствующих объектов sObject в продуктах.

Я хочу создать общий запрос, который будет пропускать пространство имен с использованием подстановочного знака и искать только prod__c в указанном sObject . Благодаря этому мне не нужно жестко кодировать какое-либо пространство имен в моем запросе.

например, я не хочу формировать свой запрос следующим образом

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

Здесь я специально упомянул docgen__CL_Product__c имя, которое должно быть извлечено из разрешенного во время выполнения sObject name sObjectType w.r.t an appId

Как я могу сформировать запрос, в котором мне не нужно указывать пространство docgen,genesis имен раньше prod__c . Я не хочу писать if-else для каждого продукта, который может использовать мой пакет.

Комментарии:

1. Кажется, это единственный вариант с использованием подхода if-else

Ответ №1:

Почему бы вам не сделать пространство имен переменной, которая добавляется к запросу на основе некоторого условия? Не совсем то, что вы ищете, но я предполагаю, что есть какой-то способ определить среду, а затем на основе этого вы можете динамически корректировать запрос:

 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');