git-svn-id: https://192.168.0.254/svn/Proyectos.Varela_PuntosVenta/trunk@108 1c943782-d109-9647-9548-93b3ac332352
262 lines
6.2 KiB
ObjectPascal
262 lines
6.2 KiB
ObjectPascal
unit uCargarFicheros;
|
||
|
||
interface
|
||
|
||
uses
|
||
Windows, Messages, SysUtils, Classes, Graphics, Controls,
|
||
uROClient, uROClientIntf, uRORemoteService, uROBinMessage,
|
||
uROServiceComponent, uROWinInetHttpChannel, Forms,
|
||
VARELA_Intf, uROTypes, uROEventRepository;
|
||
|
||
type
|
||
TCargarFicherosThread = class(TThread)
|
||
private
|
||
FROMessage: TROBinMessage;
|
||
fROChannel: TROWinInetHTTPChannel;
|
||
fRORemoteService: TRORemoteService;
|
||
FEventReceiver : TROEventReceiver;
|
||
|
||
fOnSuccess: TNotifyEvent;
|
||
fOnError: TNotifyEvent;
|
||
|
||
fLoadOK: Boolean;
|
||
fTimeStarted: TDateTime;
|
||
fErrorText: string;
|
||
fInfoStr: string;
|
||
|
||
FMaxConnectionErrors : Integer;
|
||
FChannelErrorscount: Integer;
|
||
|
||
procedure Run;
|
||
protected
|
||
FNombre : String;
|
||
procedure CargarFicheros; virtual; abstract;
|
||
procedure OnChannelFailure(Sender: TROTransportChannel;
|
||
anException: Exception; var Retry: Boolean);
|
||
procedure OnLoadSuccess; virtual;
|
||
procedure OnLoadError(const ErrorMsg: String); virtual;
|
||
public
|
||
property Nombre : string read FNombre;
|
||
property LoadOK: Boolean read floadOK;
|
||
property TimeStarted: TDateTime read fTimeStarted;
|
||
property ErrorText: string read fErrortext;
|
||
property InfoStr: string read fInfoStr;
|
||
destructor Destroy; override;
|
||
procedure Execute; override;
|
||
constructor Create;
|
||
end;
|
||
|
||
|
||
{ TCargarVentasThread }
|
||
TCargarVentasThread = class(TCargarFicherosThread)
|
||
private
|
||
fEDISalesService: IEDI_Sales;
|
||
|
||
FFicheroCAB : String;
|
||
FFicheroLUG : String;
|
||
FFicheroART : String;
|
||
protected
|
||
procedure CargarFicheros; override;
|
||
public
|
||
destructor Destroy; override;
|
||
constructor Create(const FicheroCAB: String; const FicheroLUG: String;
|
||
const FicheroART: String; aOnLoadSuccess, aOnLoadError: TNotifyEvent);
|
||
end;
|
||
|
||
|
||
{ TCargarInventarioThread }
|
||
TCargarInventarioThread = class(TCargarFicherosThread)
|
||
private
|
||
fEDIInventaryService: IEDI_Inventary;
|
||
|
||
FFicheroCAB : String;
|
||
FFicheroLIN : String;
|
||
FFicheroCANT : String;
|
||
|
||
protected
|
||
procedure CargarFicheros; override;
|
||
public
|
||
destructor Destroy; override;
|
||
constructor Create(const FicheroCAB: String; const FicheroLIN: String;
|
||
const FicheroCANT: String; aOnLoadSuccess, aOnLoadError: TNotifyEvent);
|
||
end;
|
||
|
||
|
||
implementation
|
||
|
||
uses
|
||
uDMBase, cxControls;
|
||
|
||
const
|
||
TIME_OUT = 1000 * 60 * 45; // 45 MINUTOS
|
||
|
||
{ TROThread }
|
||
|
||
destructor TCargarFicherosThread.Destroy;
|
||
begin
|
||
fROChannel.OnFailure := NIL;
|
||
|
||
FreeAndNil(fRORemoteService);
|
||
FreeAndNil(fROChannel);
|
||
FreeAndNil(fROMessage);
|
||
inherited;
|
||
end;
|
||
|
||
procedure TCargarFicherosThread.Run;
|
||
begin
|
||
ShowHourglassCursor;
|
||
try
|
||
CargarFicheros;
|
||
finally
|
||
HideHourglassCursor;
|
||
end;
|
||
end;
|
||
|
||
procedure TCargarFicherosThread.Execute;
|
||
begin
|
||
try
|
||
Run;
|
||
finally
|
||
Self.Destroy;
|
||
end;
|
||
end;
|
||
|
||
procedure TCargarFicherosThread.OnLoadError(const ErrorMsg: String);
|
||
begin
|
||
FErrorText := ErrorMsg;
|
||
if assigned(FOnError) then
|
||
FOnError(Self);
|
||
end;
|
||
|
||
procedure TCargarFicherosThread.OnLoadSuccess;
|
||
begin
|
||
fLoadOK := True;
|
||
if assigned(FOnSuccess) then
|
||
FOnSuccess(Self);
|
||
end;
|
||
|
||
procedure TCargarFicherosThread.OnChannelFailure(
|
||
Sender: TROTransportChannel; anException: Exception; var Retry: Boolean);
|
||
begin
|
||
if FChannelErrorsCount > FMaxConnectionErrors then
|
||
begin
|
||
FErrorText := anException.Message;
|
||
Self.Terminate;
|
||
end
|
||
else
|
||
begin
|
||
Inc(FChannelErrorsCount);
|
||
Sleep(1000);
|
||
Retry := true;
|
||
end;
|
||
end;
|
||
|
||
constructor TCargarFicherosThread.Create;
|
||
begin
|
||
inherited Create(True);
|
||
FMaxConnectionErrors := 5; //try 5 times on channel-error
|
||
fLoadOK := False;
|
||
|
||
fROMessage := TROBinMessage.Create(nil);
|
||
fROChannel := TROWinInetHTTPChannel.Create(NIL);
|
||
fROChannel.OnFailure := OnChannelFailure;
|
||
fROChannel.TargetURL := dmBase.Channel.TargetURL;
|
||
fROChannel.Timeout := TIME_OUT;
|
||
end;
|
||
|
||
{ TCargarVentasThread }
|
||
|
||
procedure TCargarVentasThread.CargarFicheros;
|
||
var
|
||
MsgError : String;
|
||
begin
|
||
try
|
||
if not fEDISalesService.CargarFicheroEDI(FFicheroCAB, FFicheroLUG,
|
||
FFicheroART, MsgError) then
|
||
OnLoadError(MsgError)
|
||
else
|
||
OnLoadSuccess;
|
||
except
|
||
on e: Exception do
|
||
OnLoadError(e.Message);
|
||
end;
|
||
end;
|
||
|
||
constructor TCargarVentasThread.Create(const FicheroCAB, FicheroLUG,
|
||
FicheroART: String; aOnLoadSuccess, aOnLoadError: TNotifyEvent);
|
||
begin
|
||
inherited Create;
|
||
FNombre := 'SLSRPT';
|
||
fRORemoteService := TRORemoteService.Create(nil);
|
||
fRORemoteService.Channel := fROChannel;
|
||
fRORemoteService.Message := fROMessage;
|
||
fRORemoteService.ServiceName := 'EDI_Sales';
|
||
fEDISalesService := fRORemoteService as IEDI_Sales;
|
||
|
||
FFicheroCAB := FicheroCAB;
|
||
FFicheroLUG := FicheroLUG;
|
||
FFicheroART := FicheroART;
|
||
|
||
if assigned(aOnLoadSuccess) then
|
||
fOnSuccess := aOnLoadSuccess;
|
||
if assigned(aOnLoadError) then
|
||
fOnError := aOnLoadError;
|
||
Resume;
|
||
end;
|
||
|
||
destructor TCargarVentasThread.Destroy;
|
||
begin
|
||
FEDISalesService := NIL;
|
||
inherited;
|
||
end;
|
||
|
||
{ TCargarInventarioThread }
|
||
|
||
procedure TCargarInventarioThread.CargarFicheros;
|
||
var
|
||
MsgError : String;
|
||
begin
|
||
inherited;
|
||
try
|
||
if not fEDIInventaryService.CargarFicheroEDI(FFicheroCAB, FFicheroLIN,
|
||
FFicheroCANT, MsgError) then
|
||
OnLoadError(MsgError)
|
||
else
|
||
OnLoadSuccess;
|
||
except
|
||
on e: Exception do
|
||
OnLoadError(e.Message);
|
||
end;
|
||
end;
|
||
|
||
constructor TCargarInventarioThread.Create(const FicheroCAB, FicheroLIN,
|
||
FicheroCANT: String; aOnLoadSuccess, aOnLoadError: TNotifyEvent);
|
||
begin
|
||
inherited Create;
|
||
FNombre := 'INVRPT';
|
||
fRORemoteService := TRORemoteService.Create(nil);
|
||
fRORemoteService.Channel := fROChannel;
|
||
fRORemoteService.Message := fROMessage;
|
||
fRORemoteService.ServiceName := 'EDI_Inventary';
|
||
fEDIInventaryService := fRORemoteService as IEDI_Inventary;
|
||
|
||
FFicheroCAB := FicheroCAB;
|
||
FFicheroLIN := FicheroLIN;
|
||
FFicheroCANT := FicheroCANT;
|
||
|
||
if assigned(aOnLoadSuccess) then
|
||
fOnSuccess := aOnLoadSuccess;
|
||
if assigned(aOnLoadError) then
|
||
fOnError := aOnLoadError;
|
||
Resume;
|
||
end;
|
||
|
||
destructor TCargarInventarioThread.Destroy;
|
||
begin
|
||
fEDIInventaryService := nil;
|
||
inherited;
|
||
end;
|
||
|
||
end.
|
||
|
||
|