我想在Visualforce页面上显示AggregateResult,但它产生以下错误" Invalid field Email for SObject AggregateResult"
以下是我的代码:
public with sharing class searchDuplicate {
public AggregateResult[] con{get;set;}
public searchDuplicate()
{
find();
}
public void find(){
con = [select Email from Contact group by Email having count(Email) > 1];
System.debug(con);
}
}
以下是我的 visualforce 页面代码:
<apex:page controller="searchDuplicate">
<apex:pageBlock title="Searching for Duplicate Contacts Record">
</apex:pageBlock>
<apex:pageBlock title="Contacts">
<apex:dataTable value="{!con}" var="c" border="2" cellspacing="5" cellpadding="5">
<apex:column headerValue="Email" value="{!c['Email']}" />
</apex:dataTable>
</apex:pageBlock>
</apex:page>
请尽可能进行更正
答案 0 :(得分:2)
public with sharing class searchDuplicate {
public list <con> conList{get;set;}
public class con{
public string Email {get;set;}
public con( string email){
this.Email = email;
}
}
public searchDuplicate()
{
find();
}
public void find(){
conList = new list <con>();
for( AggregateResult ar : [select Email from Contact group by Email having count(Email) > 1];){ conList.add(new con(string.valueOf(ar.get('Email')))) }
}
}
答案 1 :(得分:0)
聚合结果(及其字段/列)是通用对象,而不是sObject。因此,没有obj.get('somefieldname')可以调用它们。
您最好的选择可能是创建一个包含String email; Integer count;
个字段的辅助类,并遍历查询结果,填充此辅助类的对象列表。
您也可以使用Map<String, Integer>
,但这不会按字母顺序排列到VF。
如果您需要代码示例,请参阅https://salesforce.stackexchange.com/questions/7412/count-a-grouped-by-soql。
答案 2 :(得分:0)
虽然其他答案在解决您的问题时是正确的,但您所拥有的实际上是SalesForce中的一个错误。
在不创建自定义对象的情况下解决此问题的方法是将其分成两部分 - 设置的“headerValue”和“value”都会导致此错误。
您想将其更改为:
<apex:dataTable value="{!con}" var="c" border="2" cellspacing="5" cellpadding="5">
<apex:column headerValue="Email" >
<apex:outputText>{!c['Email']}</apex:outputText>
</apex:column>
</apex:dataTable>
谢谢, 迈克尔