You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 10:16:16