【请教阿泰】水晶报表参数传递下一页参数丢失问题
阿泰你好,早就从网上知道你是报表方面的专家,现在在搞报表,需要用到参数字段,遇到点问题,还请指教。
这是我报表Details.rpt中已经建立的参数字段,其中第7个字段用来获取客户。
下面是我在JSP页面中获取传递进来的参数,赋给相应的参数字段。代码如下:
ReportClientDocument clientDoc = rptAppFactory.openDocument(oInfoObject,0,Locale.ENGLISH);
// Set report parameters.
Fields paramCollection = clientDoc.getDataDefinition().getParameterFields();
// Set Matrix URL
clientDoc.getDataDefController().getParameterFieldController().setCurrentValue("", paramCollection.getField(0).getName(), webAppServer);
// Set session cookie for Matrix authentication
clientDoc.getDataDefController().getParameterFieldController().setCurrentValue("", paramCollection.getField(1).getName(), reportSession);
// Clear Matrix username
clientDoc.getDataDefController().getParameterFieldController().setCurrentValue("", paramCollection.getField(2).getName(), "");
// Clear Matrix password
clientDoc.getDataDefController().getParameterFieldController().setCurrentValue("", paramCollection.getField(3).getName(), "");
clientDoc.getDataDefController().getParameterFieldController().setCurrentValue("", paramCollection.getField(4).getName(), rptParam);
clientDoc.getDataDefController().getParameterFieldController().setCurrentValue("", paramCollection.getField(5).getName(), "");
//strClient为String类型,保存用户已输入的客户名
clientDoc.getDataDefController().getParameterFieldController().setCurrentValue("", paramCollection.getField(6).getName(),strClient);
clientDoc.getDataDefController().getParameterFieldController().setCurrentValue("", paramCollection.getField(7).getName(), "");
clientDoc.getDataDefController().getParameterFieldController().setCurrentValue("", paramCollection.getField(8).getName(), "");
clientDoc.getDataDefController().getParameterFieldController().setCurrentValue("", paramCollection.getField(9).getName(), "");
clientDoc.getDataDefController().getParameterFieldController().setCurrentValue("", paramCollection.getField(10).getName(), "");
// Pass the report to the viewer
CrystalReportViewer viewer = new CrystalReportViewer();
viewer.setEnterpriseLogon(es);
viewer.setName(rptParam);
viewer.setOwnForm(true);
viewer.setOwnPage(true);
viewer.setPrintMode(CrPrintMode.PDF);
// Set the source for the viewer to the client documents report source
viewer.setReportSource(clientDoc.getReportSource());
viewer.setParameterFields(paramCollection );
viewer.setEnableParameterPrompt(false);
viewer.setReuseParameterValuesOnRefresh(false);
/*这个if语句是从网上看的,说是要刷新。加了话,第一页加载时,报错:缺少参数值。 如果不加,可以显示第一页,点击下一页,错误代码:com.crystaldecisions.sdk.occa.report.lib.ReportSDKParameterFieldException: The types of the parameter field and parameter field current values are not compatible.---- Error code:-2147213303 Error code name:invalidParameterField */
if(session.getAttribute("refresh")==null){
viewer.refresh();
session.setAttribute("refresh","true");
}
viewer.processHttpRequest(request, response, getServletConfig().getServletContext(), out);
在线等。。。我的邮箱naturelau01@163.com。谢谢!!!
[最优解释]
我不太清楚jsp的处理机制,不过下面这段是不对的。
if(session.getAttribute("refresh")==null){
viewer.refresh();
session.setAttribute("refresh","true");
}
你可以参考下.Net下的处理方法(下文中的第2节)
http://topic.csdn.net/u/20090713/18/6e14bf28-1979-4ade-9c60-aaf09284553d.html
下一页时,页面重新刷新了,所以需要在下一个页面生命周期重新给予参数或者是进行状态保持。
[其他解释]
我对JSP也不是很熟悉,看了你发的链接,把报表对象放到session里,然后在页面加载方法里重新赋给查看器。不知道JSP有没有类似的加载方法!谢谢你啦!
[其他解释]
我也遇到这问题了,能详细给出答复吗?