Buen día expertos, tengo un problema al querer generar un PDF con Crystal Reports desde .NET
La función que ejecuto es la siguiente:
private void saveCR(string docEntry)
{
try
{
ReportDocument objRepDoc = new ReportDocument();
objRepDoc.Load(@"C:\ruta.rpt");
objRepDoc.SetParameterValue(0, docEntry);
objRepDoc.SetParameterValue(1, 23);
ConnectionInfo objConn = new ConnectionInfo();
objConn.DatabaseName = "DB_Name";
objConn.ServerName = "Server_Name";
objConn.UserID = "user";
objConn.Password = "pass";
TableLogOnInfo objTableLogOnInfo = new TableLogOnInfo();
objTableLogOnInfo.ConnectionInfo = objConn;
objRepDoc.Database.Tables[0].ApplyLogOnInfo(objTableLogOnInfo);
objRepDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, docNum);
ShowMessage("Se ha guardado el PDF correctamente", MessageType.Success);
//CloseReports(objRepDoc);
//objRepDoc.Close();
//objRepDoc.Dispose();
}
catch (Exception ex)
{
error = "Error al crear el documento de CR: " + ex.StackTrace;
ShowMessage(error, MessageType.Error);
}
}
La aplicación me marca error Subproceso anulado al llamar a ExportToHttpResponse, el stack trace de la excepción que obtengo dice esto:
en System.Threading.Thread.AbortInternal()
en System.Threading.Thread.Abort(Object stateInfo)
en System.Web.HttpResponse.AbortCurrentThread()
en System.Web.HttpResponse.End()
en CrystalDecisions…
Alguien ha tenido algún problema similar? Si me descarga el PDF como adjunto, pero me marca ese error y el código siguiente no lo ejecuta.
Buen día @juliancab, gracias por su respuesta, acabo de intentar con ese cambio, sin embargo me marca el mismo error que antes alguna otra sugerencia??
Hice la prueba quitando lo que me indicó señor Julian, y me descarga el PDF con la pura plantilla pero sin la información del documento (líneas, cliente, total, etc.), y después de descargar el PDF me arroja la misma excepción.
¿Qué será lo que estoy haciendo mal? Conoce otro modo de descargar el PDF que pudiera intentar?
Muchas gracias por su respuesta @juliancab, logro generar el archivo en una ruta física con el ejemplo que me proporcionó, sin embargo no consigo que se descargue desde el navegador, debido a que la aplicación está en una página web, requiero que el usuario pueda descargar el PDF como adjunto directamente.
@chavalito Veo que tienes mucha experiencia con DI API, has trabajado con esto de casualidad?
Bueno después de un poco de investigación fuera de lo relacionado con DI API, me encontré con que al parecer este comportamiento es el normal, y parte del proceso de la rutina Response es arrojar una excepción.
Una disculpa por contestar tan tarde, te comento que en programación web, solo se lo básico, yo utilizo DIAPI con aplicaciones de escritorio, o tipo servicios de windows cuando no es necesario la intervención del usuario.
Ahora bien, como comentario, yo lo realizo igual que @juliancab, ya sea para exportarlo en PDF o para enviarlo a la impresora, según sea el requerimiento.
Con respecto a la solución que aplicaste, yo lo que haría es un try-catch general que abarque todo el proceso, y un try-catch específico para la linea que está causando el problema, a menos que antes de esa linea no exista la posibilidad de que arroje un error, de lo contrario lo estarías ignorando.
Gracias por tu respuesta, y descuida no hay problema.
Por fortuna en esta pestaña/página de la aplicación es el único proceso que se realiza, así que salvo por un par de validaciones runtime, es la única excepción que puede generarse, de igual forma para rescatar cualquier otro escenario dejo el catch a nivel general. Muchas gracias!