📄 s2.model.ts2adapterclientdatamodel.pas
字号:
unit S2.Model.TS2AdapterClientDataModel;
interface
uses
SysUtils, S2.Model.TS2ClientDataModel, S2.Model.IS2DataAdapter, S2.Tools.IS2Field,
S2.Tools.IS2Record, S2.Tools.IS2RecordList, S2.Tools.TS2Object, DB,
Classes, DBClient;
type
TS2AdapterClientDataModel = class(TS2ClientDataModel, IS2DataAdapter)
protected
function ParseDataAdapterError(E: Exception): string;
procedure AfterAppend(O: TS2Object);
procedure AfterCancel(O: TS2Object);
procedure AfterDelete(O: TS2Object);
procedure AfterSave(O: TS2Object);
procedure BeforeAppend(O: TS2Object);
procedure BeforeCancel(O: TS2Object);
procedure BeforeDelete(O: TS2Object);
procedure BeforeSave(O: TS2Object);
private
procedure PrepareAppend;
procedure PrepareCancel;
procedure PrepareDelete;
procedure PrepareSave;
public // S2.Model.IS2DataAdapter
function IsModified: Boolean; virtual;
procedure Append(); overload; virtual;
procedure Append(Data: IS2Field); overload; virtual;
procedure Append(Data: IS2Record); overload; virtual;
procedure Append(Data: IS2RecordList); overload; virtual;
procedure Cancel(); virtual;
procedure Delete(); virtual;
procedure Save(); virtual;
private
procedure ConsolidationUpdateLog;
public
function GetDataAdapter: IS2DataAdapter; override;
end;
implementation
{$R *.dfm}
uses
S2.Error.S2ReadOnlyException, S2.Error.S2PrepareAppendException, S2.Error.S2PrepareCancelException,
S2.Error.S2PrepareDeleteException, S2.Error.S2PrepareSaveException, S2.Error.S2DataAdapterException,
S2.Error.S2AbstractException, S2.Error.S2DataSuncertaintyException;
{ TS2AdapterClientDataModel }
procedure TS2AdapterClientDataModel.AfterAppend(O: TS2Object);
begin
end;
procedure TS2AdapterClientDataModel.AfterCancel(O: TS2Object);
begin
end;
procedure TS2AdapterClientDataModel.AfterDelete(O: TS2Object);
begin
end;
procedure TS2AdapterClientDataModel.AfterSave(O: TS2Object);
begin
end;
procedure TS2AdapterClientDataModel.Append(Data: IS2Record);
begin
raise S2AbstractException.Create(ClassName, 'Append(Data: IS2Record)');
end;
procedure TS2AdapterClientDataModel.Append(Data: IS2Field);
begin
raise S2AbstractException.Create(ClassName, 'Append(Data: IS2Field)');
end;
procedure TS2AdapterClientDataModel.Append;
begin
PrepareAppend;
BeforeAppend(nil);
try
_ClientDataSet.Append;
except
on E: Exception do
raise S2DataAdapterException.Create(ClassName, 'Append', ParseDataAdapterError(E));
end;
AfterAppend(nil);
end;
procedure TS2AdapterClientDataModel.Append(Data: IS2RecordList);
begin
raise S2AbstractException.Create(ClassName, 'Append(Data: IS2RecordList)');
end;
procedure TS2AdapterClientDataModel.BeforeAppend(O: TS2Object);
begin
end;
procedure TS2AdapterClientDataModel.BeforeCancel(O: TS2Object);
begin
end;
procedure TS2AdapterClientDataModel.BeforeDelete(O: TS2Object);
begin
end;
procedure TS2AdapterClientDataModel.BeforeSave(O: TS2Object);
begin
end;
procedure TS2AdapterClientDataModel.Cancel;
begin
PrepareCancel;
BeforeCancel(nil);
try
_ClientDataSet.Cancel;
except
on E: Exception do
raise S2DataAdapterException.Create(ClassName, 'Cancel', ParseDataAdapterError(E));
end;
AfterCancel(nil);
end;
procedure TS2AdapterClientDataModel.ConsolidationUpdateLog;
begin
_ClientDataSet.DisableControls;
try
_ClientDataSet.StatusFilter := [usInserted];
if _ClientDataSet.RecordCount > 0 then GetServerDataModel.Append(_ClientDataSet);
_ClientDataSet.StatusFilter := [usModified];
if _ClientDataSet.RecordCount > 0 then GetServerDataModel.Modify(_ClientDataSet);
_ClientDataSet.StatusFilter := [usDeleted];
if _ClientDataSet.RecordCount > 0 then GetServerDataModel.Delete(_ClientDataSet);
finally
_ClientDataSet.StatusFilter := [];
_ClientDataSet.EnableControls;
end;
end;
procedure TS2AdapterClientDataModel.Delete;
begin
PrepareDelete;
BeforeDelete(TS2Object(GetDataObject.GetData));
try
_ClientDataSet.Delete;
except
on E: Exception do
raise S2DataAdapterException.Create(ClassName, 'Delete', ParseDataAdapterError(E));
end;
AfterDelete(TS2Object(GetDataObject.GetData));
end;
function TS2AdapterClientDataModel.GetDataAdapter: IS2DataAdapter;
begin
Result := Self;
end;
function TS2AdapterClientDataModel.IsModified: Boolean;
var
Bookmark: TBookmark;
begin
Result := False;
Bookmark := _ClientDataSet.GetBookmark;
try
// _ClientDataSet.DisableControls;
_ClientDataSet.StatusFilter := [usModified, usInserted, usDeleted];
if _ClientDataSet.RecordCount > 0 then Result := True;
// _ClientDataSet.GotoBookmark(Bookmark);
_ClientDataSet.FreeBookmark(Bookmark);
finally
_ClientDataSet.StatusFilter := [];
// _ClientDataSet.EnableControls;
end;
end;
function TS2AdapterClientDataModel.ParseDataAdapterError(E: Exception): string;
begin
raise S2AbstractException.Create(ClassName, 'ParseDataAdapterError');
end;
procedure TS2AdapterClientDataModel.PrepareAppend;
begin
if IsReadOnly or not IsActive then
raise S2PrepareAppendException.Create(ClassName, 'PrepareAppend', '')
end;
procedure TS2AdapterClientDataModel.PrepareCancel;
begin
if IsReadOnly or not IsValid or not IsModified then
raise S2PrepareCancelException.Create(ClassName, 'PrepareCancel', '')
end;
procedure TS2AdapterClientDataModel.PrepareDelete;
begin
if IsReadOnly or not IsValid then
raise S2PrepareDeleteException.Create(ClassName, 'PrepareDelete', '')
end;
procedure TS2AdapterClientDataModel.PrepareSave;
begin
if IsReadOnly or not IsValid or not IsModified then
raise S2PrepareSaveException.Create(ClassName, 'PrepareSave', '')
end;
procedure TS2AdapterClientDataModel.Save;
begin
if not IsModified then Exit;
PrepareSave;
if not ValidateData then
raise S2DataSuncertaintyException.Create(ClassName, 'Save');
BeforeSave(nil);
try
ConsolidationUpdateLog;
GetServerDataModel.Save;
except
on E: Exception do
raise S2DataAdapterException.Create(ClassName, 'Save', ParseDataAdapterError(E));
end;
AfterSave(nil);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -