259 lines
6.1 KiB
ObjectPascal
259 lines
6.1 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
|
|
uDataModuleBase, cxControls;
|
|
|
|
{ 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;
|
|
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.
|
|
|