我遇到了一个奇怪的问题wherby我有一个(非常复杂的)VisualForce页面,我在运行时传递了几个参数。这个页面运行正常。
Example URL: https://force.com/apex/medicalforecast?t=SUMMARY&y=2013
但是,如果我使用以下代码将其嵌入到另一个简单的visualforce页面中,我会收到“System.LimitException:Too many query rows:50001”错误。
<apex:page sidebar="false">
<apex:include pageName="MedicalForecast" />
</apex:page>
Example URL: https://force.com/apex/Forecast?t=SUMMARY&y=2013
任何人都可以解释这种行为吗?将一个VisualForce页面嵌入另一个VisualForce页面时是否会运行其他查询?
谢谢
答案 0 :(得分:2)
阅读http://www.salesforce.com/us/developer/docs/pages/Content/pages_controller_get_request.htm
特别是那部分:
- 调用关联的自定义控制器或控制器扩展类上的构造函数方法,实例化控制器 对象。
- 如果页面包含任何自定义组件,则会在任何关联的自定义控制器上创建它们和构造函数方法 控制器扩展已执行。
醇>
因此,在第一个初始请求中,主页面的构造函数(和getter)以及所有嵌入的页面/组件将触发以呈现初始状态。这意味着它是所有一个事务,一个上下文和50K行限制在它们之间共享。
也许您可以使用readonly="true"
注释您的网页,或者尝试让构造函数变得苗条(不要浪费太多查询)。放一个“获取数据”按钮&amp;动作方法 - 用户必须再单击一次,但这将被视为单独的动作=新的50K行限制。