Componentes.Terceros.UserCo.../official/2.31RC1/UCHistorico/UCHistDataset.pas
2009-02-27 17:12:01 +00:00

267 lines
8.3 KiB
ObjectPascal

unit UCHistDataset;
interface
uses SysUtils, Classes, UCHist_Type,UCHist_Base,Forms, Db, UCConsts_Language;
Type
TUCHist_DataSet = class(TComponent)
private
fDataSet: TDataSet;
fOnNewRecord ,
fOnBeforeDelete ,
fOnBeforeEdit ,
fOnAfterPost : TDataSetNotifyEvent;
fOptions: TUCHistOptions;
fControl: TUCControlHistorico;
procedure SetDataSet(const Value: TDataSet);
procedure SetfControl(const Value: TUCControlHistorico);
{ Private declarations }
protected
DataSetInEdit : Boolean;
AFields : Array of Variant;
procedure NewRecord(DataSet: TDataSet);
procedure BeforeDelete(DataSet: TDataSet);
procedure BeforeEdit(DataSet: TDataSet);
procedure AfterPost(DataSet: TDataSet);
procedure AddHistory( AppID , Form , FormCaption, Event , Obs , TableName : String; UserId : Integer );
Function GetValueFields : String;
procedure Loaded; override;
procedure Notification(AComponent: TComponent; AOperation: TOperation);override;
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
{ Public declarations }
published
{ Published declarations }
Property DataSet : TDataSet Read fDataSet Write SetDataSet;
Property ControlHistorico : TUCControlHistorico read fControl write SetfControl;
end;
implementation
procedure TUCHist_DataSet.AddHistory(AppID, Form, FormCaption, Event, Obs,
TableName: String; UserId: Integer);
begin
If fControl.Active then
fControl.UserControl.DataConnector.UCExecSQL
(
Format('INSERT INTO %s VALUES( %s, %d , %s , %s , %s , %s ,%s ,%s , %s )',
[ fControl.TableHistory.TableName ,
QuotedStr(AppID),
UserID,
QuotedStr( FormatDateTime('dd/mm/yyyy',date) ),
QuotedStr( FormatDateTime('hh:mm:ss',time) ),
QuotedStr( Form ),
QuotedStr( FormCaption ),
QuotedStr( Event ),
QuotedStr( Obs ) ,
QuotedStr( TableName )
]));
end;
procedure TUCHist_DataSet.AfterPost(DataSet: TDataSet);
begin
If Assigned( fOnAfterPost ) then
fOnAfterPost( DataSet );
If ( ( DataSetInEdit = False ) and ( fControl.Options.SavePostInsert ) ) then // quando inserindo
AddHistory(fControl.UserControl.ApplicationID,
Screen.ActiveCustomForm.Name ,
Screen.ActiveCustomForm.Caption ,
fControl.HistoryMsg.Evento_Insert,
GetValueFields,
DataSet.Name,
fControl.UserControl.CurrentUser.UserID);
If ( ( DataSetInEdit = True ) and ( fControl.Options.SavePostEdit ) ) then // quando editando
AddHistory(fControl.UserControl.ApplicationID,
Screen.ActiveCustomForm.Name ,
Screen.ActiveCustomForm.Caption ,
fControl.HistoryMsg.Evento_Edit,
GetValueFields,
DataSet.Name,
fControl.UserControl.CurrentUser.UserID);
DataSetInEdit := False;
SetLength( AFields , 0 );
end;
procedure TUCHist_DataSet.Assign(Source: TPersistent);
begin
if Source is TUCHist_DataSet then
begin
Self.DataSet := TUCHist_DataSet(Source).DataSet;
Self.ControlHistorico := TUCHist_DataSet(Source).ControlHistorico;
end
else
inherited;
end;
procedure TUCHist_DataSet.BeforeDelete(DataSet: TDataSet);
begin
If Assigned( fOnBeforeDelete ) then
fOnBeforeDelete( DataSet );
DataSetInEdit := False;
SetLength( AFields , 0 );
If fControl.Options.SaveDelete then
AddHistory(fControl.UserControl.ApplicationID,
Screen.ActiveCustomForm.Name ,
Screen.ActiveCustomForm.Caption ,
fControl.HistoryMsg.Evento_Delete,
GetValueFields,
DataSet.Name,
fControl.UserControl.CurrentUser.UserID);
end;
procedure TUCHist_DataSet.BeforeEdit(DataSet: TDataSet);
Var I : Integer;
begin
// Antes de Editar
If Assigned( fOnBeforeEdit ) then
fOnBeforeEdit( DataSet );
DataSetInEdit := True;
SetLength( AFields , DataSet.FieldCount );
For I := 0 to DataSet.FieldCount - 1 do
Begin
If DataSet.Fields[ I ].IsBlob = False then
AFields[ i ] := DataSet.Fields[ i ].Value
else AFields[ I ] := 'Blob';
End;
end;
constructor TUCHist_DataSet.Create(AOwner: TComponent);
begin
inherited;
DataSetInEdit := False;
fOptions := TUCHistOptions.Create(Self);
fDataSet := Nil;
fControl := Nil;
end;
destructor TUCHist_DataSet.Destroy;
begin
FreeAndNil( fOptions );
inherited;
end;
function TUCHist_DataSet.GetValueFields: String;
Var Aux : Integer;
begin
Result := '';
For Aux := 0 to DataSet.FieldCount - 1 do
Begin
If DataSet.Fields[ Aux ].IsBlob = False then
Begin
With DataSet.Fields[ Aux ] do
Begin
If DataSetInEdit = false then // inserindo ou deletando
try Result := Result + Format('%-20s = %s ',[ FieldName , AsString ] ) + #13#10; except end
else
Begin //editando
If fControl.Options.TypeSavePostEdit = tpSaveModifiedFields then
Begin
If Value <> AFields[ Aux ] then
try Result := Result + Format('%s||%s||%s',[FieldNAme, AFields[ Aux ] , Value ] ) + #13#10; except end;
End
else
try Result := Result + Format('%s||%s||%s',[FieldNAme, AFields[ Aux ] , Value ] )+ #13#10; except end;
End;
End;
end;
End; // for
end;
procedure TUCHist_DataSet.Loaded;
begin
inherited;
if not(csDesigning in ComponentState) then
begin
if not Assigned( ControlHistorico ) then
raise Exception.Create( Format( RetornaLingua( ucPortuguesBr ,'Const_Hist_MsgExceptPropr'),['ControlHistorico']) );
If fControl.Active = false then exit;
if not Assigned(DataSet) then
raise Exception.Create( Format( RetornaLingua( fControl.UserControl.Language,'Const_Hist_MsgExceptPropr'),['DataSet']) );
fOnNewRecord := Nil;
fOnBeforeDelete := Nil;
fOnBeforeEdit := Nil;
fOnAfterPost := Nil;
If Assigned( DataSet.OnNewRecord ) then
fOnNewRecord := DataSet.OnNewRecord;
If Assigned( DataSet.BeforeDelete ) then
fOnBeforeDelete := DataSet.BeforeDelete;
If Assigned( DataSet.AfterPost ) then
fOnAfterPost := DataSet.AfterPost;
If Assigned( DataSet.BeforeEdit ) then
fOnBeforeEdit := DataSet.BeforeEdit;
DataSet.OnNewRecord := NewRecord;
DataSet.BeforeDelete := BeforeDelete;
DataSet.AfterPost := AfterPost;
DataSet.BeforeEdit := BeforeEdit;
end;
end;
procedure TUCHist_DataSet.NewRecord(DataSet: TDataSet);
begin
If Assigned( fOnNewRecord ) then
fOnNewRecord( DataSet );
DataSetInEdit := False; // Inserindo novo registro
SetLength( AFields , 0 );
If fControl.Options.SaveNewRecord then
AddHistory( fControl.UserControl.ApplicationID,
Screen.ActiveCustomForm.Name ,
Screen.ActiveCustomForm.Caption,
fControl.HistoryMsg.Evento_NewRecord,
Format(RetornaLingua( fControl.UserControl.Language,'Const_Msg_NewRecord'),[fControl.UserControl.CurrentUser.UserName]),
DataSet.Name,
fControl.UserControl.CurrentUser.UserID);
end;
procedure TUCHist_DataSet.Notification(AComponent: TComponent;
AOperation: TOperation);
begin
if (AOperation = opRemove) then
begin
If AComponent = fControl then
fControl := Nil;
if AComponent = fDataSet then
fDataSet := Nil;
end;
inherited Notification(AComponent, AOperation);
end;
procedure TUCHist_DataSet.SetDataSet(const Value: TDataSet);
begin
fDataSet := Value;
if Assigned(Value) then
Value.FreeNotification(Self);
end;
procedure TUCHist_DataSet.SetfControl(const Value: TUCControlHistorico);
begin
fControl := Value;
if Value <> nil then
Value.FreeNotification(self);
end;
end.