ReportSDKException错误:无法创建临时文件

2020-09-10 21:58发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我正在从Crystal Repo...

         点击此处--->   EasySAP.com群内免费提供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);
 }