Sobre el uso de esta clase podemos encontrar documentación en el HELP de VFP9 SP2, y otro tanto en la Web. Pero lo que no vamos a encontrar es documentación relacionada con algunos problemas que se dan al implementar de esta clase en nuestros proyectos. Encontraran eso sí la exposición del problema pero no la solución.
Estos errores estan relacionados a las constantes:
"FRX_OBJTYP_BAND"
y "FRX_PLATFORM_WINDOWS"
. Estas constantes viene declaradas en el archivo de cabecera "foxpro_reporting.h"
que se encuentra en la carpeta FFC (donde también se ubica la librería de clases VCX _Reportlistener, a la cual pertenece la clase HtmlListener.Yendonos al punto, expondré el ejemplo típico que encontraremos en la web.
LOCAL loListener loListener =.null. *-- Asegurarse de que no existe el archivo HTML ERASE SalidaHTML.HTM *-- Crear la clase Listener SET CLASSLIB TO HOME() + 'FFC\_REPORTLISTENER' loListener = CREATEOBJECT('htmlListener') DO (_reportoutput) WITH 5,loListener *-- Configurar algunas propiedades loListener.TargetFileName = 'SalidaHTML' REPORT FORMHasta aquí muy bien, es probable que en su ambiente de desarrollo no tengan ningún problema; pero cuando ya están incluyendo estas líneas en su proyecto, y lo corren desde el EXE, pueda que aun les corra sin problema (aun que yo si los tuve) pero al llevarlo a distribución la cosa cambia. Más adelante expondré que necesitamos ademas un parche de Windows.OBJECT loListener
Ahora expondré el código que me soluciono el problema de las constantes no encontradas, en el cual veremos que obviamos algunas líneas de código.
LOCAL loListener loListener =.null. *-- Asegurarse de que no existe el archivo HTML ERASE SalidaHTML.HTM DO (_reportoutput) WITH 5,loListener *-- Configurar algunas propiedades loListener.QuietMode = .T. loListener.TargetFileName = 'SalidaHTML' Erase (loListener.TargetFileName) REPORT FORMAlgunas aclaracionesOBJECT loListener
Resulta que la línea de código :
DO (_reportoutput) WITH 5,loListener
al generar el proyecto no incluye el archivo "reportoutput.app"
, por lo que nuestro proyecto no incluirá otras librerías de clases necesarias, la solución para ello es hacer que forzosamente "reportoutput.app"
sea incluido en el proyecto, de la siguiente manera:EXTERNAL FILE HOME() + 'reportoutput.app'En sí el problema es que nunca se incluye en nuestros proyecto las clases que
"reportoutput.app"
invoca al correrlo, siendo así que entre las cosas que no se generan van las constantes descritas al inicio como errores en corrida.Yo concluyo que el ejemplo típico forzando la inclusión de
"reportoutput.app"
en el proyecto debería funcionar, pero con el código que expuse que me dio solución al problema nos ahorramos un par de lineas:*-- Crear la clase Listener SET CLASSLIB TO HOME() + 'FFC\_REPORTLISTENER' loListener = CREATEOBJECT('htmlListener')Estas no son necesarias ya que "reportaoutput" hace el trabajo por nosotros.
He de manifestar mi agradecimiento a Edwin Duran, que respondió a unos de mis hilos en el foro, enviandome además un conjunto de programas que generaban un archivo PDF a partir de uin reporte FRX, pero que casualmente ahí venia el ejemplo para generar HTML con HtmlListener, que fue el que al final me soluciono el problema, quedando así demostrado como "san foxito" no proveer muchas soluciones útiles para nuestras aplicaciones.
Agrego como nota final en link para bajar la actualización del MSXML4, que es un componente esencial para que ReportListener nos de resultados que esperamos.
*** MSXML 4.0 Service Pack 2 (Servicios principales de Microsoft XML) ***
http://www.microsoft.com/downloads/details.aspx?displaylang=es&FamilyID=3144b72b-b4f2-46da-b4b6-c5d7485f2b42
Saludos,
William Hernández
Santiago de Chile
Hola William...he creado un archivo xml con (_reportoutput) y el archivo que genera no tiene ningún esquema en particular. Podrías indicarme alguna dirección en donde tenga algún ejemplo como para que se le indique el esque que debe seguir la generación del archivo XML. Desde ya muchas gracias.
ResponderBorrar