组合列表中的多个对象

时间:2011-11-16 19:08:27

标签: salesforce apex-code visualforce

我希望使用apex创建一个单独的sObject类型记录列表,以显示到自定义的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;
     }
} 

如何填写ContactsAndCases列表?

3 个答案:

答案 0 :(得分:4)

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>

答案 1 :(得分:1)

Jeremy的包装课是你想要的。此外,您将首先生成基于SOQL的对象列表,然后循环创建包装器列表的新包装器实例(在本例中为ContactsAndCases),其中包含来自联系人和案例的值。

答案 2 :(得分:1)

也许我错过了一些东西,但你不能简单地收集它们:

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

然后,您可以将任何通用SObject添加到该列表中。