点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
大家好
我遇到一个奇怪的问题,数据库登录提示仅出现在第二页(导航下一页)上。 我正在使用Visual Studio 2019社区版和Crystal Reports 13,更新27支持VS2019。 在针对表进行报告时,我没有这个特殊的问题,但是存储过程接受多个参数,并且过程中的选择引用了多个视图。 为了更容易理解:
- 我有两个数据库
- 生产和测试
- " sa"在两个数据库上都具有完全访问权限
- 在测试数据库上创建报告的视图/过程
- 在IDE中设计报告和进行审核时,我没有任何问题。 登录提示仅在调试和发布后出现。
该报告的调用方式如下
受保护的空白Page_Load(对象发送者,EventArgs e) { 如果(!IsPostBack) { ReportDocument reportDocument = new ReportDocument(); reportDocument.Load(Server.MapPath(@"〜/CrystalReport2.rpt")); reportDocument.SetParameterValue(0,2020); reportDocument.SetParameterValue(1,1); reportDocument.SetParameterValue(2,3); reportDocument.SetParameterValue(3," 1"); reportDocument.SetParameterValue(4," 1"); ConnectionInfo connectionInfo =新的ConnectionInfo { DatabaseName ="测试", UserID =" sa", 密码="密码", ServerName =" RAJESH-PC" }; SetDBLogonForReport(connectionInfo,reportDocument); CrystalReportViewer1.Visible = true; CrystalReportViewer1.ReportSource = reportDocument; } }
和SetDBLogonForReport方法如下:
私有无效SetDBLogonForReport(ConnectionInfo connectionInfo,ReportDocument rpt) { foreach(rpt.Subreports中的ReportDocument subRpt) { foreach(subRpt.Database.Tables中的表crTable) { Response.Write(crTable.Name); crTable.LogOnInfo.ConnectionInfo.AllowCustomConnection = true; TableLogOnInfo logInfo = crTable.LogOnInfo; logInfo.ConnectionInfo = connectionInfo; 尝试 { crTable.ApplyLogOnInfo(logInfo); } 抓住(前例外) { Response.Write(ex.Message); } } } foreach(rpt.Database.Tables中的表crTable) { Response.Write(crTable.Name); crTable.LogOnInfo.ConnectionInfo.AllowCustomConnection = true; TableLogOnInfo loi = crTable.LogOnInfo; loi.ConnectionInfo = connectionInfo; 尝试 { crTable.ApplyLogOnInfo(loi); } 抓住(前例外) { Response.Write(ex.Message); } } }
虽然在没有数据库登录提示的情况下执行单页报告,但经过2天的不懈努力寻找解决方案后,我有点完全迷失了。
致谢
rajesh
感谢戴尔
我修复了链接。
更好的一个可能也是这个:
1985571-如何使用Crystal Reports查看器在Web应用程序中使用会话(完整代码)
https://launchpad.support.sap.com/#/notes/1985571
@ Rajesh,并将您的代码从Page_Load移到Page_Init,页面加载仅被调用一次。 MS早已发生了变化,所以现在所有页面刷新现在都由Page Init调用。
Don
问候 Dell Stinnett-Christy
抱歉,回复延迟。 好吧,Don共享的链接通常指向SAP文档? 此注释是为了更新线程。 最后,我弄清楚了Crystal Reports中推荐的"会话"和page_init如何工作并成功完成了我的项目。
我将尽快发布样本作为答案。 再次感谢。
致谢
rajesh
如果这是一个Web应用程序,则需要将报告存储在会话变量中。 过去在Crystal for VS Wiki上有一个有关如何执行此操作的说明的链接,但此链接当前不起作用。
Don Williams ,Wiki中指向知识库文章2007224的链接不起作用-是否有此版本的新版本?
-Dell
# p#感谢 Dell Stinnett-Christy 和 Don Williams 供您输入。 我发现回发导致报表提示输入数据库凭据,并设法将其提供给报表查看器,从而永久停止了行为。 这是我第一次在Visual Studio/Web应用程序中使用Crystal Reports,并且在此锁定期间,几乎没有其他技术支持站点的答复。
感谢您的时间和答复。
致谢
Rajesh
整个解决方案在此处发布。 这可能会帮助其他少数情况相同的人。
https://stackoverflow。 com/questions/61998462/crystal-report-on-asp-c-sharp-application-postback-issues
致谢
Rajesh
按照建议使用"会话"和" page_init"解决此要求。 请注意,我的应用程序需要在生成报告之前从最终用户收集很多输入,并且许多文本输入都将Autopostback设置为true。 每当发生自动回发时,Crystal Report都会刷新,因此我建议在Web表单中使用尽可能少的启用自动回发的输入字段。
示例ASP页面