2013-05-07 2 views
0

Я хочу, чтобы отобразить AggregateResult на моей странице Visualforce но генерирует следующее сообщение об ошибке " Invalid field Email for SObject AggregateResult"Недопустимое поле Email для SObject AggregateResult в Visualforce

Ниже мой код:

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> 

любезно сделать коррекцию, если это возможно

ответ

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

} 
} 
0

Совокупные результаты (и их поля/столбцы) являются универсальными объектами, а не sObjects. Поэтому нет obj.get ('somefieldname'), на которое вы можете позвонить.

Ваш лучший вариант может заключаться в том, чтобы создать вспомогательный класс с полями String email; Integer count; и просмотреть результаты запроса, заполнив список объектов этого вспомогательного класса.

Вы также можете использовать Map<String, Integer>, но это пришло бы в VF как не отсортированное в алфавитном порядке.

См. https://salesforce.stackexchange.com/questions/7412/count-a-grouped-by-soql, если вам нужен образец кода.

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> 

Спасибо, Майкл

Смежные вопросы