Salesforce 视觉力量中的sObject?

Salesforce 视觉力量中的sObject?,salesforce,apex-code,visualforce,Salesforce,Apex Code,Visualforce,我有一个apex控制器,它建立一个列表,显示在数据表中。列表组合了不同的对象,因此我创建的变量是一个列表 假设此列表中的所有对象都有一个外部\uuC字段。我如何告诉视觉力量渲染这个场?使用{!obj.external_u_c}将不起作用,因为它是一个sObject 假设list属性在您的控制器中是这样声明的:Public list ColdOnes{get;set;}。在Visualforce中,您通过控制器中的属性名称引用啤酒。。。{!ColdOnes}。以下内容主要摘自Visualforce

我有一个apex控制器,它建立一个列表,显示在数据表中。列表组合了不同的对象,因此我创建的变量是一个列表


假设此列表中的所有对象都有一个外部\uuC字段。我如何告诉视觉力量渲染这个场?使用{!obj.external_u_c}将不起作用,因为它是一个sObject

假设list属性在您的控制器中是这样声明的:Public list ColdOnes{get;set;}。在Visualforce中,您通过控制器中的属性名称引用啤酒。。。{!ColdOnes}。以下内容主要摘自Visualforce指南,但我已对其进行了修改,以适应我们的主题:

<apex:dataTable value="{!ColdOnes}" var="co" id="theTable" rowClasses="odd,even" styleClass="tableClass">

    <apex:facet name="caption">table caption</apex:facet>

    <apex:facet name="header">table header</apex:facet>

    <apex:facet name="footer">table footer</apex:facet>

    <apex:column>

            <apex:facet name="header">Beer Name</apex:facet>

        <apex:facet name="footer">column footer</apex:facet>

        <apex:outputText value="{!co.name}"/>

    </apex:column>
    <apex:column>

            <apex:facet name="header">Alcohol Volume</apex:facet>

        <apex:facet name="footer">column footer</apex:facet>

        <apex:outputText value="{!co.alcohol_volume__c}"/>

    </apex:column>
</apex:dataTable>

好吧,我要去喝一品脱。希望有帮助

如果你有一个sobject列表,你可以使用obj.get'external_uc'获得一个公共字段,尽管你通常必须将结果转换为一个类型才能使用它

您可以在代码中创建自定义类,该类可以填充各种对象:

// inside the controller do this:
public class COutputObject
{
    private SObject sObj = null;
    public  string  strField get {return (string)sObj.get('external__c'); }

    public COutputObject(SObject s)
    {
        sObj = s;
    }
}

// -- snip --

// then have a list of these which you'll loop over in the page
public list<COutputObject> liObjects = new list<COutputObject>();

// fill this with data
for(CustomObj__c sCustom : [select Id, external__c from CustomObj__c limit 200])
{
    liObjects.add(new COutputObject(sCustom));
    // etc.

for(CustomObj2__c sCustom : [select Id, external__c from CustomObj2__c limit 200])
{
    liObjects.add(new COutputObject(sCustom));
    // etc.

不是100%确定我在getter上的语法是否正确,但是很接近;希望这能帮助你实现你的目标

哦,等等,你是说名单上有主题吗?现在这是另一回事了。。。与其使用sObject,不如使用一个“一网打尽”的自定义对象,在对象分类之间使用公共字段,创建所述自定义对象的列表,然后将sObject列表重新转换为相关自定义对象的列表?我的意思是,我从来没有尝试过,但理论上应该是可行的。。。不管怎么说,我这次要走了,没错,呜咽。正如你提到的,我使用了“一网打尽”的定制对象思想,但是我们的客户机出现了问题。他们遇到的问题是,只有安装用户才能在托管包中创建自定义对象。我希望用sObject代替它可以缓解这个问题。我假设控制器是一个共享类?你的客户在哪个版本?如果他们在Enterprise或Unlimited上,他们可以通过配置文件为自定义对象及其字段设置CRUD。如果他们是专业人士,我想你必须找到一个解决办法。假设“with sharing”问题的答案是肯定的,尝试将相关属性/方法设置为静态。由于静态是在创建类之前初始化的,因此您应该能够解决crud问题,前提是该问题对于代码的其余部分是可伸缩的。事实证明,问题在于安装后需要手动部署包。。。我原以为会出现错误,说无法访问对象,因为它未部署,但并没有反馈。哦,好吧,至少我们不需要做一些变通:/谢谢你的帮助
// inside the controller do this:
public class COutputObject
{
    private SObject sObj = null;
    public  string  strField get {return (string)sObj.get('external__c'); }

    public COutputObject(SObject s)
    {
        sObj = s;
    }
}

// -- snip --

// then have a list of these which you'll loop over in the page
public list<COutputObject> liObjects = new list<COutputObject>();

// fill this with data
for(CustomObj__c sCustom : [select Id, external__c from CustomObj__c limit 200])
{
    liObjects.add(new COutputObject(sCustom));
    // etc.

for(CustomObj2__c sCustom : [select Id, external__c from CustomObj2__c limit 200])
{
    liObjects.add(new COutputObject(sCustom));
    // etc.