Недавно был добавлен функционал для создание мульти Таска/Эвента, то есть один эвент может принадлежать нескольким контактам.
Функционал неплох, удобен и все такое.
Заказчики радуются как дети и во всё юзают. Но возникла проблема, что почти весь кастомный функционал под это создан не был. Что вдруг очень огорчило толстосумов из Пендостана.
Теперь подробнее о новой "фиче":
Есть контакт Леша Иванов. Создаем для него Евент. В поле Name добовляем еще контакт Петя Пилоткин. В качестве примари устанавливаем Петечку.
Все отлично, Ивент весит у обоих в Open Activities и все дела.
И начинается секс.
В поле WhoId у Ивента содержется ID Пети, он же примари. А вот чтобы получть ID Леши, нужно юзать объект EventRelation.
Это теория. Теперь практика:
Есть у меня в классе такой код:
for (Contact c : [SELECT Id, (SELECT ActivityDate, OwnerId, Type FROM Events WHERE ActivityDate<>NULL AND ActivityDate<TODAY AND Type IN :lastOnsiteVisit AND OwnerId IN: AsianServicesUserId ORDER BY ActivityDate DESC LIMIT 1) FROM Contact WHERE Id IN :setContactIDs])
{
if (!c.Events.isEmpty())
{
mapContact.get(c.Id).Last_Advisor_Meeting_AS__c = c.Events[0].ActivityDate;
UpContactAS.add(mapContact.get(c.Id));
}
}
И так как связь между Contact и Event проходит через WhoId, то получается что данная выборка не видит мульти ивенты.
И так как я пока в выборках не особо гуру, прошу помочь впихнуть EventRelation так, что бы выборка получала ВСЕ ивенты
Недавно был добавлен функционал для создание мульти Таска/Эвента, то есть один эвент может принадлежать нескольким контактам. Функционал неплох, удобен и все такое. Заказчики радуются как дети и во всё юзают. Но возникла проблема, что почти весь кастомный функционал под это создан не был. Что вдруг очень огорчило толстосумов из Пендостана. Теперь подробнее о новой "фиче": Есть контакт Леша Иванов. Создаем для него Евент. В поле Name добовляем еще контакт Петя Пилоткин. В качестве примари устанавливаем Петечку. Все отлично, Ивент весит у обоих в Open Activities и все дела. И начинается секс. В поле WhoId у Ивента содержется ID Пети, он же примари. А вот чтобы получть ID Леши, нужно юзать объект EventRelation. Это теория. Теперь практика: Есть у меня в классе такой код: [code] for (Contact c : [SELECT Id, (SELECT ActivityDate, OwnerId, Type FROM Events WHERE ActivityDate<>NULL AND ActivityDate<TODAY AND Type IN :lastOnsiteVisit AND OwnerId IN: AsianServicesUserId ORDER BY ActivityDate DESC LIMIT 1) FROM Contact WHERE Id IN :setContactIDs]) { if (!c.Events.isEmpty()) { mapContact.get(c.Id).Last_Advisor_Meeting_AS__c = c.Events[0].ActivityDate; UpContactAS.add(mapContact.get(c.Id)); } } [/code] И так как связь между Contact и Event проходит через WhoId, то получается что данная выборка не видит мульти ивенты. И так как я пока в выборках не особо гуру, прошу помочь впихнуть EventRelation так, что бы выборка получала ВСЕ ивенты
Решение примерно такое:
for (Contact c : [SELECT Id, (SELECT Event.ActivityDate, Event.OwnerId, Event.Type FROM EventRelations where Event.ActivityDate<>NULL AND Event.ActivityDate<TODAY AND Event.Type IN :lastOnsiteVisit AND Event.OwnerId IN: AsianServicesUserId ORDER BY Event.ActivityDate DESC LIMIT 1) FROM Contact WHERE Id IN :newContacts.keySet()])
{
if (!c.EventRelations.isEmpty())
{
newContacts.get(c.Id).Last_Advisor_Meeting_AS__c = c.EventRelations[0].Event.ActivityDate;
}
}
Решение примерно такое: [code] for (Contact c : [SELECT Id, (SELECT Event.ActivityDate, Event.OwnerId, Event.Type FROM EventRelations where Event.ActivityDate<>NULL AND Event.ActivityDate<TODAY AND Event.Type IN :lastOnsiteVisit AND Event.OwnerId IN: AsianServicesUserId ORDER BY Event.ActivityDate DESC LIMIT 1) FROM Contact WHERE Id IN :newContacts.keySet()]) { if (!c.EventRelations.isEmpty()) { newContacts.get(c.Id).Last_Advisor_Meeting_AS__c = c.EventRelations[0].Event.ActivityDate; } } [/code]
да, очень кстати правильное решение. AkiraDio, спасибо за вопрос и готовый ответ.
Я думаю этот вариант будет полезен многим.
да, очень кстати правильное решение. AkiraDio, спасибо за вопрос и готовый ответ. Я думаю этот вариант будет полезен многим.