Report Export gives error "Failed to open report"

Hi,

I’m very new to this fourm and on a steep learning curve.

I’m querying the RAS for a report and using the reportAppFactory object and reportClientDocument.OpenDocument to open the report. I’m setting database logon to tables and any subreports. Finally I set the parameter value and then want to export the report to a bytearray in a PDF format. This last step is where I’m having problems. On the PrintOutputController.Export call I keep getting an error, “Failed to open report”.

Am I going about this the wrong way? Can anyone point me in the right direction?

Many Thanks.


CrystalDecisions.CrystalReports.Engine.ReportDocument rptDocument = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
SessionMgr sessionMgr = new SessionMgr();
EnterpriseSession enterpriseSession = sessionMgr.LogonWithToken(sToken);
EnterpriseService enterpriseService = enterpriseSession.GetService("InfoStore");
InfoStore infoStore = new InfoStore(enterpriseService);
 
querystring = "Select SI_CUID, SI_DESCRIPTION From CI_INFOOBJECTS Where SI_PROGID='CrystalEnterprise.Report' And SI_NAME = '" + sReportName.ToString() + "'";
 
InfoObjects infoObjects = infoStore.Query(querystring);
InfoObject infoObject = infoObjects[1];
 
EnterpriseService tempService = enterpriseSession.GetService("", "RASReportFactory");
ReportAppFactory reportAppFactory;
reportAppFactory = (ReportAppFactory)tempService.Interface;
 
ReportClientDocument reportClientDocument = new ReportClientDocumentClass();
reportClientDocument = reportAppFactory.OpenDocument(infoObject.ID, 0);
 
 
CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo cnInfo = (CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo)reportClientDocument.DatabaseController.GetConnectionInfos(null)[0].Clone(true);
 
 
PropertyBag propertyBag = new PropertyBagClass();
                
propertyBag.EnsureCapacity(5);
propertyBag["Database DLL"] = "crdb_odbc.dll";
propertyBag["QE_DatabaseType"] = "ODBC (RDO)";
propertyBag["QE_ServerDescription"] = "ODBC - Xtreme Sample Database 10";
propertyBag["QE_SQLDB"] = true;
propertyBag["Server Name"] = sDbDSN;
                
cnInfo.Attributes = propertyBag;
cnInfo.UserName = sDbUsername;
cnInfo.Password = sDbPassword;
cnInfo.Kind = CrConnectionInfoKindEnum.crConnectionInfoKindSQL;
 
 
foreach (CrystalDecisions.ReportAppServer.DataDefModel.Table oTable in reportClientDocument.Database.Tables)
                {
                    oTable.ConnectionInfo = cnInfo;
                }
 
foreach (String tempSubReportName in reportClientDocument.SubreportController.QuerySubreportNames())
                {
CrystalDecisions.ReportAppServer.DataDefModel.Database database = reportClientDocument.SubreportController.GetSubreportDatabase(tempSubReportName);
 
                    foreach (CrystalDecisions.ReportAppServer.DataDefModel.Table table_old in database.Tables)
                    {
CrystalDecisions.ReportAppServer.DataDefModel.Table table_new = new CrystalDecisions.ReportAppServer.DataDefModel.TableClass();
 
table_new.Name = table_old.Name;
table_new.ConnectionInfo = cnInfo;
 
reportClientDocument.SubreportController.SetTableLocation(tempSubReportName, table_old, table_new);
                    }
                }
 
 
 
ParameterFieldDiscreteValue paramValue = new ParameterFieldDiscreteValue();
                paramValue.Value = sReportParameter;
 
                Values val = new Values();
                val.Add(paramValue);
 
                reportClientDocument.DataDefController.ParameterFieldController.SetCurrentValue(sReportName, reportClientDocument.DataDefinition.ParameterFields[0].Name, paramValue);
 
                PrintOutputController rasPrintOutputController = reportClientDocument.PrintOutputController;
 
 
 
                if (reportClientDocument.IsOpen)
                {
                    ByteArray tempByteArray = rasPrintOutputController.Export(CrReportExportFormatEnum.crReportExportFormatPDF, 1);
                    Byte[] byteStreamOutput = tempByteArray.ByteArray;
 
                    reportClientDocument.Close();
                    GC.Collect();
 
                    Response.Clear();
                    Response.AddHeader("content-disposition", "inline;filename=untitled.pdf");
                    Response.ContentType = "application/pdf";
                    Response.BinaryWrite(byteStreamOutput);
                    Response.End();
                }
 

lillyhammer (BOB member since 2009-02-04)