点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我正在从Crystal Report Server 2008升级到Crystal Report Server 2013。 事实证明,我需要更新Java应用程序中CRS 2013随附的CRS Java SDK参考。 但是在下面的CreateFileInPathLocation方法中执行此代码行之后: InputStream byteAryIS =(InputStream)reportClientDocument.getPrintOutputController()。export(fileType); 我收到ReportSDKException错误,"无法创建临时文件"。 通过搜索(https://archive.sap.com/discussions/thread/3601870),我发现这是一个通用错误,并打开了Crystal Report Server中Report Application Server/服务的日志记录。 在Report Application Server日志文件中,我发现以下消息: ErrorLog 2019 3 5 13:52:00.815 8740 9152(管理员:131)(.. \ reporthandler.cpp:12716):CReportHandler :: buildReportViewerError:抛出CSResultException。 ErrorSrc:" CRPE"文件名:" .. \ reporthandler.cpp" LineNum:12712 ErrorCode:756 ErrorMsg:"无法打开连接。 无法打开连接。 {0E023B57-EBD6-4E5F-87CF-9BAAF2B6C464} .rpt" DetailedErrorMsg:"" 。\ dts \ dts.cpp:2313:-:TraceLog消息2167046 | 22e906a8-2bb0-9bf4-ca2f-11eee888cd0d | 2019 03 05 13:52:00:815 | -0800 |信息| | == | | | rptappserver_UTMSRV12.CrystalReports2013ReportApplicationServer | 8740 | 9152 || |||||||||||||||||||||| ErrorLog 2019 3 5 13:52:00.815 8740 9152(管理员:131)(.. \ cdtsagent.cpp:3429):CDTSagent :: doOneRequest reqId = 134:<-详细信息开始-分析服务器:0x80004005 .. \ cdtsagent.cpp(3427) 通讯:0x80070003 该系统找不到指定的路径。 -详细信息末尾-> 我尝试过的事情: 1)在下面的LoginToReport方法中,我尝试了3种不同的登录过程,但仍然收到错误。 我在方法中添加了3个不同的登录过程,并注释掉其中2个。 前两个登录过程适用于Crystal Report Server2008。第三个过程是我尝试的新过程。 我不知道这是否适用于Crystal Report Server 2008。 2)我在CRS中央管理控制台>文件夹>所有文件夹> Crystal Reports中注册了Crystal Report文件; 右键单击" Crystal Reports">"添加">"本地文档"。 我试图添加到类别,但也跳过了它。 3)在CreateFileInPathLocation方法中,我还将reportClientDocument.getPrintOutputController()。export(fileType)的返回对象从ByteArrayInputStream更改为InputStream。 我从https://archive.sap.com/discussions/thread/3625853阅读 4)我研究了这些可能的解决方案。 a)https://archive.sap.com/discussions/thread/3750801->它与我无关,因为我尝试生成的报告只有7行数据。 b)https://answers.sap.com/questions/204347/reportsdkexception-can-not-create-temp-file-missin.html-我的代码设置了ReportClientDocument对象的参数,并且此链接没有答案。 c)https://archive.sap.com/discussions/thread/3791652-这没有答案。 d)https://archive.sap.com/discussions/thread/2103693 - 我有同样的问题。 我的代码没有超出导出方法。 产生相同的错误。 -我检查了%DefaultDataDir%/CrystalReportsRasServer/temp文件夹。 用户对文件夹具有读/写权限。 e)https://archive.sap.com/discussions/thread/3672135-他的解决方案是删除参数。 需要参数。 我的代码如下所示: 字符串aps =" SERVER1:6400"; 字符串userName =" UserName1"; 字符串密码=" Password1"; 字符串auth =" secEnterprise"; 字符串reportName =" reportName1"; 字符串outputFileWithPath =" C:\\ PDF Storage \\ fileName1.pdf"; 字符串libraryName =" Library1"; 字符串approveDateBeginRange =" '05/20/2013'"; 字符串approveDateEndRange =" '05/20/2013'"; //尝试登录到Crystal Report Server。 ISessionMgr sessionMgr = CrystalEnterprise.getSessionMgr(); IEnterpriseSession enterpriseSession = sessionMgr.logon(userName,password,aps,auth); //获取报表对象 IInfoStore iInfoStore =(IInfoStore)enterpriseSession.getService(" InfoStore"); IInfoObjects iInfoObjects = iInfoStore.query("从CI_INFOOBJECTS选择*,其中SI_NAME ='" + reportName +"'" +" And SI_INSTANCE = 0"); IInfoObject报告=(IInfoObject)iInfoObjects.get(0); //获取ReportClientDocument对象 IReportAppFactory reportAppFactory =(IReportAppFactory)enterpriseSession.getService(" RASReportFactory"); ReportClientDocument reportClientDocument = reportAppFactory.openDocument(report,OpenReportOptions._openAsReadOnly,Locale.ENGLISH); //设置报表参数 reportClientDocument.getDataDefController()。getParameterFieldController()。setCurrentValue(""," pLibrary",libraryName); reportClientDocument.getDataDefController()。getParameterFieldController()。setCurrentValue(""," pApprDtBegin",approveDateBeginRange); reportClientDocument.getDataDefController()。getParameterFieldController()。setCurrentValue(""," pApprDtEnd",approveDateEndRange); LoginToReport(reportClientDocument); CreateFileInPathLocation(reportClientDocument,ReportExportFormat.PDF,outputFileWithPath); 私人无效CreateFileInPathLocation(ReportClientDocument reportClientDocument ,ReportExportFormat fileType ,字符串outputFileWithPath)抛出ReportSDKException,IOException { InputStream byteAryIS =(InputStream)reportClientDocument.getPrintOutputController()。export(fileType); byte [] buf =新的byte [byteAryIS.available()]; //新的字节[2000 * 1024]; FileOutputStream fOS =新的FileOutputStream(outputFileWithPath); int nRead = 0; 而((nRead = byteAryIS.read(buf))!= -1) { fOS.write(buf,0,nRead); } byteAryIS.close(); fOS.close(); } 公共无效LoginToReport(ReportClientDocument reportClientDocument)引发ReportSDKException { 字符串userName =" UserName2"; 字符串密码=" Password2"; //登录过程1 reportClientDocument.getDatabaseController()。logon(userName,password); //登录过程2 //ConnectionInfos connInfos = new ConnectionInfos(); //ConnectionInfo connInfo_Main = new ConnectionInfo(); //connInfo_Main.setUserName(userName); //connInfo_Main.setPassword(password); //connInfos.add(connInfo_Main); //reportClientDocument.getDatabaseController()。setConnectionInfos(connInfos); //登录过程3 //ConnectionInfos conns = reportClientDocument.getDatabaseController()。getConnectionInfos(null); //IConnectionInfo oldConnInfo = conns.getConnectionInfo(0); //PropertyBag newLogon = new PropertyBag(); //newLogon.putStringValue(" DSN"," iSeries Access"); //newLogon.putBooleanValue(" UseDSNProperties",false); //PropertyBag newAttrib = new PropertyBag(); //newAttrib.putStringValue(PropertyBagHelper.CONNINFO_CRQE_DATABASENAME,""); //newAttrib.putBooleanValue(PropertyBagHelper.CONNINFO_CRQE_SQLDB,true); //newAttrib.putBooleanValue(PropertyBagHelper.CONNINFO_SSO_ENABLED,false); //newAttrib.putStringValue(PropertyBagHelper.CONNINFO_CRQE_DATABASETYPE," ODBC(RDO)"); //newAttrib.putStringValue(PropertyBagHelper.CONNINFO_DATABASE_DLL," crdb_odbc.dll"); //newAttrib.put(PropertyBagHelper.CONNINFO_CRQE_LOGONPROPERTIES,newLogon); //newAttrib.putStringValue(PropertyBagHelper.CONNINFO_CRQE_SERVERDESCRIPTION," iSeries Access"); //IConnectionInfo newConnInfo = new ConnectionInfo(); //newConnInfo.setAttributes(newAttrib); //newConnInfo.setUserName(userName); //newConnInfo.setPassword(password); //reportClientDocument.getDatabaseController()。replaceConnection(oldConnInfo,newConnInfo,null,DBOptions._doNotVerifyDB); }
关于如何解决此问题的任何想法?
一周热门 更多>