Browse Source

* Change AfterApplyUpdates so it gets all resolveinfo from the batch

michael 7 years ago
parent
commit
00300a800d
2 changed files with 14 additions and 9 deletions
  1. 2 2
      demo/fcldb/demorest.lpr
  2. 12 7
      packages/fcl-db/db.pas

+ 2 - 2
demo/fcldb/demorest.lpr

@@ -46,7 +46,7 @@ Type
     function DoEditRecord(aEvent: TJSMouseEvent): boolean;
     procedure DoGetURL(Sender: TComponent; aRequest: TDataRequest; Var aURL: String);
     procedure DoLoadFail(DataSet: TDataSet; ID: Integer; const ErrorMsg: String);
-    procedure DSAfterApplyUpdates(DataSet: TDataSet);
+    procedure DSAfterApplyUpdates(DataSet: TDataSet; Updates: TResolveInfoArray);
     procedure DSOpen(DataSet: TDataSet);
     procedure ResetButtons(Sender: TDataset);
     function SelectRecord(aEvent: TJSMouseEvent): boolean;
@@ -135,7 +135,7 @@ begin
   PanelContent.append(N);
 end;
 
-procedure TForm.DSAfterApplyUpdates(DataSet: TDataSet);
+procedure TForm.DSAfterApplyUpdates(DataSet: TDataSet; Updates : TResolveInfoArray);
 begin
   Window.Alert('Updates applied on server!');
   EName.value:='';

+ 12 - 7
packages/fcl-db/db.pas

@@ -1040,13 +1040,15 @@ type
     _private : JSValue; // for use by descendents of TDataset
   end;
   TResolveInfoArray = Array of TResolveInfo;
-  TOnRecordResolveEvent = Procedure (Sender : TDataset; info : TResolveInfo);
+
+  TOnRecordResolveEvent = Procedure (Sender : TDataset; info : TResolveInfo) of object;
+  TApplyUpdatesEvent = Procedure (Sender : TDataset; info : TResolveInfoArray) of object;
 
 {------------------------------------------------------------------------------}
 
   TDataSet = class(TComponent)
   Private
-    FAfterApplyUpdates: TDatasetNotifyEvent;
+    FAfterApplyUpdates: TApplyUpdatesEvent;
     FAfterLoad: TDatasetNotifyEvent;
     FBeforeApplyUpdates: TDatasetNotifyEvent;
     FBeforeLoad: TDatasetNotifyEvent;
@@ -1190,7 +1192,7 @@ type
     procedure DoBeforeLoad; virtual;
     procedure DoAfterLoad; virtual;
     procedure DoBeforeApplyUpdates; virtual;
-    procedure DoAfterApplyUpdates;virtual;
+    procedure DoAfterApplyUpdates(const ResolveInfo: TResolveInfoArray); virtual;
     function  FieldByNumber(FieldNo: Longint): TField;
     function  FindRecord(Restart{%H-}, GoForward{%H-}: Boolean): Boolean; virtual;
     function  GetBookmarkStr: TBookmarkStr; virtual;
@@ -1384,7 +1386,7 @@ type
     property BeforeLoad : TDatasetNotifyEvent Read FBeforeLoad Write FBeforeLoad;
     Property AfterLoad : TDatasetNotifyEvent Read FAfterLoad Write FAfterLoad;
     Property BeforeApplyUpdates : TDatasetNotifyEvent Read FBeforeApplyUpdates Write FBeforeApplyUpdates;
-    Property AfterApplyUpdates : TDatasetNotifyEvent Read FAfterApplyUpdates Write FAfterApplyUpdates;
+    Property AfterApplyUpdates : TApplyUpdatesEvent Read FAfterApplyUpdates Write FAfterApplyUpdates;
     property AfterRefresh: TDataSetNotifyEvent read FAfterRefresh write FAfterRefresh;
     property OnCalcFields: TDataSetNotifyEvent read FOnCalcFields write FOnCalcFields;
     property OnDeleteError: TDataSetErrorEvent read FOnDeleteError write FOnDeleteError;
@@ -2731,11 +2733,11 @@ begin
     FBeforeApplyUpdates(Self);
 end;
 
-procedure TDataSet.DoAfterApplyUpdates;
+procedure TDataSet.DoAfterApplyUpdates(Const ResolveInfo : TResolveInfoArray);
 
 begin
   If Assigned(FAfterApplyUpdates) then
-    FAfterApplyUpdates(Self);
+    FAfterApplyUpdates(Self,ResolveInfo);
 end;
 
 function TDataSet.FieldByNumber(FieldNo: Longint): TField;
@@ -2912,6 +2914,7 @@ Var
   BI,RI,Idx: integer;
   RUD : TRecordUpdateDescriptor;
   doRemove : Boolean;
+  Resolved : TResolveInfoArray;
 
 begin
   if Assigned(FBatchList) and (aBatch.Dataset=Self) then
@@ -2921,9 +2924,11 @@ begin
   if (BI=-1) then
     Exit;
   FBatchList.Delete(Bi);
+  SetLength(Resolved, aBatch.List.Count);
   For RI:=0 to aBatch.List.Count-1 do
     begin
     RUD:=aBatch.List[RI];
+    Resolved[RI]:=RecordUpdateDescriptorToResolveInfo(RUD);
     aBatch.List.Items[RI]:=Nil;
     Idx:=IndexInChangeList(RUD.Bookmark);
     if (Idx<>-1) then
@@ -2945,7 +2950,7 @@ begin
     end;
   if (FBatchList.Count=0) then
     FreeAndNil(FBatchList);
-  DoAfterApplyUpdates;
+  DoAfterApplyUpdates(Resolved);
 end;
 
 procedure TDataSet.DoApplyUpdates;