Как отобразить результаты агрегированного запроса SOQL на странице Visualforce? - PullRequest
2 голосов
/ 15 декабря 2011

Я очень плохо знаком с Visualforce.

Я смотрю на эту страницу здесь: http://force.siddheshkabe.co.in/2010/11/displaying-aggregate-result-on.html

Поэтому, когда я добавил этот код на страницу VisualForce:

  AggregateResult[] groupedResults  = [SELECT Name, Days__c FROM Contact WHERE Days__c != ];

  for (AggregateResult ar : groupedResults)  {
    System.debug('Name: ' + ar.get('Name') + '\nDays Taken : ' + ar.get('Days__c') + '\n');

Но все, что он делает, это печатает код, а не выполняет его. Что мне делать? Спасибо за любые рекомендации.

1 Ответ

16 голосов
/ 15 декабря 2011

Код Apex входит в пользовательский контроллер или расширение контроллера . Страница VisualForce - это отдельный файл от контроллера. Страница, на которую вы ссылались, не показывает страницу VF. Кроме того, я не думаю, что вы можете связать компоненты VF с AggregateResult, поэтому вам понадобится класс-оболочка.

Вот рабочий код.

Контроллер:

public with sharing class TestController {

    public Summary[] Summaries { get; set; }

    public TestController() {
        AggregateResult[] results = [
            SELECT Name, Count(Id) Quantity FROM Opportunity GROUP BY Name
        ];
        Summaries = new List<Summary>();
        for (AggregateResult ar : results) {
            Summaries.add(new Summary(ar));
        }
    }

    // wrapper class to hold aggregate data
    public class Summary {
        public Integer Quantity { get; private set; }
        public String Name { get; private set; }

        public Summary(AggregateResult ar) {
            Quantity = (Integer) ar.get('Quantity');
            Name = (String) ar.get('Name');
        }
    }

}

Страница VF:

<apex:page controller="TestController">
    <apex:form >
        <apex:repeat value="{!Summaries}" var="summary">
            {!summary.Name}: {!summary.Quantity}<br/>
        </apex:repeat>
    </apex:form>
</apex:page>
...