martes, 6 de agosto de 2013

Upload a File con Genexus X Ev2

Bueno mis amigos el día de hoy les comparto una experiencia que me ha llevado 7 días poder resolver,
como verán no hay mucha documentación acerca del uso de genexus, y en este caso lo la evo2 me ha tocado aprender.

Datos del Aprendizaje:
genexus X evo2
generando para Java
conexion a MySql

lo primero aqui les tengo el codigo:
este evento es de un userControl llamado: JSEVENTHANDLER lo descargar de
http://wiki.gxtechnical.com/commwiki/servlet/hwiki?JSEventHandler+-+User+Control,
ahi encontraran su uso y el download de userControl

las Variables:

htmlResul es un TextBlock
&tipoDoc char(6)
txtExt textblock
&Doc en un blob
&htmlUpload es html

Event JSEventHandler1.EventHandled
    Do Case
        Case JSEventHandler1.EventType = "change"
htmlResul.Caption='<script type="text/JavaScript">ext();</script>'+newline()
&tipoDoc=txtExt.Caption
EndCase
EndEvent
   
Event Start
&eventlist.Add("change")
JSEventHandler1.AttachedControl=&Doc.InternalName
&htmlUpload+='<script type="text/javascript">'+newline()
&htmlUpload+='function ext(){'+newline()
&htmlUpload+='var filename = document.getElementById("vDOC").value;'+newline()
&htmlUpload+='var ext=(filename.substring(filename.lastIndexOf("."))).toLowerCase();'+newline()
&htmlUpload+='var tipoDoc=ext.replace(".","");'+newline()
&htmlUpload+='var tipo=document.getElementById("TXTEXT");'+newline()
&htmlUpload+='var cbb=document.getElementById("vEXT");'+newline()
&htmlUpload+='if(tipoDoc=="xltx" || tipoDoc=="xlsx" || tipoDoc=="xls" || tipoDoc=="doc" || tipoDoc=="docx" || tipoDoc=="pdf"){tipo.firstChild.nodeValue=tipoDoc; cbb.value=tipoDoc;}else{alert("Documento no Valido"); cbb.value="NA"; tipo.firstChild.nodeValue="NA";};'+newline()
&htmlUpload+='}'+newline()
&htmlUpload+='</script>'+newline()
html.Caption=&htmlUpload
Endevent

la mecanica es la siguiente, pongo el blob en el webpanel
en las propiedades del &Doc pongo display en Link, y el LinkTarget en _Blank, esto me permite subir el archivo, ahora en la base da datos recuerden cambiar el max_allowed_packet es mas de 1MB para poder guardar documentos de mayor tamaño. recomendacion 20MB como maximo.

 en el evento adjuntar del boton pueden poner un proc, que mande a guardar o usar BC en true de la transaccion y hacerlo con ello.

EJEMPLO DEL PROCEDIMIENTO:

new
DocNo=&numero  //puede ser Autonumber tambien de no ser muchos documentos.
DocDes=&descripcion
DocTip=&tipodocumento
Doc=&Doc //tambien tiene que ser de tipo Blob.
endnew


si hay dudas o preguntas respondere a la brevedad!!, Muchas Gracias por ver mi blog.

Este ejemplo esta testeado en safari, Chrome, Mozilla, IE. a sus ultimas actualizaciones en fecha.

31 comentarios:

  1. Hola, buena forma de usar el complemento.

    estoy en el dilema de subir files (pdf, docs, etc y luego llamarlos por un link)

    podrias subir el ejemplo completo? te lo agradeceria, me parece esta incompleto.
    por ejemplo, la descripcion, N/A y como mostarlos en una grilla o una lista de los elementos subidos.

    Gracias!

    ResponderEliminar
    Respuestas
    1. hola, CHANEL, disculpa que no te he podido contestar, ahora tengo una version mas compacta cumpliendo con los requerimientos de los que tu necesitas. si aun lo requieres te mando la forma en como lo hice.

      Eliminar
    2. Luis podrías compartirme esa nueva forma de hacerlo por favor. Te lo agradecería mucho.

      Eliminar
    3. Hola Luis por favor podrías indicarme el nuevo proceso con la versión mas compacta.
      Te lo agradecería
      Muchas Gracias

      Eliminar
  2. Hola, sería posible que compartieras la nueva versión del código con nosotros?
    Gracias por adelantado.

    ResponderEliminar
  3. Buen dia Luis

    tendrias la amabilidad de compartirme el form para la subida y visualizacion de archivos, estoy con este requerimento y esta un poco tedioso.

    mi correo es hector.restrepo@techserc.com, de antemano muchas gracias por tu ayuda.

    ResponderEliminar
  4. Hola, si serías tan amable por favor de compartir la nueva versión de código que mencionas. Mi correo es adriana.milepc@gmail.com

    Muchas gracias de antemano.

    ResponderEliminar
  5. Hola podrias compartirme el form por favor ... actualmente subo los archivos pero se graban como tmp y no puedo recuperarlos mas.
    Mi email es maximilianoespeche@gmail.com Saludos

    ResponderEliminar
    Respuestas
    1. Buen dia Maximiliano, con respecto a eso estas trabajando en Java y Mysql?

      Eliminar
  6. Hola Luis, estoy trabajando en subir archivos como parte de un aplicativo, me puedes compartir tu solución. Trabajo este momento con Evolution 2

    ResponderEliminar
    Respuestas
    1. Buen dia Hernán, con respecto a eso estas trabajando en Java y Mysql?

      Eliminar
  7. Hola
    Necesito saber si este control lo puedo usar en Gx Evo 3.
    Saludos

    ResponderEliminar
    Respuestas
    1. Efectivamente, e usercontrol es valido en la evo3. En unas horas finamente subire al blog la ultima version que tengo del formulario.

      Eliminar
  8. Estimado Luis Fernando.

    Me ayudas con la ultima version de Upload a File con Genexus,

    Estoy trabajando con la Evo3 y no funciona.

    Me puedes compartir a mi correo demetole@gmail.com



    Espero tun respuesta.

    ResponderEliminar
  9. Luis buen dia, tengo varias con esto y aun no encuentro solucion, creo una plantilla .dotx,en word 2007, la grabo y le cree una carpeta en el modelo y esa ruta la llamo desde genexus y si encuentra el archivo , el inconveninete es que no me reemplza ciertas variables como pudeo hacer dinamico esta situacion y que se abran las plantillas de word?

    ResponderEliminar
    Respuestas
    1. Mi corroe marjorie.cevallos2012@gmail.com

      Eliminar
    2. Hola Marjorie,
      Si bien entendi, lo que necesitas es descargar documentos word (plantillero) donde solo reemplazas la informacion de ciertos campos y necesitas que sea descargable para el usuario. Si es asi, con gusto te ayudo hare un form de eso y te mando el xpz.

      Usas como generador C# o java?

      Eliminar
  10. hola luis disculpa la molestia, quizas puedas ayudarme con algo que me esta costando resolver.
    Genero un archivo .txt a partir de una tabla y luego quiero que el usuario pueda seleccionar en que carpeta guardarlo. Estoy usando EV03 con .NET. antes se usaba la sentencia GXSELDIR pero ahora en web no esta disponible

    ResponderEliminar
    Respuestas
    1. Hola Eduardo, deberias utilizar un control blob en modo diplay none para usarlo como seleccionador de archivo.

      Eliminar
  11. mi email es edupolilla@hotmail.com por la dudas que tengas la solucion

    ResponderEliminar
  12. Buenas... muy interesante tu blog... soy nueva en la materia del mundo gx, estoy desarrollando un sistema en donde tengo que permitir a mi usuario la carga y descarga de cualquier tipo de archivo (pdf, txt, jpg, etc). En mi transaccion, al ejecutarlo, subo el archivo y lo guardo en un campo tipo blob y no impacta en la bd, el sistema queda colgado y nunca cierra el proceso en la transaccion
    Estoy utilizando gx evo 3 - generador: java - datastore: sqlserver
    Agradeceria muchisimo tu ayuda
    Mi mail es ruthygonzalez05@gmail.com

    ResponderEliminar
    Respuestas
    1. Hola Ruth, disculpas por la tardanza, aun lo requieres?

      Eliminar
    2. aun sigo con el mismo inconveniente.. sera que podrias ayudarme??? actualmente estoy en otros proyectos pero este lo deje parado debido a que no puedo hacer lo que te comente... si me podrias ayudar te agradeceria un monton!!!

      Eliminar
    3. Hola me podrías compartir la versión mas compacta que tienes. por favor. Gracias.
      valdezalva@gmail.com

      Eliminar
  13. Buenos días, ¿en donde está publicada la nueva solución?.

    ResponderEliminar
    Respuestas
    1. Buen dia! tengo una consulta: la actual version no te sirve, que ocuparias hacer adicional a este ejemplo.

      Eliminar
  14. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  15. Hola tendrías el ejemplo para pasármelo para GxEvo2 gracias? mgigena.edu@gmail.com

    ResponderEliminar
  16. Hola Luis:
    Estoy trabajando con GX Xev2, Java Y MYSQL.
    No he logrado hacerlo andar.
    Veo que pones &tipoDoc=txtExt.Caption
    pero en ningun lugar veo que se le asigne algo a txtExt.Caption
    ¿Me puedes indicar si lleva algo?
    Slds y gracias
    Pablo Barrios
    pbarrios.barbas@gmail.com

    ResponderEliminar