【问题标题】:Display results of unknown SOQL query显示未知 SOQL 查询的结果
【发布时间】:2013-02-28 10:22:24
【问题描述】:

我有一个要求,我想知道它是否可行。我有 visualforce 页面,它将显示 SOQL 查询的结果,但是 SOQL 查询是动态的,可能是对自定义对象或标准对象的查询。我目前正在将 SOQL 查询硬编码到控制器类中,同时试图弄清楚它是如何工作的。我打算在 Apex 的 pageBlockTable 或 dataTable 中显示 SOQL 查询的结果。

这在 Salesforce 中是否可行,如果可以的话,谁能给我一个在 Visualforce 和 Apex 中如何工作的示例?

【问题讨论】:

    标签: salesforce apex-code visualforce


    【解决方案1】:

    您应该阅读“动态引用”(也称为“动态绑定”)。一个好的起点:http://www.salesforce.com/us/developer/docs/pages/Content/pages_dynamic_vf_sample_standard.htm

    基本上如果你有String fieldName = 'AccountNumber';,以后在Visualforce中你可以直接引用它:

    <apex:outputField value="{!a.AccountNumber}"> 或动态:

    <apex:outputField value="{!a[fieldName]}">.

    这类似于在 Apex 中使用 a.AccountNumbera.get('AccountNumber')。如果您从未见过,请查看例如 getting Value of a field by its Name in apex salesforce


    您必须小心它们,因为如果您的基础对象不是帐户,它将失败(例如,没有Contact.AccountNumber 字段)。上面的示例仅涉及帐户,但无论如何它都是一个很好的介绍。

    一旦您熟悉了基本概念,您就可以探索 fieldsets 的世界 - 应该组合在一起的预定义字段组 - 您可以将它们用于显示和查询数据,基本上它们比硬编码列表更强大带有字段名称的字符串(如在第一个链接中)但仍然是相同的想法。

    至少您现在会知道要查找哪些关键字;)

    【讨论】:

    • 太好了,谢谢眼霜。我知道当我知道我正在查询的对象时这将如何工作,但在这种情况下,被查询的对象也是动态的。例如,我的控制器是一个 customReportController,通过它我将在页面上有多个引用不同对象的报告,要运行的 SOQL 存储在自定义报告对象的一个​​字段中。考虑到这一点,这还有可能吗?
    • 应该是,任何东西都可以向下转换为 sObject 等等 - 查询结果也可以是 List<sObject> ... get/put 方法也属于基本 sObject 类,而不是“Account”等。我隐约记得,当存储的实际数据不是字符串而是日期(主要是格式问题)时,它需要更加小心。但通常动态输出工作正常,动态输入字段有时可能很棘手。如果您遇到任何障碍,也许只是尝试一下并用一些代码更新您的问题?
    • 感谢眼霜的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 2022-10-20
    • 1970-01-01
    相关资源
    最近更新 更多