鉴于: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的新手。谁能指出我做错了什么?
答案 0 :(得分: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)];
答案 1 :(得分: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);
}