如何用Apex查询特定许可证用户所属联系人并检查账户地址
合并Apex查询并检查账户联系点地址
合并查询逻辑
你可以通过SOQL关系查询直接将两次查询合并为单条,无需先查用户再查联系人。利用Contact的Owner关联关系,直接过滤所属用户拥有指定许可证的联系人:
// 合并后的单条查询,同时关联获取账户及联系点地址 List<Contact> communityOwnedContacts = [ SELECT Id, Name, OwnerId, Account.Id, Account.Name, (SELECT Id, Address, IsDefault FROM Account.ContactPointAddresses) FROM Contact WHERE Owner.Profile.UserLicense.LicenseDefinitionKey IN ('PID_Customer_Community', 'PID_Customer_Community_Login') ];
检查账户联系点地址
遍历查询结果,逐个验证关联账户的联系点地址状态:
for (Contact con : communityOwnedContacts) { Account relatedAccount = con.Account; if (relatedAccount == null) { System.debug('联系人 ' + con.Name + ' 未关联任何账户'); continue; } List<ContactPointAddress> addresses = relatedAccount.ContactPointAddresses; // 检查是否存在联系点地址 if (addresses.isEmpty()) { System.debug('账户 ' + relatedAccount.Name + ' 无联系点地址'); } else { // 检查是否有默认地址 boolean hasDefaultAddr = false; for (ContactPointAddress addr : addresses) { if (addr.IsDefault) { hasDefaultAddr = true; break; } } if (hasDefaultAddr) { System.debug('账户 ' + relatedAccount.Name + ' 已设置默认联系点地址'); } else { System.debug('账户 ' + relatedAccount.Name + ' 有联系点地址,但未设置默认'); } } }
关键说明
- 合并查询通过
Owner.Profile.UserLicense.LicenseDefinitionKey直接过滤许可证类型,减少数据库查询次数 - 子查询
(SELECT ... FROM Account.ContactPointAddresses)一次性获取账户的所有联系点地址,无需额外发起查询 - 遍历过程中依次判断账户存在性、地址存在性、默认地址状态,可根据业务需求替换debug逻辑为实际业务处理
内容的提问来源于stack exchange,提问作者I am not Fat
相关产品推荐
相关产品推荐

