преобразование salesforce из sObject в настраиваемый объект

Я написал базовый контроллер, который хочу использовать для управления разбивкой данных на страницы на контроллерах серверов.

У меня такой абстрактный метод

 public abstract List<sObject> getPagedData();

Затем каждый из моих контроллеров, расширяющих базовый контроллер, реализует свою собственную версию getPagedData. Но верните конкретный объект клиента, например Foo__c

Могу ли я транслировать с List<sObject> на List<Foo__c> на странице visualforce

Моя страница выглядит так

  <apex:dataTable value="{!PagedData}"  var="c"   >
     <apex:column > 
          <apex:facet name="header">Foo</apex:facet>
          <apex:outputText value="{!c.Bar__r.SomeValue__c]}" />
  </apex:column>   

Но я получаю сообщение об ошибке, которое sObject не знает о Bar__r Я пытался выполнить Cast со значением dataTable и внутри outputText, но похоже, что это не работает.

Я могу использовать динамические привязки http://www.salesforce.com/us/developer/docs/pages/Content/pages_dynamic_vf.htm, но как мне делать такие вещи, как

<apex:outputText value="{0, number, $###,###}">
         <apex:param value="{!c.Amount__c}" />
</apex:outputText>
<apex:outputText value="{0,date,dd/MM/yyyy}">
          <apex:param value="{!c.Date_Of_Birth__c}" />
</apex:outputText>   

Поскольку я получаю ошибки, говоря, что он ожидает объект DateTime и т. Д.


person Daveo    schedule 03.06.2011    source источник


Ответы (1)


Был там. К сожалению, нет возможности приводить объекты непосредственно на странице visualforce.

Я решил эту проблему: переместить всю логику разбиения на страницы в ваш базовый контроллер в общей форме, а затем дать дочерним контроллерам взять на себя ответственность за приведение данных в форму, которую ожидает ваша страница visualforce.

public List<Foo__c> getFooPagedData() {
    List<Foo__c> fooPagedData = new List<Foo__c>();
    for(SObject record : getPagedData()) {
       fooPagedData.add((Foo__c) record));
    }
    return fooPageData;
}

Вы также можете рассмотреть возможность использования StandardSetController для управления разбивкой на страницы. . Он отлично работает с настраиваемыми объектами и большинством стандартных объектов, но не с настраиваемыми ApexClasses и некоторыми стандартными объектами. Тем не менее, вам все равно нужно будет привести свой набор результатов, поскольку он возвращает список из своего метода getRecords ().

person Ralph Callaway    schedule 03.06.2011
comment
Спасибо, я уже использую StandardSetController и выполняю такой метод, как вы показали. Мне это показалось немного грязным, как взлом, и я подумал, что есть более чистый способ сделать это - person Daveo; 04.06.2011
comment
Я с тобой. Я бы хотел, чтобы StandardSetController был параметризован так, чтобы getRecord () возвращал правильный тип. Увы, шаблон был выбран не так. - person Ralph Callaway; 06.06.2011
comment
Я согласен с Ральфом, нет возможности передать данные в VF на основе определенного типа. - person Chirag Mehta; 06.06.2011