Запрос записей на основе взаимосвязей

#salesforce #apex

Вопрос:

У меня есть контракт на объект, в котором есть поиск по другому типу индексации объекта. У меня есть еще один объект IndexationEntry, у которого есть основные сведения к типу индексации. Теперь я хотел бы получить значение поля «Процент» в поле «Индексация» в контракте на основе ваших полей. Год в индексации совпадает с Годом в Контракте. Как я должен этого достичь?

Ответ №1:

От контракта «вверх» до типа индексации__c, затем «вниз» до индексации__c?

Если между ними нет прямой связи, это будет некрасиво. Одним из способов было бы что-то вроде этого

 SELECT Id, Name,
    (SELECT Id, ContractNumber FROM Contracts__r WHERE Year__c = '2021'),
    (SELECT Id, Percent__c FROM IndexationEntries__r WHERE Year__c = '2021')
FROM IndexationType__c
 

Вам придется запускать его один раз в год. Или (поскольку вы отметили его как Apex), возможно, вы можете немного подготовить справочные данные, запросить типы индексации Записи и построить что-то вроде Map<Id, Map<Integer, IndexationEntry__c>> (1-й ключ по идентификатору типа индексации, затем по году). Запросите их, заполните карту, затем просмотрите свои контракты и используйте map.get() для получения ваших значений.