unit ReducedDeltaService_Impl; {----------------------------------------------------------------------------} { This unit was automatically generated by the RemObjects SDK after reading } { the RODL file associated with this project . } { } { This is where you are supposed to code the implementation of your objects. } {----------------------------------------------------------------------------} {$I Remobjects.inc} interface uses {vcl:} Classes, SysUtils, {RemObjects:} uROXMLIntf, uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, {Required:} uRORemoteDataModule, {Ancestor Implementation:} DataAbstractService_Impl, {Used RODLs:} DataAbstract4_Intf, {Generated:} ReducedDeltaLibrary_Intf, uDAClasses, uDADataStreamer, uDABin2DataStreamer, uDABusinessProcessor, uDAScriptingProvider, uDADelta, uDAInterfaces; type { TReducedDeltaService } TReducedDeltaService = class(TDataAbstractService, IReducedDeltaService) Schema: TDASchema; DataStreamer: TDABin2DataStreamer; BusinessProcessor: TDABusinessProcessor; procedure BusinessProcessorBeforeProcessChange( Sender: TDABusinessProcessor; aChangeType: TDAChangeType; aChange: TDADeltaChange; var ProcessChange: Boolean); private procedure Log(str: string); protected { IReducedDeltaService methods } end; implementation {$R *.dfm} uses {Generated:} ReducedDeltaLibrary_Invk,ReducedDeltaServerData, ReducedDeltaServerMain, Variants; procedure Create_ReducedDeltaService(out anInstance : IUnknown); begin anInstance := TReducedDeltaService.Create(nil); end; { TReducedDeltaService } procedure TReducedDeltaService.Log(str: string); begin ReducedDeltaServerMainForm.Log(str); end; procedure TReducedDeltaService.BusinessProcessorBeforeProcessChange( Sender: TDABusinessProcessor; aChangeType: TDAChangeType; aChange: TDADeltaChange; var ProcessChange: Boolean); function _VarToStr(const aValue: variant): string; begin if VarIsEmpty(aValue) then Result:='' else Result:= VarToStr(aValue); end; function _CreateStr(const aStr: string; const aLen:integer): string; begin if Length(aStr) > aLen then Result:=Copy(aStr,1,aLen-3)+'...' else Result:= aStr+ StringOfChar(' ', aLen-Length(aStr)); end; const TDAChangeTypeStr : array [TDAChangeType] of string = ('Insert','Update','Delete'); var i: integer; begin Log('Reduced Delta = '+ BoolToStr(BusinessProcessor.HasReducedDelta,True)); Log('RecID = '+inttostr(aChange.RecID)+', State = ' + TDAChangeTypeStr[aChangeType]); for i:=0 to aChange.Delta.LoggedFieldCount-1 do begin case aChangeType of ctInsert: Log(_CreateStr(aChange.Delta.LoggedFieldNames[i]+':', 15)+ _CreateStr('NEW:'+_VarToStr(aChange.OldValues[i]), 35)); ctUpdate: Log(_CreateStr(aChange.Delta.LoggedFieldNames[i]+':', 15)+ _CreateStr('OLD:'+_VarToStr(aChange.OldValues[i]), 35)+ _CreateStr('NEW:'+_VarToStr(aChange.OldValues[i]), 35)); ctDelete: Log(_CreateStr(aChange.Delta.LoggedFieldNames[i]+':', 15)+ _CreateStr('OLD:'+_VarToStr(aChange.OldValues[i]), 35)); end; end; Log(''); end; initialization TROClassFactory.Create('ReducedDeltaService', Create_ReducedDeltaService, TReducedDeltaService_Invoker); finalization end.