Codeunit 610 Data Archive Implementation

App
System Application
Namespace
System.DataAdministration
Versions
19-28

Procedures, 13

Versions171819202122232425262728

Source242526272829

Source in 29

src/System Application/App/Data Archive/src/DataArchiveImplementation.codeunit.al143 lines, Copyright (c) Microsoft Corporation. MIT

// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------

namespace System.DataAdministration;

codeunit 610 "Data Archive Implementation" implements "Data Archive Provider"
{
    Access = Internal;
    InherentEntitlements = X;
    InherentPermissions = X;

    var
        DataArchiveProvider: Interface "Data Archive Provider";
        IsBound: Boolean;
        IsCreated: Boolean;
        StartedSubscriptionToDelete: Boolean;
        NotCreatedYetErr: Label 'The archive must be created or opened first.';
        AlreadyCreatedErr: Label 'The archive has already been created or opened.';
        NoArchivingAppErr: Label 'You need to install an archiving app to use this feature.';
        DataArchiveCategoryLbl: Label 'Data Archive', Locked = true;
        NewDataArchiveLbl: Label 'New Data Archive', Locked = true;

    procedure Create(Description: Text): Integer
    begin
        if IsCreated then
            Error(AlreadyCreatedErr);
        if not IsBound then
            BindImplementation();
        if not IsBound then
            Error(NoArchivingAppErr);
        IsCreated := true;
        exit(DataArchiveProvider.Create(Description));
    end;

    procedure CreateAndStartLoggingDeletions(Description: Text): Integer
    var
        NewEntryNo: Integer;
    begin
        NewEntryNo := Create(Description);
        StartSubscriptionToDelete();
        exit(NewEntryNo);
    end;

    procedure Open(ID: Integer)
    begin
        if IsCreated then
            Error(AlreadyCreatedErr);
        if not IsBound then
            BindImplementation();
        if not IsBound then
            Error(NoArchivingAppErr);
        DataArchiveProvider.Open(ID);
    end;

    procedure Save()
    begin
        TestIsCreated();
        DataArchiveProvider.Save();
        if StartedSubscriptionToDelete then
            StopSubscriptionToDelete();
        Session.LogMessage('0000FG4', NewDataArchiveLbl, Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', DataArchiveCategoryLbl);
    end;

    procedure DiscardChanges()
    begin
        TestIsCreated();
        DataArchiveProvider.DiscardChanges();
    end;

    procedure SaveRecord(var RecordRef: RecordRef)
    begin
        TestIsCreated();
        DataArchiveProvider.SaveRecord(RecordRef);
    end;

    procedure SaveRecord(RecordVariant: Variant)
    begin
        TestIsCreated();
        DataArchiveProvider.SaveRecord(RecordVariant);
    end;

    procedure SaveRecords(var RecordRef: RecordRef)
    begin
        TestIsCreated();
        DataArchiveProvider.SaveRecords(RecordRef);
    end;

    procedure StartSubscriptionToDelete()
    begin
        StartSubscriptionToDelete(true);
    end;

    procedure StartSubscriptionToDelete(ResetSession: Boolean)
    begin
        TestIsCreated();
        if StartedSubscriptionToDelete then
            exit;
        DataArchiveProvider.StartSubscriptionToDelete(ResetSession);
    end;

    procedure StopSubscriptionToDelete()
    begin
        TestIsCreated();
        if not StartedSubscriptionToDelete then
            exit;
        DataArchiveProvider.StopSubscriptionToDelete();
    end;

    procedure DataArchiveProviderExists(): Boolean
    var
        DataArchive: Codeunit "Data Archive";
        ProviderExists: Boolean;
    begin
        DataArchive.OnDataArchiveImplementationExists(ProviderExists);
        exit(ProviderExists);
    end;

    local procedure TestIsCreated()
    begin
        if not IsCreated then
            Error(NotCreatedYetErr);
    end;

    procedure SetDataArchiveProvider(var IDataArchiveProvider: Interface "Data Archive Provider")
    begin
        if not IsBound then
            Error(NoArchivingAppErr);
        DataArchiveProvider := IDataArchiveProvider;
        DataArchiveProvider.SetDataArchiveProvider(DataArchiveProvider);
    end;

    local procedure BindImplementation()
    var
        DataArchive: Codeunit "Data Archive";
        IDataArchiveProvider: Interface "Data Archive Provider";
    begin
        DataArchive.OnDataArchiveImplementationBind(IDataArchiveProvider, IsBound);
        if IsBound then
            SetDataArchiveProvider(IDataArchiveProvider);
    end;
}