这会变得有点棘手。
基本思路很简单,只需添加 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 个用户:“Alice”没有选中复选框,“Bob”有。
如果您有一个由“Alice”拥有的活动 - 即使“Bob”是其中一些活动的参与者之一并且他希望看到它们,她的所有活动也不会同步!
一种方法是简单地将标志包含在 SELECT 中,然后手动过滤代码中的记录。
另一种选择是反转关系,从 EventAttendee 开始查找并使用 OR 过滤器:
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
这更好但并不理想,因为现在我们永远不会看到没有任何参与者的活动......
编辑回答评论:
根据您使用的 API 版本,您会看到 EventAttendees 或 EventRelations,我想我们已经在上一个问题中介绍过?只需相应地替换表名和字段名。
关于错误 - 真的很奇怪!它似乎很乐意接受标准用户字段,但当您开始使用自定义字段时会变得愚蠢。解决它的一种方法是联系 SF 支持并选择加入“多态 SOQL”(如何使用 SOQL 从任务对象记录中获取电子邮件)。
另一种方式 - 您必须将其拆分为 2 个查询,首先获取选中复选框的用户 ID,然后在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
设置。