Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions src/Apps/W1/DataArchive/App/src/DataArchiveProvider.Codeunit.al
Original file line number Diff line number Diff line change
Expand Up @@ -135,15 +135,25 @@ codeunit 605 "Data Archive Provider" implements "Data Archive Provider"
if RecRef.FindSet() then
repeat
TableJson.Add(GetRecordJsonFromRecRef(RecRef, FieldList));
if TableJson.Count() >= 1000 then begin
AddToCachedDataRecords(TableJson, TableIndex);
SaveTable(TableIndex, RecRef.Number);
Clear(TableJson);
end;
until RecRef.Next() = 0;
end else
TableJson.Add(GetRecordJsonFromRecRef(RecRef, FieldList));
AddToCachedDataRecords(TableJson, TableIndex);
if TableJson.Count() >= 1000 then
SaveTable(TableIndex, RecRef.Number);
end;

local procedure AddToCachedDataRecords(var TableJson: JsonArray; TableIndex: Integer)
begin
if CachedDataRecords.Count >= TableIndex then
CachedDataRecords.Set(TableIndex, TableJson)
else
CachedDataRecords.Add(TableIndex, TableJson);
if TableJson.Count() >= 10000 then
SaveTable(TableIndex, RecRef.Number);
end;

procedure StartSubscriptionToDelete()
Expand Down
40 changes: 40 additions & 0 deletions src/Apps/W1/DataArchive/Test/TestDataArchiveImpl.codeunit.al
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

namespace System.Test.DataAdministration;

using Microsoft.Foundation.Address;
using Microsoft.Sales.Customer;
using System.DataAdministration;
using System.TestLibraries.Utilities;
Expand Down Expand Up @@ -75,6 +76,25 @@ codeunit 139504 "Test Data Archive Impl."
Assert.IsTrue(DataArchiveTable."Table Fields (json)".HasValue(), 'The table fields field is empty.');
end;

[Test]
[TransactionModel(TransactionModel::AutoRollback)]
procedure TestSaveRecordsWithSplit()
var
DataArchiveTable: Record "Data Archive Table"; // data archive app
CurrCount: Integer;
NewArchiveNo: Integer;
begin
CurrCount := DataArchiveTable.Count();
NewArchiveNo := CreateLargeArchive(); // >1100 records
Assert.AreNotEqual(0, NewArchiveNo, 'New archive returned 0');
Assert.AreEqual(CurrCount + 2, DataArchiveTable.Count(), 'Expected exactly two extra archive records.');
DataArchiveTable.SetRange("Data Archive Entry No.", NewArchiveNo);
DataArchiveTable.FindFirst();
Assert.AreEqual(1000, DataArchiveTable."No. of Records", 'Wrong no. of records.');
Assert.IsTrue(DataArchiveTable."Table Data (json)".HasValue(), 'The table data field is empty.');
Assert.IsTrue(DataArchiveTable."Table Fields (json)".HasValue(), 'The table fields field is empty.');
end;

[Test]
[TransactionModel(TransactionModel::AutoRollback)]
procedure TestSaveSaveAsCSV()
Expand Down Expand Up @@ -158,4 +178,24 @@ codeunit 139504 "Test Data Archive Impl."
DataArchiveInterface.Save();
exit(NewArchiveNo);
end;

local procedure CreateLargeArchive(): Integer
var
CountryRegion: Record "Country/Region";
DataArchiveInterface: Codeunit "Data Archive"; // System App
RecRef: RecordRef;
NewArchiveNo: Integer;
i: Integer;
begin
NewArchiveNo := DataArchiveInterface.Create('New Archive');
for i := 1 to 1100 do begin
CountryRegion.Code := Format(100000 + i);
CountryRegion.Name := CountryRegion.Code;
if CountryRegion.Insert() then;
end;
RecRef.GetTable(CountryRegion);
DataArchiveInterface.SaveRecords(RecRef); // should trigger a split after the first 1000 records
DataArchiveInterface.Save(); // save the remaining
exit(NewArchiveNo);
end;
}
Loading