Salesforce 在列表中组合多个对象

Salesforce 在列表中组合多个对象,salesforce,apex-code,visualforce,Salesforce,Apex Code,Visualforce,我希望使用apex创建各种sObject类型的记录列表,以显示到自定义visualforce页面。我想知道是否有一种方法可以在一个列表中组合多个对象(案例、机会、帐户等)。如果没有,如何使用visualforce代码将第二个对象附加到列表中的第一个对象?是否有最佳实践 谢谢 所以我需要更多的帮助来完成这项工作。我写过这样的话: public class MyController { public List<ContactAndCase> ContactsAndCases

我希望使用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;
     }
} 
公共类MyController{
公共列表联系人和案例{get;set;}
公共机会{
得到{
TheApp=[从Opportunity中选择Id];
返回TheOpp;
}
设置
}
公案{
得到{
案例=[从案例中选择Id];
返回案例;
}
设置
}
} 

如何填写Contacts和Cases列表?

VisualForce组件在单个列表上迭代。列表的类型(例如,
List
)决定了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; }
    }
}
公共类MyController{
公共列表联系人和案例{get;set;}
公共MyController(){
Contacts和Cases=新列表();
//填充联系人和案例列表
}
公共类ContactAndCase{
公共联系人联系人{get;set;}
公共案例案例案例{get;set;}
}
}
然后,您可以迭代
列表



Jeremy的包装器类就是您想要的。此外,您将首先生成所需对象的基于SOQL的列表,然后循环创建包含联系人和案例值的包装器列表(本例中为contacts和cases)的新包装器实例。

可能我遗漏了一些内容,但您不能简单地将它们收集到:

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

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

谢谢你的帮助。不过我还没完全弄对。请澄清第二个选项好吗?我添加了一个控制器,并将ContactAndCase类作为控制器的内部类。这有意义吗?再次感谢。我开始明白了。我挂断了获取集与使用查询填充列表的关系。我想我应该使用一些查询来填充一个列表,然后显示该列表。你能澄清一下吗?我试过自己的问题。它可以编译,但不会向屏幕显示任何内容。有什么想法吗?Apex属性(get和set)与数据的来源无关。您可能仍然希望执行一些查询,以获取您的联系人和案例记录,或者任何您想要显示的对象。
List<SObject> objects = new List<SObject>();