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