Page 1610 Office Add-in Management, source in 29

Source29

src/Layers/W1/BaseApp/CRM/Outlook/OfficeAddinManagement.Page.al182 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 Microsoft.CRM.Outlook;

using System.Integration;
using System.IO;

page 1610 "Office Add-in Management"
{
    ApplicationArea = Basic, Suite;
    Caption = 'Outlook Add-in Management';
    InsertAllowed = false;
    PageType = List;
    SourceTable = "Office Add-in";
    UsageCategory = Administration;
    AdditionalSearchTerms = 'Outlook, Office, O365, Add-in, AddIn, M365, Microsoft 365, Addon, App, Plugin, Manifest';

    layout
    {
        area(content)
        {
            repeater(Control2)
            {
                ShowCaption = false;
                field("Application ID"; Rec."Application ID")
                {
                    ApplicationArea = Basic, Suite;
                    ToolTip = 'Specifies the application that is being added. ';
                    Visible = false;
                }
                field(Name; Rec.Name)
                {
                    ApplicationArea = Basic, Suite;
                    ToolTip = 'Specifies the name of the record.';
                }
                field(Description; Rec.Description)
                {
                    ApplicationArea = Basic, Suite;
                }
                field(Version; Rec.Version)
                {
                    ApplicationArea = Basic, Suite;
                    Editable = false;
                    ToolTip = 'Specifies the version of the record';
                }
                field("Manifest Codeunit"; Rec."Manifest Codeunit")
                {
                    ApplicationArea = Basic, Suite;
                }
            }
        }
    }

    actions
    {
        area(processing)
        {
            action("Upload Default Add-in Manifest")
            {
                ApplicationArea = Basic, Suite;
                Caption = 'Upload Add-in', Comment = 'Action - Uploads a default XML manifest definition';
                Image = Import;
                ToolTip = 'Import an XML manifest file to the add-in. The manifest determines how an add-in is activated in Office applications where it is deployed.';

                trigger OnAction()
                begin
                    UploadManifest();
                end;
            }
            action("Download Add-in Manifest")
            {
                ApplicationArea = Basic, Suite;
                Caption = 'Download Add-in', Comment = 'Action - downloads the XML manifest document for the add-in';
                Image = Export;
                Scope = Repeater;
                ToolTip = 'Export the add-in''s manifest to an XML file. You can then modify the manifest and upload it again.';

                trigger OnAction()
                begin
                    CheckManifest(Rec);
                    AddinManifestManagement.DownloadManifestToClient(Rec, StrSubstNo('%1.xml', Rec.Name));
                end;
            }
            action("Outlook add-in centralized deployment")
            {
                ApplicationArea = Basic, Suite;
                Caption = 'Set up Centralized Deployment';
                Image = Setup;
                ToolTip = 'Deploy Business Central Outlook Add-ins for specific users, groups, or the entire organization.';
                RunObject = Page "Outlook Centralized Deployment";
                RunPageMode = Edit;
            }
            action("Reset Default Add-ins")
            {
                ApplicationArea = Basic, Suite;
                Caption = 'Reset Default Add-ins';
                Image = Restore;
                ToolTip = 'Reset the system add-ins to their default state.';

                trigger OnAction()
                begin
                    if Confirm(ResetWarningQst) then
                        AddinManifestManagement.CreateDefaultAddins(Rec);
                end;
            }
        }
        area(Promoted)
        {
            group(Category_Process)
            {
                Caption = 'Process';

                actionref("Upload Default Add-in Manifest_Promoted"; "Upload Default Add-in Manifest")
                {
                }
                actionref("Download Add-in Manifest_Promoted"; "Download Add-in Manifest")
                {
                }
                actionref("Outlook add-in centralized deployment_Promoted"; "Outlook add-in centralized deployment")
                {
                }
                actionref("Reset Default Add-ins_Promoted"; "Reset Default Add-ins")
                {
                }
            }
        }
    }

    trigger OnInit()
    var
        AddinManifestManagement: Codeunit "Add-in Manifest Management";
    begin
        if Rec.IsEmpty() then
            AddinManifestManagement.CreateDefaultAddins(Rec);
    end;

    var
        UploadManifestTxt: Label 'Upload default manifest';
        MissingManifestErr: Label 'Cannot find a default manifest for add-in %1. To upload an XML file with the manifest, choose Upload Default Add-in Manifest.', Comment = '%1=The name of an office add-in.';
        OverwriteManifestQst: Label 'The uploaded manifest matches the existing item with name %1, would you like to overwrite it with the values from the uploaded manifest?', Comment = '%1: An Office Add-in name.';
        AddinManifestManagement: Codeunit "Add-in Manifest Management";
        ResetWarningQst: Label 'This will restore the original add-in manifest for each of the default add-ins. Are you sure you want to continue?';

    local procedure CheckManifest(var OfficeAddin: Record "Office Add-in")
    begin
        if not OfficeAddin."Default Manifest".HasValue and (OfficeAddin."Manifest Codeunit" = 0) then
            Error(MissingManifestErr, OfficeAddin.Name);
    end;

    local procedure UploadManifest()
    var
        OfficeAddin: Record "Office Add-in";
        TempOfficeAddin: Record "Office Add-in" temporary;
        FileManagement: Codeunit "File Management";
        ManifestLocation: Text;
    begin
        // Insert into a temp record so we can do some comparisons
        TempOfficeAddin.Init();
        TempOfficeAddin.Insert();

        ManifestLocation := FileManagement.UploadFile(UploadManifestTxt, '*.xml');

        // If the selected record is new, use that one - otherwise create a new one
        AddinManifestManagement.UploadDefaultManifest(TempOfficeAddin, ManifestLocation);

        // If the uploaded item already exists, overwrite, otherwise insert a new one.
        if not OfficeAddin.Get(TempOfficeAddin."Application ID") then begin
            OfficeAddin.Copy(TempOfficeAddin);
            OfficeAddin.Insert();
        end else
            if DIALOG.Confirm(OverwriteManifestQst, true, OfficeAddin.Name) then begin
                // Persist codeunit and company values when overwriting
                TempOfficeAddin."Manifest Codeunit" := OfficeAddin."Manifest Codeunit";
                OfficeAddin.Copy(TempOfficeAddin);
                OfficeAddin.Modify();
            end;
    end;
}