|
@@ -1055,7 +1055,6 @@ type
|
|
FCalcFieldsSize: Longint;
|
|
FCalcFieldsSize: Longint;
|
|
FOnLoadFail: TDatasetLoadFailEvent;
|
|
FOnLoadFail: TDatasetLoadFailEvent;
|
|
FOnRecordResolved: TOnRecordResolveEvent;
|
|
FOnRecordResolved: TOnRecordResolveEvent;
|
|
- FOnRecordResolveEvent: TOnRecordResolveEvent;
|
|
|
|
FOpenAfterRead : boolean;
|
|
FOpenAfterRead : boolean;
|
|
FActiveRecord: Longint;
|
|
FActiveRecord: Longint;
|
|
FAfterCancel: TDataSetNotifyEvent;
|
|
FAfterCancel: TDataSetNotifyEvent;
|
|
@@ -1392,7 +1391,7 @@ type
|
|
property OnEditError: TDataSetErrorEvent read FOnEditError write FOnEditError;
|
|
property OnEditError: TDataSetErrorEvent read FOnEditError write FOnEditError;
|
|
property OnFilterRecord: TFilterRecordEvent read FOnFilterRecord write SetOnFilterRecord;
|
|
property OnFilterRecord: TFilterRecordEvent read FOnFilterRecord write SetOnFilterRecord;
|
|
property OnNewRecord: TDataSetNotifyEvent read FOnNewRecord write FOnNewRecord;
|
|
property OnNewRecord: TDataSetNotifyEvent read FOnNewRecord write FOnNewRecord;
|
|
- Property OnRecordResolved : TOnRecordResolveEvent Read FOnRecordResolved Write FOnRecordResolveEvent;
|
|
|
|
|
|
+ Property OnRecordResolved : TOnRecordResolveEvent Read FOnRecordResolved Write FOnRecordResolved;
|
|
property OnPostError: TDataSetErrorEvent read FOnPostError write FOnPostError;
|
|
property OnPostError: TDataSetErrorEvent read FOnPostError write FOnPostError;
|
|
property OnLoadFail : TDatasetLoadFailEvent Read FOnLoadFail Write FOnLoadFail;
|
|
property OnLoadFail : TDatasetLoadFailEvent Read FOnLoadFail Write FOnLoadFail;
|
|
end;
|
|
end;
|
|
@@ -1597,6 +1596,7 @@ type
|
|
FOriginalStatus : TUpdateStatus;
|
|
FOriginalStatus : TUpdateStatus;
|
|
Protected
|
|
Protected
|
|
Procedure SetStatus(aValue : TUpdateStatus); virtual;
|
|
Procedure SetStatus(aValue : TUpdateStatus); virtual;
|
|
|
|
+ Procedure Reset;
|
|
Public
|
|
Public
|
|
Constructor Create(aProxy : TDataProxy; aDataset : TDataset; aBookmark : TBookMark; AData : JSValue; AStatus : TUpdateStatus); reintroduce;
|
|
Constructor Create(aProxy : TDataProxy; aDataset : TDataset; aBookmark : TBookMark; AData : JSValue; AStatus : TUpdateStatus); reintroduce;
|
|
Procedure Resolve(aData : JSValue);
|
|
Procedure Resolve(aData : JSValue);
|
|
@@ -1824,6 +1824,13 @@ begin
|
|
FStatus:=AValue;
|
|
FStatus:=AValue;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TRecordUpdateDescriptor.Reset;
|
|
|
|
+begin
|
|
|
|
+ FStatus:=FOriginalStatus;
|
|
|
|
+ FResolveError:='';
|
|
|
|
+ FServerData:=Null;
|
|
|
|
+end;
|
|
|
|
+
|
|
constructor TRecordUpdateDescriptor.Create(aProxy: TDataProxy; aDataset: TDataset; aBookmark: TBookMark; AData: JSValue;
|
|
constructor TRecordUpdateDescriptor.Create(aProxy: TDataProxy; aDataset: TDataset; aBookmark: TBookMark; AData: JSValue;
|
|
AStatus: TUpdateStatus);
|
|
AStatus: TUpdateStatus);
|
|
begin
|
|
begin
|
|
@@ -2862,6 +2869,9 @@ end;
|
|
|
|
|
|
Function TDataSet.ResolveRecordUpdate(anUpdate: TRecordUpdateDescriptor) : Boolean;
|
|
Function TDataSet.ResolveRecordUpdate(anUpdate: TRecordUpdateDescriptor) : Boolean;
|
|
|
|
|
|
|
|
+// This must return true if the record may be removed from the list of 'modified' records.
|
|
|
|
+// If it returns false, the record is kept in the list of modified records.
|
|
|
|
+
|
|
begin
|
|
begin
|
|
try
|
|
try
|
|
Result:=DoResolveRecordUpdate(anUpdate);
|
|
Result:=DoResolveRecordUpdate(anUpdate);
|
|
@@ -2869,7 +2879,10 @@ begin
|
|
anUpdate.FStatus:=usResolveFailed;
|
|
anUpdate.FStatus:=usResolveFailed;
|
|
except
|
|
except
|
|
On E : Exception do
|
|
On E : Exception do
|
|
|
|
+ begin
|
|
anUpdate.ResolveFailed(E.Classname+': '+E.Message);
|
|
anUpdate.ResolveFailed(E.Classname+': '+E.Message);
|
|
|
|
+ Result:=False;
|
|
|
|
+ end;
|
|
end;
|
|
end;
|
|
DoOnRecordResolved(anUpdate);
|
|
DoOnRecordResolved(anUpdate);
|
|
end;
|
|
end;
|
|
@@ -2920,13 +2933,15 @@ begin
|
|
if (RUD.Status=usResolved) then
|
|
if (RUD.Status=usResolved) then
|
|
DoRemove:=ResolveRecordUpdate(RUD)
|
|
DoRemove:=ResolveRecordUpdate(RUD)
|
|
else
|
|
else
|
|
- DoRemove:=(RUD.Status in [usUnmodified,usResolveFailed]);
|
|
|
|
- // What if not resolvable.. ?
|
|
|
|
|
|
+ // What if not resolvable.. ?
|
|
|
|
+ DoRemove:=(RUD.Status in [usUnmodified]);
|
|
If DoRemove then
|
|
If DoRemove then
|
|
begin
|
|
begin
|
|
RUD.Free;
|
|
RUD.Free;
|
|
FChangeList.Delete(Idx);
|
|
FChangeList.Delete(Idx);
|
|
- end;
|
|
|
|
|
|
+ end
|
|
|
|
+ else
|
|
|
|
+ RUD.Reset; // So we try it again in next applyupdates.
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
if (FBatchList.Count=0) then
|
|
if (FBatchList.Count=0) then
|