簡體   English   中英

salesforce 從 sObject 轉換為自定義 object

[英]salesforce cast from sObject to custom object

我寫了一個 Base controller ,我想用它來管理服務器控制器上的數據分頁。

我有一個像這樣的抽象方法

 public abstract List<sObject> getPagedData();

然后我的每個擴展基礎 controller 的控制器實現自己的 getPagedData 版本。 但返回特定客戶 object 例如Foo__c

我可以在 visualforce 頁面中從List<sObject>轉換為List<Foo__c>

我的頁面看起來像這樣

  <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我嘗試使用 dataTable 值和 outputText 內部進行 Cast 但它似乎不起作用

我可以使用動態綁定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 object 等

到過那里。 不幸的是,沒有辦法直接在 visualforce 頁面中投射對象。

我解決這個問題的方法是將所有分頁邏輯以通用形式移動到您的基本 controller 中,然后讓子控制器負責將數據轉換為您的 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() 方法返回 List 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM