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.

13 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