Это будет немного сложно.
Основная идея проста, просто добавьте 2 предложения WHERE. (Я пропускаю большинство ваших полей, чтобы изменение было более заметным):
SELECT Subject, Owner.UserName, Owner.Email,
(SELECT Status, Response, RelationId, Relation.Email
FROM EventRelations
WHERE Relation.Sync_contacts_and_cal_with_Notes__c = true)
FROM Event
WHERE Subject = 'Test Meeting 3' AND IsChild = false
AND Owner.Sync_contacts_and_cal_with_Notes__c = true
Однако это будет фильтровать по обеим таблицам.
2 пользователя: "Алиса" не имеет флажка, "Боб" имеет.
Если у вас есть мероприятие, принадлежащее "Алисе" - все ее мероприятия не будут синхронизированы, даже если "Боб" является одним из участников некоторых из них и хотел бы их увидеть!
Один из способов — просто включить флаг в SELECT и вручную отфильтровать записи в коде.
Другой вариант — изменить отношение, начать поиск с EventAttendee вверх и использовать фильтр ИЛИ:
SELECT Status, RelationId, RelationEmail,
Event.OwnerId, Event.Owner.Email
FROM EventAttendee
WHERE Owner.Sync_contacts_and_cal_with_Notes__c = true
OR Event.Owner.Sync_contacts_and_cal_with_Notes__c = true
ORDER BY Event
Это лучше, но не идеально, так как теперь мы никогда не увидим события, на которых нет участников...
ИЗМЕНИТЬ, чтобы отвечать на комментарии:
Вы увидите EventAttendees или EventRelations в зависимости от используемой вами версии API, я думал, что мы рассмотрели это в предыдущем вопросе? Просто замените имя таблицы и имя поля соответственно.
По поводу ошибки - действительно странно! Кажется, что он с радостью принимает стандартные поля пользователя, но становится глупым, когда вы начинаете использовать пользовательские. Одним из способов решения этой проблемы было бы обратиться в службу поддержки SF и подписаться на «полиморфный SOQL» (Как получить электронную почту из записи объекта задачи с помощью SOQL).
Другой способ - вам придется разделить его на 2 запроса, сначала получить идентификаторы пользователей с установленным флажком, а затем использовать их в WHERE OwnerId IN :(set of these id's here)
.
Это или:
SELECT Subject, Owner.UserName, Owner.Email,
(SELECT Status, Response, RelationId, Relation.Email
FROM EventRelations
WHERE RelationId IN (SELECT Id FROM User WHERE Checkbox__c = true))
FROM Event
WHERE IsChild = false
AND OwnerId IN (SELECT Id FROM User WHERE Checkbox__c = true)
- Если я правильно помню, дочерние события имеют
ReccurenceActivityId
набор.
person
eyescream
schedule
14.06.2013