Codeunit 6061 Hybrid Deployment Handler, source in 29

Source29

src/Layers/W1/BaseApp/HybridDeploymentHandler.Codeunit.al200 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.Environment;

codeunit 6061 "Hybrid Deployment Handler"
{
    Permissions = TableData "Hybrid Deployment Setup" = rimd;
    SingleInstance = true;

    trigger OnRun()
    begin
    end;

    var
        DotNet_HybridDeployment: Codeunit DotNet_HybridDeployment;
        SourceProduct: Text;
        StartingCreateIntegrationRuntimeMsg: Label 'Starting Create Integration Runtime', Locked = true;
        StartingEnableReplicationMsg: Label 'Starting Enable Replication', Locked = true;
        StartingDisableReplicationMsg: Label 'Starting Disable Replication', Locked = true;
        StartingRunReplicationMsg: Label 'Starting Run Replication', Locked = true;
        StartingRunUpgradeMsg: Label 'Starting Run Upgrade', Locked = true;
        CloudMigrationTok: Label 'CloudMigration', Locked = true;

    local procedure CanHandle(): Boolean
    var
        HybridDeploymentSetup: Record "Hybrid Deployment Setup";
    begin
        if not HybridDeploymentSetup.Get() then begin
            HybridDeploymentSetup.Init();
            HybridDeploymentSetup.Insert();
        end;

        exit(HybridDeploymentSetup."Handler Codeunit ID" = CODEUNIT::"Hybrid Deployment Handler");
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Hybrid Deployment", 'OnCreateIntegrationRuntime', '', false, false)]
    local procedure HandleCreateIntegrationRuntime(var InstanceId: Text)
    begin
        if not CanHandle() then
            exit;

        Session.LogMessage('0000EUS', StartingCreateIntegrationRuntimeMsg, Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CloudMigrationTok);
        InstanceId := DotNet_HybridDeployment.CreateIntegrationRuntime(SourceProduct);
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Hybrid Deployment", 'OnDisableReplication', '', false, false)]
    local procedure HandleDisableReplication(var InstanceId: Text)
    begin
        if not CanHandle() then
            exit;

        Session.LogMessage('0000EUT', StartingDisableReplicationMsg, Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CloudMigrationTok);

        InstanceId := DotNet_HybridDeployment.DisableReplication(SourceProduct);
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Hybrid Deployment", 'OnDisableDataLakeMigration', '', false, false)]
    local procedure HandleDisableDataLakeMigration(var InstanceId: Text)
    begin
        if not CanHandle() then
            exit;

        InstanceId := DotNet_HybridDeployment.DisableDataLakeMigration(SourceProduct);
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Hybrid Deployment", 'OnEnableReplication', '', false, false)]
    local procedure HandleEnableReplication(OnPremiseConnectionString: Text; DatabaseType: Text; IntegrationRuntimeName: Text; NotificationUrl: Text; ClientState: Text; SubscriptionId: Text; ServiceNotificationUrl: Text; ServiceClientState: Text; ServiceSubscriptionId: Text; var InstanceId: Text; SourceCompaniesTableName: Text; SetupMappingsTableName: Text; ReplicationMappingsTableName: Text)
    begin
        if not CanHandle() then
            exit;

        Session.LogMessage('0000EUU', StartingEnableReplicationMsg, Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CloudMigrationTok);

        InstanceId :=
          DotNet_HybridDeployment.EnableReplication(
            SourceProduct, OnPremiseConnectionString, DatabaseType, IntegrationRuntimeName, NotificationUrl, ClientState, SubscriptionId,
            ServiceNotificationUrl, ServiceClientState, ServiceSubscriptionId, SourceCompaniesTableName, SetupMappingsTableName, ReplicationMappingsTableName);
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Hybrid Deployment", 'OnGetIntegrationRuntimeKeys', '', false, false)]
    local procedure HandleGetIntegrationRuntimeKeys(var InstanceId: Text)
    begin
        if not CanHandle() then
            exit;

        InstanceId := DotNet_HybridDeployment.GetIntegrationRuntimeKey(SourceProduct);
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Hybrid Deployment", 'OnGetReplicationRunStatus', '', false, false)]
    local procedure HandleGetReplicationRunStatus(var InstanceId: Text; RunId: Text)
    begin
        if not CanHandle() then
            exit;

        InstanceId := DotNet_HybridDeployment.GetReplicationRunStatus(SourceProduct, RunId);
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Hybrid Deployment", 'OnGetRequestStatus', '', false, false)]
    local procedure HandleGetRequestStatus(InstanceId: Text; var JsonOutput: Text; var Status: Text)
    begin
        if not CanHandle() then
            exit;

        Status := DotNet_HybridDeployment.GetRequestStatus(InstanceId, JsonOutput);
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Hybrid Deployment", 'OnGetVersionInformation', '', false, false)]
    local procedure HandleGetVersionInformation(var InstanceId: Text)
    begin
        if not CanHandle() then
            exit;

        InstanceId := DotNet_HybridDeployment.GetVersionInformation(SourceProduct);
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Hybrid Deployment", 'OnInitialize', '', false, false)]
    local procedure HandleInitialize(SourceProductId: Text)
    begin
        if not CanHandle() then
            exit;

        SourceProduct := SourceProductId;
        DotNet_HybridDeployment.Initialize();
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Hybrid Deployment", 'OnInitiateDataLakeMigration', '', false, false)]
    local procedure HandleInitiateDataLakeMigration(var InstanceId: Text; StorageAccountName: Text; StorageAccountKey: Text)
    begin
        if not CanHandle() then
            exit;

        InstanceId := DotNet_HybridDeployment.InitiateDataLakeMigration(SourceProduct, StorageAccountName, StorageAccountKey);
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Hybrid Deployment", 'OnPrepareTablesForReplication', '', false, false)]
    local procedure HandlePrepareTables()
    var
        EnvironmentInfo: Codeunit "Environment Information";
    begin
        if not CanHandle() then
            exit;

        if EnvironmentInfo.IsSaaS() then
            exit;

        DotNet_HybridDeployment.PrepareTablesForReplication();
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Hybrid Deployment", 'OnRegenerateIntegrationRuntimeKeys', '', false, false)]
    local procedure HandleRegenerateIntegrationRuntimeKeys(var InstanceId: Text)
    begin
        if not CanHandle() then
            exit;

        InstanceId := DotNet_HybridDeployment.RegenerateIntegrationRuntimeKey(SourceProduct);
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Hybrid Deployment", 'OnRunReplication', '', false, false)]
    local procedure HandleRunReplication(var InstanceId: Text; ReplicationType: Integer)
    begin
        if not CanHandle() then
            exit;

        Session.LogMessage('0000EUV', StartingRunReplicationMsg, Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CloudMigrationTok);

        InstanceId := DotNet_HybridDeployment.RunReplication(SourceProduct, ReplicationType)
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Hybrid Deployment", 'OnRunUpgrade', '', false, false)]
    local procedure HandleRunUpgrade(var InstanceId: Text)
    begin
        if not CanHandle() then
            exit;

        Session.LogMessage('0000EUW', StartingRunUpgradeMsg, Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', CloudMigrationTok);
        InstanceId := DotNet_HybridDeployment.RunUpgrade(SourceProduct)
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Hybrid Deployment", 'OnSetReplicationSchedule', '', false, false)]
    local procedure HandleSetReplicationSchedule(ReplicationFrequency: Text; DaysToRun: Text; TimeToRun: Time; Activate: Boolean; var InstanceId: Text)
    begin
        if not CanHandle() then
            exit;

        InstanceId := DotNet_HybridDeployment.SetReplicationSchedule(SourceProduct, ReplicationFrequency, DaysToRun, TimeToRun, Activate);
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Hybrid Deployment", 'OnStartDataUpgrade', '', false, false)]
    local procedure HandleStartDataUpgrade()
    begin
        if not CanHandle() then
            exit;

        DotNet_HybridDeployment.StartDataUpgrade();
    end;
}