代码之家  ›  专栏  ›  技术社区  ›  to_the_nth

以列表形式获取当前活动帐户的联系人电子邮件

  •  0
  • to_the_nth  · 技术社区  · 6 年前

    给定:Salesforce用户正在查看帐户页。

    所需输出:与当前作为列表对象查看的帐户相关的所有联系人电子邮件。

    我的代码:

    SELECT Email FROM Contact WHERE Id IN (SELECT ContactId FROM AccountContactRelation WHERE AccountId = ApexPages.CurrentPage.getParameters().get('id'))
    

    这不会检索任何结果。使用固定数字而不是 ApexPages.CurrentPage.getParameters().get('id') ,电子邮件已正确返回。

    我对Apex有点陌生。有人能指出我做错了什么吗?

    2 回复  |  直到 5 年前
        1
  •  2
  •   Tiaan Swart    6 年前

    要获得所需的输出,需要使用SOQL变量注入。

    您可以通过先创建一个变量,然后使用 : 变量名称:

    String theAccountId = ApexPages.CurrentPage.getParameters().get('id');
    List<Contact> theContacts = [SELECT Email FROM Contact WHERE Id IN (SELECT ContactId FROM AccountContactRelation WHERE AccountId = :theAccountId)];
    
        2
  •  0
  •   Grant Miller    5 年前

    您可以使用带有绑定变量的静态查询来检索正确的结果。

    此外 Contact 对象包含 AccountId 它自己的领域。因此,根据您的设置,您可能能够消除子查询。您可能还想过滤掉 Email 字段为空,因为 电子邮件 不是必填字段。

    完整的结果可能如下所示:

    String accountId = ApexPages.CurrentPage.getParameters().get('id');
    
    List<Contact> accountContactsEmailList = [
      SELECT
        Email
      FROM
        Contact
      WHERE
        Email != ''
        AND AccountId = :accountId
    ];
    
    for (Contact contact : accountContactsEmailList) {
      System.debug(contact.Email);
    }