我想将SOQL查询传递给某个页面,或者让用户自己在页面上输入它,处理它,然后在表格中显示结果。
最大的问题是显示结果,因为VF动态绑定似乎只能工作一层深度,之后它会给出空指针异常(似乎是SF中的一些错误)。
我有一个动态主对象,其中包含来自查询的多个相关列表,例如:用户可能正在提取帐户列表,包含所有相关联系人以及所有相关机会。以下是一个示例查询:
从帐号中选择ID,姓名,BillingState,(从通讯录中选择ID,姓名,标题),(从商机中选择ID,金额),其中名称为'%Corp%'
另一次,查询可能位于完全不同的父对象上,例如:
从商机限额20
选择ID,名称,accountId,(选择ID,来自OpportunityLineItems的费用),(从附件中选择ID,名称)从查询中解析字段和对象名称不是问题,但使用动态绑定在VF页面上的表中显示这些结果是一场噩梦,并不适合我。有任何想法吗?或者您可能已经在某处看到了针对这种特定情况的VF代码?
作为旁注,下面是我在尝试使用动态绑定时在VF页面上遇到的错误
错误:java.lang.NullPointerException
错误:null
答案 0 :(得分:1)
在这些情况下,我总是依赖于对象关系映射器模式,或者简称为包装器类。对于较棘手的字段,最终显示的是单级,类成员抽象,而不是直接来自SOQL语句结果的字段。这样做的一个好处是,您可以简单地执行一些SOQL调用,以最能支持您的页面的任何方式准备数据,然后平滑地呈现它。拥有这个抽象类的额外工作最终得到了很好的回报 - imo。
这是related post ,它显示了如何在Apex中执行此操作。在您的情况下,您将扩展此示例以将多个SObject的值添加到此“ORM样式”类的一个实例,然后从Apex中填充它的实例列表。这个自定义对象实例列表成为Visualforce消费的完美食物。