Объедините несколько объектов в списке

Я хочу создать единый список записей различных типов sObject, используя apex для отображения на пользовательской странице visualforce. Мне интересно, есть ли способ объединить несколько объектов (кейс, возможность, аккаунт и т. Д.) В один список. Если нет, как вы добавляете второй объект к первому в списке, используя код Visualforce? Есть ли лучшая практика?

Спасибо


Так что я мог бы использовать немного больше помощи, чтобы завершить это. Я написал это:

public class MyController {

    public List<ContactAndCase> ContactsAndCases { get; set; }

    public Opportunity TheOpp{
        get {
        TheOpp = [select Id FROM Opportunity];
        return TheOpp;
        }
        set;
     }
     public Case TheCase{
        get {
        TheCase = [select Id FROM Case];
        return TheCase;
        }
        set;
     }
} 

Как мне заполнить список контактов и дел?

3 ответа

Компонент VisualForce выполняет итерацию по одному списку. Тип списка, например List<Lead>, определяет, какие данные могут быть визуализированы компонентом VF.

Чтобы отобразить списки разных типов, у вас может быть отдельный компонент VF для каждого типа, например:

<apex:pageBlockTable value="{!contacts}" var="contact">
...
</apex:pageBlockTable>
<apex:pageBlockTable value="{!cases}" var="case">
...
</apex:pageBlockTable>

Или вы можете создать новый тип, который содержит экземпляры разных типов. Вот пример контроллера:

public class MyController {
    public List<ContactAndCase> ContactsAndCases { get; set; }

    public MyController() {
        ContactsAndCases = new List<ContactAndCase>();
        // populate ContactsAndCases list
    }

    public class ContactAndCase {
        public Contact TheContact { get; set; }
        public Case TheCase { get; set; }
    }
}

Затем вы можете перебрать List<ContactAndCase>:

<apex:pageBlockTable value="{!ContactsAndCases}" var="item">
    <apex:column value="{!item.TheContact.LastName}" />
    <apex:column value="{!item.TheCase.CaseNumber}" /> 
</apex:pageBlockTable>

Может быть, я что-то упустил, но не могли бы вы просто собрать их в:

List<SObject> objects = new List<SObject>();  

Затем вы можете добавить любой общий SObject в этот список.

Класс Джереми - это то, что вы хотите. Кроме того, вы сначала сгенерируете списки объектов, которые вы хотите, на основе SOQL, а затем выполните цикл, чтобы создать новые экземпляры обертки для вашего списка обертки (в данном случае ContactsAndCases), содержащие значения как из контактов, так и из дел.

Другие вопросы по тегам