[gx-l] Download Planilla Excel

292 views
Skip to first unread message

Fernando

unread,
Sep 27, 2006, 3:44:01 PM9/27/06
to gx...@gxtech.com.uy, jav...@gxtech.com.uy, inter...@gxtech.com.uy
Buenas tardes, despues de lidiar varias horas y de revisar la diocumentacion existente (gxsearch) recurro a Uds. ya que no logro llegar a buen puerto.
 
Estoy con Gx 8.0 U8 generando java U6 (web) sobre Tomcat 5.5
 
Con un procedimiento genero un XML con formato Excel y luego llamo a otro PRC (main, call protocol HTTP) para hacer el Download de la planilla generada en el Tomcat, segun versa en un mail denominado: GX8-WEB-JAVA-Grabar archivo txt, con las siguientes sentencias:
 
&Url = 'C:\Archivos de programa\Apache Software Foundation\Tomcat 5.5\webapps\Inicio\Temp\' + trim(&Planilla)
&Response.AddHeader('Content-type', 'application/vnd.ms-excel')
&Response.AddHeader('Content-Disposition', 'attachment; filename=' + &Planilla)
&Response.AddFile(&Url)
 
y la respuesta que obtengo es:
 
javax.servlet.ServletException: java.lang.NullPointerException
at com.genexus.internet.HttpResponse.addFile(Unknown Source)

at aicxls03.execute_int(aicxls03.java)
at aicxls03.execute(aicxls03.java)
at picxls03.execute_int(picxls03.java)
at picxls03.execute(picxls03.java)
at hicfind2_impl.E126T2(hicfind2_impl.java)
 
Agradecere cualquier sugerencia o pista para resolver el problema.
 
Saludos.
 
Fernando.
 
 

Leonardo Zepeda

unread,
Sep 27, 2006, 4:42:10 PM9/27/06
to gx...@gxtech.com.uy, fro...@gmail.com
Hola

  Intenta realizando esto, en un webpanel en el evento start, agregas estas lineas

&HtmlLink.AddString('<HTML>')
&HtmlLink.AddString('<HEAD>')
&HtmlLink.AddString("<meta http-equiv='refresh' content='0;URL=apxxx000?' >")
&HtmlLink.AddString('</HEAD>')
&HtmlLink.AddString('<BODY>')
&HtmlLink.AddString('</BODY>')
&HtmlLink.AddString('</HTML>')

Donde :
apxxx000 --> Es tu procedimiento
&HtmlLink --> Variable de Tipo HttpResponse

En el caso de que necesites parametros en tu procediento utilizas SDT + Web Session.

Espero te sirva

Saludos

Leonardo Zepeda A.

Santiago, Chile




2006/9/27, Fernando <fro...@gmail.com>:

Alvaro Morales

unread,
Sep 27, 2006, 4:51:25 PM9/27/06
to inter...@gxtech.com.uy
Está mal escrito el path, las contrabarras (\) son secuencias de escape en java (y en muchos otros lenguajes).

Fernando

unread,
Sep 27, 2006, 5:23:20 PM9/27/06
to inter...@gxtech.com.uy
Ya le cambie las barras y pasa lo mismo como deberia escribir el Path?
 
Gracias.
 
Fernando.

 
El día 27/09/06, Alvaro Morales <acla...@montevideo.com.uy> escribió:

Alvaro Morales

unread,
Sep 28, 2006, 8:39:25 AM9/28/06
to inter...@gxtech.com.uy
Probá con:
&Url = 'C:\\Archivos de programa\\Apache Software Foundation\\Tomcat 5.5\\webapps\\Inicio\\Temp\\' + trim(&Planilla)
 
Yo tuve varios problemas con el objeto Response, al final para hacer un download opté por código java puro. Si lo anterior no te funciona te lo paso.
suerte

Fernando

unread,
Sep 28, 2006, 10:49:30 AM9/28/06
to inter...@gxtech.com.uy
Alvaro, lo probe asi como vos me decis y sigue el mismo error:
 
javax.servlet.ServletException: java.lang.NullPointerException
at com.genexus.internet.HttpResponse.addFile(Unknown Source)

 
Me podrias pasar el que armaste vos con java puro.
 
Gracias.
 
Fernando.

 
El día 28/09/06, Alvaro Morales <acla...@montevideo.com.uy> escribió:

Alvaro Morales

unread,
Sep 28, 2006, 11:54:12 AM9/28/06
to inter...@gxtech.com.uy
Bueno, espero no confundir en la explicación.
Te envio el export "descargaDesdeString.xpz", ese proc es útil si tenés el contenido del archivo en una variable string, lo invocás y listo.
 
Si ya tenés el archivo guardado en disco y querés enviarselo al cliente te envío el fuente de más abajo (es una parte de un gran fuente, espero no tener errores de sintaxis).
&Planilla debe ser el nombre del archivo con extensión, por ejemplo: "miarchivo.xls".
Este código consulta por el valor de la variable &modo, si la misma vale "I" significa que la descarga es "Inline" es decir, se sugeriría al browser que abra el archivo en pantalla (no se puede obligar al browser a hacerlo). En cualquier otro caso se sugiere al browser que lo descarge a disco.
Las variables &nomArch, &ext, etc. podés definias como V(40) (varchar 40).
Como ves este código invoca al reporte RFCDOC00, por lo tanto te envio el export del mismo (no prestes atención a los comentarios del cabezal de este fuente porque son relativos al contexto del proyecto en el que fueron hechos).
Suerte! cualquier cosa a las órdenes.
 
 
java String rutaOrigen;
java javax.servlet.http.HttpServletResponse respuesta;
java java.io.BufferedInputStream  bis = null;
java java.io.BufferedOutputStream bos = null;
java int bytesRead;
java final int BLOQUE = 2048;
java byte[/**/] buff;
java try {
java     rutaOrigen = "C:\\Archivos de programa\\Apache Software Foundation\\Tomcat 5.5\\webapps\\Inicio\\Temp\\" + trim(&Planilla);
java     [!&nomArch!] = [!&nomArch!].substring( 0, [!&nomArch!].lastIndexOf( "." ) );
java     [!&ext!] = "." + rutaOrigen.substring( rutaOrigen.lastIndexOf( "." ) + 1 );
         If Upper( &modo ) = 'I'
             Call( RFCDOC00, &ext, &descripcion, &tipoContenido )
             &contDisposition = "Inline;Filename="
         Else
             // Se codifican aquellos caracteres no US-ASCII para que el nombre del archivo sea desplegado
             // correctamente en el cuadro de descarga.
java         [!nomArch!] = java.net.URLEncoder.encode( [!&nomArch!], "UTF-8" ).replace( "+", " " );
             &tipoContenido = "application/octet-stream"
             &contDisposition = "Attachment;Filename="
         EndIf
java     respuesta = ( ( HttpContextWeb ) httpContext ).getResponse();
java     respuesta.reset();
java     respuesta.setContentType( [!&tipoContenido!] );
java     respuesta.setHeader( "Content-disposition", [!&contDisposition!]  + [!&nomArch!] + [!&ext!] );
java     bis = new java.io.BufferedInputStream( new java.io.FileInputStream( rutaOrigen ) );
java     bos = new java.io.BufferedOutputStream( respuesta.getOutputStream() );
java     buff = new byte[BLOQUE];
java     while( -1 != ( bytesRead = bis.read( buff, 0, buff.length ) ) ) {
java         bos.write( buff, 0, bytesRead );
java     }
java } catch( java.lang.Exception e ) {
java       System.out.println ( e.getMessage() );
java } finally {
java     try {
java         if ( bis != null ) {
java             bis.close();
java         }
java         if ( bos != null ) {
java             bos.close();
java         }
java     } catch( Exception e ) {
java         System.out.println ( e.getMessage() );
java     }
java }
DescargaDesdeString.xpz
RFCDOC00.xpz
Reply all
Reply to author
Forward
0 new messages