0

给定: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 有点陌生。谁能指出我做错了什么?

4

2 回答 2

2

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

为此,您可以先创建一个变量,然后使用 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)];
于 2018-03-12T18:08:52.287 回答
0

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

此外,该Contact对象包含AccountId自己的字段。因此,根据您的设置,您可能能够消除子查询。您可能还想过滤掉Email空字段,因为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);
}
于 2019-01-03T03:25:06.100 回答