Регистрация  |  Вход

Проблема с использованием мульти Эвент

Недавно был добавлен функционал для создание мульти Таска/Эвента, то есть один эвент может принадлежать нескольким контактам.

Функционал неплох, удобен и все такое.

Заказчики радуются как дети и во всё юзают. Но возникла проблема, что почти весь кастомный функционал под это создан не был. Что вдруг очень огорчило толстосумов из Пендостана.

Теперь подробнее о новой "фиче":

Есть контакт Леша Иванов. Создаем для него Евент. В поле 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, спасибо за вопрос и готовый ответ. 
Я думаю этот вариант будет полезен многим.