0

我想在我的 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>

如果可能,请进行更正

4

3 回答 3

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'))))  } 

}
}
于 2013-05-07T10:31:14.023 回答
0

聚合结果(及其字段/列)以通用对象的形式出现,而不是 sObjects。因此没有 obj.get('somefieldname') 你可以调用它们。

您最好的选择可能是创建一个具有String email; Integer count;字段的帮助器类,并遍历查询结果以填充此帮助器类的对象列表。

您也可以使用Map<String, Integer>,但这会出现在 VF 中,因为它没有按字母顺序排序。

如果您需要代码示例,请参阅https://salesforce.stackexchange.com/questions/7412/count-a-grouped-by-soql 。

于 2013-05-07T10:11:20.857 回答
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>

谢谢,迈克尔

于 2014-09-22T13:39:34.060 回答