Другой способ сделать это, когда вам нужны реальные продукты, а не только позиции, заключается в следующем. Сначала получите ваши возможности:
List<Opportunity> opps = [SELECT Id, Name FROM Opportunity LIMIT 1000];
Затем выполните цикл, чтобы создать список идентификаторов возможностей
List<Id> oppIds = new List<Id>();
for(Opportunity o : opps)
{
oppIds.add(o.Id);
}
Теперь получите ваши фактические продукты , которые соответствуют вашим возможностям ...
List<OpportunityLineItem> oppProds = [SELECT Id, PricebookEntry.Product2.Name, PricebookEntry.Product2.Family
FROM OpportunityLineItem
WHERE OpportunityId IN :oppIds];
Надеюсь, это поможет.