Multi-informatica
   
     

Componentes Delphi

 

 

 

Usando FastReport desde IntraWeb

FastReport es un potente y popular librería de componentes para crear informes.
Si programas en IntraWeb, quizás has pensado en poder obtener bonitos informes pdf, reutilizando informes que tienes desarrollados para un programa DeskTop.

Realmente no es muy complicado, pero si no tienes en cuenta algunos “trucos”, te va a ser difícil alcanzar el resultado.

Veamos como se crearía un informe pdf en una aplicación delphi normal:

 

var pdf: TfrxPDFExport; frreport: TfrxReport;

procedure CrearReport (const nam,resul:String);
begin
frReport.LoadFromFile(nam);
pdf.ShowDialog:=false; //Turn off dialog
pdf.FileName:=resul; frReport.PrepareReport(true);
frReport.export (pdf)
end;

 

El procedimiento CrearReport recibe como parámetro nam ( que es el nombre de la plantilla fr que se quiere listar) y resul que es el nombre del archivo resultado del listado.
Este procedimiento funcionaría perfectamente en un programa desktop ( Por supuesto si se han inicializado los componentes relacionados). Sin embargo si queremos hacer lo mismo en un programa IntraWeb, intentando crear el informe como respuesta a un comando solicitado desde el formulario Web, posiblemente no te funcionara de primeras.
¿ Cual es la causa ? En una aplicación IntraWeb, la respuesta a los comandos solicitados, se procesan en hilos (Threads). Es conocido el problema que hay al generar un formulario, desde un hilo que no sea el hilo principal. (Se produce una “inconsistencia” del formulario generado).

. FastReport necesita crear unos formularios (aunque sean invisibles) para crear los informes. Si nosotros usamos solo algo parecido al codigo1, nuestra aplicación “petará” al intentar crear el informe.
¿Cuál es la solución?
Generaremos un nuevo hilo ( thread), mediante el que sincronizaremos la creación del informe con el hilo principal.

 

type
TIwFastResport = CLASS(TThread)

protected
procedure Execute; override;
public
na,resu:string;
constructor Create (const nas,resus:string);
procedure crear;
end; constructor TIwFastResport.Create (const nas,resus:string);
begin
inherited create (true);
freeonterminate:=false;
na:=nas;
resu:=resus;
end; procedure TIwFastResport.Execute; begin
synchronize (crear);
end; procedure TIwFastResport.crear;
begin
CrearReport (na,resu) end;

 

¿Como se usa este componente?

procedure TFormSample.ExportGen_( na:string; resu:string);
var th:TIwFastResport;
begin
th:=TIwFastResport.create(na,resu);
th.resume;
th.WaitFor;
th.Free;
WebApplication.SendFile(resu,True , 'application/binary', '');
end;

 

 

   

 

   

Zapatec

Teléfono: 978-610539 - Fax: 978-610861 -Trav.Agustina Aragón 1,1e 44002 Teruel ( España ).webmaster

Copyright © 1997-2007 , [Multi-Informatica Teruel, S.L].