Есть выборка и цикл:
for (Contact c : [SELECT Id, (SELECT Event.ActivityDate FROM EventRelations allrows WHERE isdeleted = false and Event.ActivityDate!=NULL AND Event.ActivityDate<TODAY AND Event.Type IN :lastOnsiteVisit AND Event.OwnerId IN: RetUserId ORDER BY Event.ActivityDate DESC LIMIT 1) FROM Contact WHERE Id IN :newContacts.keySet()]) {
if (!c.EventRelations.isEmpty()) {
newContacts.get(c.Id).Last_Onsite_Visit__c = c.EventRelations[0].Event.ActivityDate;
}
}такой вариант приемлем?
List<SObject> contactRelatedEvents =[
SELECT
WhoId, ActivityDate
FROM Event ALLROWS
WHERE
IsDeleted = false AND
Event.ActivityDate != NULL AND
Event.ActivityDate < TODAY AND
WhoId IN :newContacts.keySet() AND
Event.Type IN :lastOnSiteVisit AND
Event.OwnerId IN :retUserId
GROUP BY WhoId, ActivityDate
ORDER BY ActivityDate DESC
LIMIT :newContacts.keySet().size()
];
for(SObject event : contactRelatedEvents) {
newContacts.get((Id)event.get('WhoId')).Last_Onsite_Visit__c = (Date)event.get('ActivityDate');
}
К сожалению нет( Есть определённые ограничения самого SF. Выбрать могу только айдишку.