[java-l] Embeber un HTML en un Web Panel o Clase externa

921 views
Skip to first unread message

Erick A. Cisneros

unread,
Nov 15, 2006, 8:44:31 AM11/15/06
to jav...@gxtech.com.uy
Hola Foro!

Trabajo con Genexus 8.0 U7, Generador Java U8 para Web, usando WebSphere como servidor de aplicaciones. No tengo mucho tiempo trabajando en esto, y recurro a su ayuda. Tengo el siguiente problema:

Estoy intentando acceder una aplicación de un proveedor desde una aplicación Genexus.  Lamentablemente la aplicación despliega forzosamente un formulario para capturar los parámetros necesarios.  Luego de ejecutarse, la aplicación devuelve un HTML indicando los resultados.  El problema es que estos parámetros deben estar ocultos al usuario, ya que estos datos correspondientes ya fueron obtenidos en pantallas previas.  Esto,  sin mencionar el contraste a nivel estético de este formulario con el resto de la aplicación.

Se me ocurrió manipular y embeber el código HTML del formulario dentro de un Web Panel para intentar que el acceso a la aplicación sea trasparente al usuario.  Para ello agregué un TextBlock dentro del web panel (Input_Archivo ) y le agregué el siguiente código HTML al evento Start. 

    &URLBase = "http://servidor/aplicacion.asp?"
    &Cadena = &Cadena + '<FORM METHOD="post" '
    &Cadena = &Cadena + 'ACTION="' + &URLBase + 'WCI=upload&amp;WCE=tempupload&amp;WCU=" ' + NewLine()
    &Cadena = &Cadena + 'NAME="PW" ENCTYPE="multipart/form-data"> ' + NewLine()
    &Cadena = &Cadena + '<INPUT type="file"  name=File1 > ' + NewLine()
    &Cadena = &Cadena + '<INPUT type="hidden" id=index1 name=index1 value=' + &dbCliente + ' size="20"> ' + NewLine()
    &Cadena = &Cadena + '<INPUT type="hidden" id=index2 name=index2 value=' + &dbNroProp + ' size="20"> ' + NewLine()
    &Cadena = &Cadena + '<INPUT type="hidden" id=index3 name=index3 value=' + '000' + ' size="20"> ' + NewLine()
    &Cadena = &Cadena + '<INPUT type="hidden" id=index4 name=index4 value=' + '000000' + ' size="20"> ' + NewLine()
    &Cadena = &Cadena + '<INPUT type="hidden" id=index5 name=index5 value=' + '000' + ' size="20"> ' + NewLine()
    &Cadena = &Cadena + '<INPUT type="hidden" id=archivname name=archivname value=' + &SFArchivname + ' size="20"> ' + NewLine()
    &Cadena = &Cadena + '<INPUT type="hidden" id=keywords name=keywords value=' + &SFKeyword + ' size="20"> ' + NewLine()
    &Cadena = &Cadena + '<INPUT type="hidden" id=text1 name=validate value=1> ' + NewLine()
    &Cadena = &Cadena + '<INPUT type="hidden" id=text1 name=session value=' + &SFSesion + '> ' + NewLine()
    &Cadena = &Cadena + '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' + NewLine()
    &Cadena = &Cadena + '<INPUT type="submit" value="Adjuntar" id=submit1 name=submit1> ' + NewLine()
    &Cadena = &Cadena + '</FORM>'
   
    Input_Archivo.Caption=&Cadena

Este código HTML es lo medular del formulario original, es decir, donde se hace el acceso a la aplicación.  Con esto despliego únicamente lo que necesita el usuario, de modo que se ocultan los demás datos al usuario y solo se muestra lo que realmente necesita proporcionarle a la aplicación (una selección de archivo).  Sin embargo, he aquí el problema:  el botón Browse funciona bien, pero al pulsar el botón Adjuntar para enviar los datos al servidor correspondiente, el formulario (o webpanel)  no hace nada, ni siquiera llega a acceder  la aplicación del proveedor.  Es como si no hiciera el Submit correspondiente.

1 - Alguno de ustedes podría ayudarme con esto o indicarme qué es lo que hice mal o dejé de hacer?
2 - Este código HTML podría encapsularse en una Clase Java externa de modo que pueda manipular el HTML retornado por la aplicación y ser ejecutada desde Genexus como una función?  Cómo?

Agradezco desde ya la ayuda y la atención prestada.

Saludos,

______________________________
Lic. Erick A. Cisneros
Analista de Sistemas
Departamento de Informática - DyD
BBVA Banco, Panamá


===========================================================

................... AVISO LEGAL ..........................

La presente comunicación y sus anexos tiene como destinatario la persona a la que va dirigida, por lo que si usted lo recibe por error debe notificarlo al remitente y eliminarlo de su sistema, no pudiendo utilizarlo, total o parcialmente, para ningún fin. Su contenido puede tener información confidencial o protegida legalmente y únicamente expresa la opinión del remitente. El uso del correo electrónico vía internet no permite asegurar ni la confidencialidad de los mensajes ni su correcta recepción. En el caso de que el destinatario no consintiera la utilización del correo electrónico, deberá ponerlo en nuestro conocimiento inmediatamente.

===========================================================

....................DISCLAIMER............................

This message and its attachments are intended exclusively for the named addressee. If you receive this message in error, please immediately delete it from your system and notify the sender. You may not use this message or any part of it for any purpose. The message may contain information that is confidential or protected by law, and any opinions expressed are those of the individual sender. Internet e-mail guarantees neither the confidentiality nor the proper receipt of the message sent. If the addressee of this message does not consent to the use of internet e-mail, please inform us inmmediately.

===========================================================


-----------------------------------------
Para Suscribirse/Desuscribirse:
http://www.gxtechnical.com/cgi-bin/hforum.exe?2,3,30,20
Por consultas owner-...@gxtech.com.uy

Gustavo Moreira

unread,
Nov 15, 2006, 10:52:41 AM11/15/06
to jav...@gxtech.com.uy
Creo que el problema es que los webpanels genexus ya tienen un form incuido (llamado MAINFORM, por si te es util saberlo.)
Yo intentaria cerrar ese formulario antes y abrir otro despues. Algo asi como

    &URLBase = "http://servidor/aplicacion.asp?"
    &Cadena = &Cadena + '</FORM><FORM METHOD="post" '
.........
    &Cadena = &Cadena + '</FORM><FORM>'

Claro que con eso no creo que puedas utilizar eventos por fuera de este webpanel. Es decir, si incluyes un boton antes o despues de "&Cadena", no podria asegurarte que funcione correctamente, porque las cosas despues de "&Cadena" ya no estarian en el form de genexus.

**********************
Ing. Gustavo Moreira
Genexus Consulting
Software Factory

Erick A. Cisneros

unread,
Nov 16, 2006, 8:47:53 AM11/16/06
to jav...@gxtech.com.uy
Gustavo, implementé tus recomendaciones y funcionó perfectamente.

Muchas gracias!

______________________________
Lic. Erick A. Cisneros
Analista de Sistemas
Departamento de Informática - DyD
BBVA Banco, Panamá

-----Mensaje original-----
De: Gustavo Moreira [mailto:gmor...@genexusconsulting.com]
Enviado el: Miércoles, 15 de Noviembre de 2006 10:53 a.m.
Para: jav...@gxtech.com.uy
Asunto: RE: [java-l] Embeber un HTML en un Web Panel o Clase externa

Pablo Minisini

unread,
May 12, 2022, 11:12:40 AM5/12/22
to GeneXus
Erick , Gustavo, buenos días.

Se me acaba de plantear el mismo escenario que exponen ustedes en este hilo, pero con el inconveniente de que necesito capturar el momento en el cual el usuario le da al botón confirmar (submit) del form en HTML y de esta manera  hacer otras operaciones en mi programa una vez que efectivamente sé que el usuario le dio al botón confirmar y ya se encuentra en el sitio externo.

Tengo un Web Panel en el cual en el rectángulo inferior izquierdo le embebo otro web panel en el cual se encuentra el HTML con el post y el formulario a enviar. 👇


Adjunto01.JPG


Ahora voy a pegar a continuación el código del otro web panel , que está embebido en el anterior. Está todo en el event START:


Event Start
    &PagoFacilSDT.FromJson(&WebSession.Get('PagoFacilSDT'))
    &SDTComprobantePagado.FromJson(&WebSession.Get('SDTComprobantePagadoJSON'))
    &CuoPag = Val(&WebSession.Get('CuoPag'))
    &referencia_pago = '3746237463274'
    &dato_adicional_1 = ''
    &dato_adicional_2 = '422-2859'
   
    For &PagoFacilSDTItem in &PagoFacilSDT.Item
        &Monto += &PagoFacilSDTItem.Importe
        If &PagoFacilSDTItem.Identificador.Trim().Length() < 42
            &CptNro = Val(substr(&PagoFacilSDTItem.Identificador,30,8))
        Else
            &CptNro = Val(substr(&PagoFacilSDTItem.Identificador,32,8))
        Endif
    EndFor
   
    For &SDTComprobantePagadoItem in &SDTComprobantePagado
        &CuoPag = &SDTComprobantePagadoItem.CuoPag
        If &CuoPag > 1
            &codigo_barra = &SDTComprobantePagadoItem.CodBar2.Trim()
        Else
            &codigo_barra = &SDTComprobantePagadoItem.CodBar1.Trim()
        Endif
    Endfor
   
    &Cadena = '<head>' +chr(13)+chr(10)    
    &Cadena += '<meta charset="UTF-8">' +chr(13)+chr(10)
    &Cadena += '<meta name="viewport" content="width=device-width, initial-scale=1">' +chr(13)+chr(10)
    &Cadena += '</head>' +chr(13)+chr(10)
    &Cadena += '<form method="POST" action="'+ &PagoFacilSDT.URL.Trim() +'" target="_blank" />'+chr(13)+chr(10)    
    &Cadena +='<input type="hidden" id="api_key" name="api_key" value="'+ &PagoFacilSDT.SecretKey.Trim()+'" />'+chr(13)+chr(10)    
    &Cadena +='<input type="hidden" id="codigo_barra" name="codigo_barra" value="'+ &codigo_barra.Trim()+'" />'+chr(13)+chr(10)
    &Cadena +='<input type="hidden" id="dato_adicional_1" name="dato_adicional_1" value="'+ &dato_adicional_1.Trim() +'" />'+chr(13)+chr(10)
    &Cadena +='<button class="btn-primary btn btn-default BtnEnter" value="Enviar Pago" type="submit">CONFIRMAR</button>'+chr(13)+chr(10)        //CONFIRMAR
    &Cadena +='</form>'

   
    &HttpResponse.AddHeader("Content-Type","text/html;charset=utf-8")
    &HttpResponse.AddString(&Cadena)
Endevent


En tiempo de ejecución se muestra de la siguiente manera:


Adjunto02.JPG


Ese botón de CONFIRMAR, como verán, corresponde al submit del FORM del Html, y el problema que necesito resolver es el de obtener alguna señal (variable) en mi programa de Gx para saber que efectivamente el usuario apretó el botón y ya se encuentra en el sitio externo donde lo deriva el action del FORM del Html.


¿Podrían ayudarme con algunas sugerencias?
Desde ya , muchas gracias y van mis saludos!!!!!
Reply all
Reply to author
Forward
0 new messages