VisualForce中SObject AggregateResult的无效字段电子邮件

时间:2013-05-07 08:23:28

标签: salesforce apex-code visualforce

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

请尽可能进行更正

3 个答案:

答案 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>

谢谢, 迈克尔