Web Panels en Visual Basic - GeneXus 6.0 Los webpanels se implementan como programas CGI, que cuando se ejecutan, generan una salida HTM que se envía al Browser. Estos programas CGI, permiten realizar llamadas a programas externos pasando datos específicos ingresados por el usuario. El programa procesa esos datos y el servidor devuelve la repuesta del programa al Web Browser. A partir de la versión 6.0 patch 2 de GeneXus se pueden generar Web Panels con Visual Basic 5.0. En versiones anteriores solamente podían generarse con Visual Basic 4.0 32 bits. Desde el punto de vista del desarrollador GeneXus, la diferencia que puede encontrar es que para el caso 4.0 32 bits, se generan dos archivos: uno con extensión WBP y otro CGI, mientras que para Visual Basic 5.0 se genera un solo archivo con extensión EXE. Consideraciones Web Panels Client Server Los web panels C/S al igual que los demás objetos GeneXus, requieren conocer el usuario y contraseña con la que conectarse a la base de datos. Esta información normalmente se digita en tiempo de ejecución (es decir, el data source despliega una ventana de conexión). Lo que tienen de particular los web panels, es que esta ventana no puede desplegarse, ya que de hacerlo, se hará en la consola del servidor y no en el browser del cliente. Por este motivo en el Browser, las ejecuciones cancelan por time-out. La manera de solucionarlo es usando el utilitario GX Login (http://www.artech.com.uy/forum/tips/gxlogin.htm), que resuelve la conexión a la base de datos a través del archivo gxcs.ini. Esquema general Caso Visual Basic 4.0 32 bits. Se requiere una dll auxiliar llamada webifce.dll-, que permite grabar en la entrada y salida estandar (o consola) STDIN y STD OUT. El funcionamiento es: Internet Information Server WEB SERVER Entrada Salida a Consola WEBIFCE.DLL WEB PANEL VB 4.0 32 bits Base de Datos Caso Visual Basic 5.0 Internet Information Server WEB SERVER Entrada / Salida a consola WEB PANEL VB5.0 Base de Datos
WEB PANELS: Consideraciones generales Para poder ejecutar Web panels, hay que tener en cuenta algunas consideraciones que se detallan a continuación: I. Configuración del Web Server El Web Server, maneja un usuario (normalmente llamado IUSR_nameserver, pero puede cambiarse en WWW Service Anonymous Logon) que es el que se utiliza cuando se conectan desde Browsers a las páginas ubicadas en directorios públicos. En el caso de directorios con acceso restringido, el usuario a utilizar se solicita desde el propio Browser. Por este motivo, este usuario es el que se utiliza cuando se ejecutan los web panels y para ello debe cumplir ciertos requisitos: Permisos Debe tener acceso de lectura y acceso completo en algunos directorios del servidor: - Acceso de lectura en: * WINNT (y subdirs) * Directorio donde están las DLL de VB (probablemente en el anterior) - Acceso completo en: * CGI-BIN * directorio TEMP Además, para el caso de Web Panels Cliente Servidor, debe: - Tener definido en el servidor, el Data Source para conectarse a la base de datos. - Tener definido en el archivo GXCS.INI (ubicado en el directorio de Windows del servidor) la entrada de GXLOGIN para dicho datasource. (No olvidar que para web panels c/s es siempre necesario el GX login porque de otro modo el dialogo se muestra en pantalla en el servidor y se tranca el web panel ). Además, debe tener derecho de lectura a este archivo. - Tener configurado en el cliente de la Base de Datos ( Sql Server, Oracle, etc) el protocolo de red que se va a usar (TCP/IP, IPX/SPX, etc) IMPORTANTE: Tener en cuenta que todas estas configuraciones en NT son POR USUARIO, o sea que si estoy logueado como JUAN por ej., defino un data source, indico el protocolo de comunicacion al odbc, el nombre del servidor etc. Todo eso es válido para el usuario JUAN, que es diferente al usuario que se conecta al servidor a traves del WEB (probablemente el IUSR_nameserver). Por este motivo, deberían logearse como el usuario que accederá a los web panels para realizar estos seteos. Test de configuración Para confirmar que todo esto funcione correctamente, conviene loguearse con el usuario que usa el Web Server, y tratar de comunicarse con la base de datos (si no esta en el mismo servidor, ver si se puede ver el servidory usando alguna utilidad SQL - ODBCTest, SQLPlus, etc - probar si se puede acceder a la Base de datos) II. Archivos necesarios Para ejecutar Web Panels en Visual Basic se requieren los siguientes archivos en el servidor de Web:
- Los propios web panels, es decir los archivos copiados automáticamente por el RUN de GeneXus (del directorio de datos del modelo al directorio especificado en la Option CGI_Bin Path). Para el caso VB 4.0 son los *.WBP y *.CGI mientras que para VB 5.0 son los EXE - Para VB 4.0 32 bits, se requiere el archivo WEBIFCE.DLL en el directorio winnt\system del servidor. Esta DLL es de GeneXus, por lo que se instala automáticamente en dicho directorio si GeneXus se instala en ese servidor, de lo contrario deberá copiarse en forma manual. - La base de datos local (gx_data.mdb). Este archivo debe copiarse en forma manual al directorio donde están los web panels (es decir el directorio especificado en la Option CGI_BIN Path). - DLLs para funciones (GXUTL, etc), DLLS Client server Para esto, conviene crear un Setup Wizard de una aplicación mínima que acceda a la misma base de datos que los web panels (por ejemplo un work panel que despliegue los datos de alguna de las tablas o alguna de estas transacciones) y luego ejecutar este setup para instalar así, dicha aplicación en el directorio de los Web panels (es decir el directorio especificado en la Option CGI_Bin Path). Con esto, garantizamos que desde ese directorio puede ejecutarse una aplicación C/S que accede a la misma base de datos que los web panels. NOTA: Se piensa implementar un Setup Wizard para los web panels.- - Archivo GXCS.INI En este archivo es necesario que exista la sección creada para el GXLogin correspondiente al datasource que utiliza la aplicación. Pruebas de configuración. 1) Comunicación con el servidor. Conviene verificar que realmente exista comunicación entre el equipo cliente (donde se ejecuta el Web Browser) y el servidor de Web: Chequear que la dirección TCP/IP haya sido correctamente instalada en el equipo cliente. Puede ejecutarse un PING a alguna dirección IP. Conviene probar tambien con la dirección del servidor Web. Chequear que el servidor de dominios esté correctamente instalado, ejecutando un PING del equipo cliente al nombre del dominio (Por ejemplo www.artech.com.uy). Acceder al servidor Web desde el browser del equipo cliente. 2) Configuración del directorio CGI-BIN Path. Es un directorio del Servidor, donde están los web panels generados con Visual Basic. Debe estar configurado en el IIS (Internet Informationm Server o en el Web Server que se esté utilizando) como directorio de ejecución (y no como directorio de lectura, ya que si se define como de lectura no lo ejecuta remotamente, sino que lo intenta salvar al disco local del cliente) Para poder testear si toda la configuración del server está OK, se pueden usar los programas de prueba que se encuentran en el servidor ftp de ARTech en el directorio: ftp://ftp.artech.com.uy/gxutl/webtest o también en el CD de la versión 6.0 de GeneXus. Para realizar las pruebas se debe realizar lo siguiente: a) Copiar los tres archivos a su directorio CGI-BIN (el mismo que actualmente contiene sus web panels generados con GeneXus). b) Ejecutar algún web browser (Netscape o Internet Explorer) c) Cargar el penv.exe. Es decir, en la URL escribir la dirección para ver este programa (algo así como "http://artech.com.uy/.../cgi-bin/penv.exe") En la pantalla de Netscape podrán visualizar una página que muestra todos los seteos actuales de su servidor (es una página de prueba). Si no logran ver esta página, puede haber algún problema con los seteos del directorio; tiene que tener permiso de ejecución. d) Si el paso c) funcionó correctamente, cargar el htest1.exe (de la misma manera que el anterior). Esta página es una página de prueba. Simplemente muestra un mensaje "Prueba mínima de funcionamiento". Si no logran ver esta página, puede haber un problema de setup
3) Web Panels C/S de Visual Basic (por el momento se requiere que Visual Basic esté instalado en el servidor) o que en el path no logre ver el directorio...\system del server) En el caso de Web panels C/S, conviene testear la configuración con un web panel local, para verificar que el servidor de internet esta funcionando correctamente. Como dijimos anteriormente, conviene crear un setup Wizard de una aplicación mínima que acceda a la misma base de datos que los web panels (por ejemplo un work panel que despliegue los datos de alguna de las tablas o alguna de estas transacciones) y luego instalar dicho setup en el directorio de los Web panels (es decir el directorio especificado en la Option CGI_Bin Path). Con esto, garantizamos que desde ese directorio puede ejecutarse una aplicación C/S que accede a la misma base de datos que los web panels, por lo que los propios web panels tendrán todo lo necesario para poder resolver la comunicación con la base de datos. 4) Ejecutar Web Panel en el servidor de WEB También puede ser muy útil, ejecutar el Web panel como una aplicación de consola, es decir abrir una ventana de línea de comando y correr el ejecutable de la aplicación para ver si termina correctamente o no. La salida debería ser el código HTML asociado al web panel. Ejemplo: d:\iis\cgi-bin\myaplic> HPRUEBA.EXE Puede ocurrir que al hacer esta prueba aparezca el dialogo de conexión a la base de datos, lo que estaría significando que hay un problema de configuración de la misma, o que no está la sección del GXLOGIN correspondiente al datasource utilizado por la aplicación. Si devuelve un texto HTML este se puede ver redireccionando la salida a un archivo y verificando su contenido desde el Browser. Ejemplo: d:\iis\cgi-bin\myaplic> HPRUEBA.EXE > test.htm La salida va al archivo TEST.HTM y luego éste, puede abrirse con el Web Browser Si la prueba anterior funciona correctamete, se debe revisar que se este logueado con el mismo usuario que está utilizando el Servidor de Web para conectarse a las páginas públicas. Si en el server se esta conectando con GUEST, las pruebas anteriores conviene hacerlas también con GUEST para tener los mismos permisos y seteos que el Web Browser. Si devuelve error, puede ser que en el browser devuelva la página de error. Esto dependiendo del error puede tener varias causas: las mas comunes son que no se encuentren archivos indicados en la sección Archivos Necesarios, es decir : el EXE del web panel, la DLL client server, alguna DLL de ODBC, algun archivo grafico (JPG, o GIF ) que se utiliza en la página, el archivo de datos (gx_data.mdb) Errores Runtime de Visual Basic. Cuando al ejecutar el web panel, aparece un error run time de Visual Basic, normalmente el número de error aparece en la página de error y para tener mayor información del mismo, hay que buscarlo en el help de Visual Basic- 6) Debug de Web Panels. Para debuguear un web panel, existe una entrada no documentada en las preferences del modelo que debe ponerse en la sección de Ejecución del mismo. Debe agregarse en el archivo MODEL.ini del directorio raíz de la base de conocimiento, la línea WEB_DEBUG=Y en la sección [Preferences XXX ] del modelo Visual Basic que tiene los web panels y luego generarse forzado los web panels. Ejemplo:
[Preferences XXX YY] //XXX es el número del modelo Visual Basic //YY es el número del generador Visual Basic SQL_TABLES=All CS_DSNAME=MyDataSource WEB_DEBUG=Y La entrada web_debug, seteada en Yes, intercala un mensaje en la página de error que indica cual fue la ultima rutina en la que entro antes de dar el error, pero es importante recalcar que este método solo aplica si el error es run time de VB y aparece la pagina indicándolo. 7) Generación de archivo de trace/log Para errores que no sean de runtime Visual Basic, es posible generar un archivo de trace. La manera de hacerlo, es creando un achivo de nombre GXWEB.INI en el directorio winnt del servidor NT con las siguientes lineas: [LOGS] logging=1 level=7 file=myfile.log En tiempo de ejecución de los web panels se generara un archivo llamado myfile.log en el directorio donde se encuentran los web panels en el servidor. Este archivo debería ser enviado a ARTech o a su soporte local, para que sea analizado con el fin de determinar el problema.