Codeunit 1655 Office Add-In Sample Emails

App
Base Application
Versions
17-28

Procedures, 2

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/OfficeAddInSampleEmails.Codeunit.al158 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.
// ------------------------------------------------------------------------------------------------
#pragma warning disable AA0247
codeunit 1655 "Office Add-In Sample Emails"
{

    trigger OnRun()
    begin
    end;

    var
        WelcomeTxt: Label 'We are all set up. Welcome to Your business inbox in Outlook!';
        FirstHeaderTxt: Label 'Get business done without leaving Outlook';
        FirstParagraph_Part1Txt: Label 'With %1, your business comes to you directly in Microsoft Outlook. Getting started in Outlook is easy: use the steps below to see how quickly you can create and send documents for your business contacts.', Comment = '%1 = Application Name';
        GetStartedTxt: Label 'Get started with contact insights';
        OutlookHeaderTxt: Label 'In Outlook:';
        OutlookParagraphTxt: Label 'Find %1 in the ribbon, and choose Contact Insights.', Comment = '%1 = Application Name';
        OWAHeaderTxt: Label 'In Outlook on the web:', Comment = 'Outlook on the web is a product name';
        OWAParagraph1Txt: Label 'Choose ''More actions'' ', Comment = 'Trailing space is required. More actions is the text used in OWA - it''s not clear how this would be translated.';
        OWAParagraph2Txt: Label ' in the upper-right corner of the email and choose %1.', Comment = '%1 = Application Name; Opening space is required.';
        SalesQuoteHdrTxt: Label 'Create a sales quote';
        SalesQuoteIntroTxt: Label 'Business Central helps you author email responses by suggesting items and quantities that you can include in an attached document.';
        SalesQuoteInst1Txt: Label 'On the app bar, choose Sales Quote from the New menu';
        SalesQuoteInst2Txt: Label 'Review the items and quantities in Suggested Items list and select those you want to add to the sales quote. You can adjust these directly on the quote.';
        SalesQuoteInst3Txt: Label 'On the document''s action menu, choose Send by Email.';
        SalesQuoteInst4Txt: Label 'Review the mail and attached file before you send it.';
        SalesQuoteInst5Txt: Label 'In the add-in pane, choose the back arrow to return to the customer dashboard.';
        SalesQuoteFirstItemNameTxt: Label 'London Swivel Chair', Comment = 'Special characters such as hyphen, brackets, parentheses and commas are not allowed.';
        SalesQuoteFirstItemQtyTxt: Label '7';
        SalesQuoteSecondItemNameTxt: Label 'Antwerp Conference Table', Comment = 'Special characters such as hyphen, brackets, parentheses and commas are not allowed.';
        SalesQuoteSecondItemQtyTxt: Label '2';
        LineNo1Txt: Label '1.';
        LineNo2Txt: Label '2.';
        LineNo3Txt: Label '3.';
        LineNo4Txt: Label '4.';
        LineNo5Txt: Label '5.';
        OpenParenTxt: Label '(';
        CloseParenTxt: Label ')';
        BrandingFolderTxt: Label 'ProjectMadeira/', Locked = true;
        ResourceNotFoundErr: Label 'Something went wrong while preparing the email template. Please contact your administrator.';
        ResourceNotFoundTelemetryMsg: Label 'The HTML resource ''%1'' was not found.', Locked = true;
        TelemetryCategoryTxt: Label 'OfficeAddIn', Locked = true;

    local procedure LoadHtmlResource(HtmlFile: Text): Text
    var
        Result: Text;
    begin
        Result := NavApp.GetResourceAsText(HtmlFile, TextEncoding::UTF8);
        if Result = '' then begin
            Session.LogMessage('0000SLI', StrSubstNo(ResourceNotFoundTelemetryMsg, HtmlFile),
             Verbosity::Error, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', TelemetryCategoryTxt);
            Error(ResourceNotFoundErr);
        end;
        exit(Result);
    end;

    local procedure SubstituteHtml(Html: Text): Text
    var
        ItemRec: Record Item;
        SalesLineRec: Record "Sales Line";
        AddinManifestManagement: Codeunit "Add-in Manifest Management";
        Replacements: Dictionary of [Text, Text];
        KeyVar: Text;
    begin
        // Keys are added in descending length order so longest placeholders are replaced first
        Replacements.Add('{{OutlookDesktopIconDiscovery.png}}',
            AddinManifestManagement.GetImageUrl(
                BrandingFolderTxt + 'OutlookDesktopIconDiscovery.png'));

        Replacements.Add('{{SalesQuoteSecondItemNameTxt}}', SalesQuoteSecondItemNameTxt);
        Replacements.Add('{{OutlookWebIconDiscovery.png}}',
            AddinManifestManagement.GetImageUrl(
                BrandingFolderTxt + 'OutlookWebIconDiscovery.png'));

        Replacements.Add('{{SalesQuoteSecondItemQtyTxt}}', SalesQuoteSecondItemQtyTxt);
        Replacements.Add('{{SalesQuoteFirstItemNameTxt}}', SalesQuoteFirstItemNameTxt);

        Replacements.Add('{{SalesQuoteFirstItemQtyTxt}}', SalesQuoteFirstItemQtyTxt);

        Replacements.Add('{{SalesLineQuantityCaption}}',
            SalesLineRec.FieldCaption(Quantity));
        Replacements.Add('{{OutlookWelcomeBanner.png}}',
            AddinManifestManagement.GetImageUrl(
                BrandingFolderTxt + 'OutlookWelcomeBanner.png'));

        Replacements.Add('{{FirstParagraph_Part1Txt}}',
            StrSubstNo(FirstParagraph_Part1Txt, PRODUCTNAME.Short()));

        Replacements.Add('{{OutlookNewDocument.png}}',
            AddinManifestManagement.GetImageUrl(
                BrandingFolderTxt + 'OutlookNewDocument.png'));

        Replacements.Add('{{OutlookParagraphTxt}}',
            StrSubstNo(OutlookParagraphTxt, PRODUCTNAME.Short()));

        Replacements.Add('{{SalesQuoteIntroTxt}}', SalesQuoteIntroTxt);
        Replacements.Add('{{SalesQuoteInst1Txt}}', SalesQuoteInst1Txt);
        Replacements.Add('{{SalesQuoteInst2Txt}}', SalesQuoteInst2Txt);
        Replacements.Add('{{SalesQuoteInst3Txt}}', SalesQuoteInst3Txt);
        Replacements.Add('{{SalesQuoteInst4Txt}}', SalesQuoteInst4Txt);
        Replacements.Add('{{SalesQuoteInst5Txt}}', SalesQuoteInst5Txt);
        Replacements.Add('{{OutlookEllipse.png}}',
            AddinManifestManagement.GetImageUrl(
                BrandingFolderTxt + 'OutlookEllipse.png'));

        Replacements.Add('{{OutlookHeaderTxt}}', OutlookHeaderTxt);
        Replacements.Add('{{ItemTableCaption}}', ItemRec.TableCaption);
        Replacements.Add('{{SalesQuoteHdrTxt}}', SalesQuoteHdrTxt);
        Replacements.Add('{{OWAParagraph1Txt}}', OWAParagraph1Txt);
        Replacements.Add('{{OWAParagraph2Txt}}',
            StrSubstNo(OWAParagraph2Txt, PRODUCTNAME.Short()));

        Replacements.Add('{{FirstHeaderTxt}}', FirstHeaderTxt);

        Replacements.Add('{{GetStartedTxt}}', GetStartedTxt);
        Replacements.Add('{{CloseParenTxt}}', CloseParenTxt);

        Replacements.Add('{{OpenParenTxt}}', OpenParenTxt);
        Replacements.Add('{{OWAHeaderTxt}}', OWAHeaderTxt);

        Replacements.Add('{{MS_Logo.png}}',
            AddinManifestManagement.GetImageUrl(
                BrandingFolderTxt + 'MS_Logo.png'));

        Replacements.Add('{{WelcomeTxt}}', WelcomeTxt);
        Replacements.Add('{{LineNo1Txt}}', LineNo1Txt);
        Replacements.Add('{{LineNo2Txt}}', LineNo2Txt);
        Replacements.Add('{{LineNo3Txt}}', LineNo3Txt);
        Replacements.Add('{{LineNo4Txt}}', LineNo4Txt);
        Replacements.Add('{{LineNo5Txt}}', LineNo5Txt);

        foreach KeyVar in Replacements.Keys do
            Html := Html.Replace(KeyVar, Replacements.Get(KeyVar));

        exit(Html);
    end;

    procedure GetHTMLSampleMsg() HTMLBody: Text
    var
        HtmlTemplate: Text;
    begin
        HtmlTemplate := LoadHtmlResource('HtmlTemplates/OfficeAddInSampleEmailResource.html');
        HTMLBody := SubstituteHtml(HtmlTemplate);
    end;


    procedure GetHTMLSampleMsgNonEvalCompany() HTMLBody: Text
    var
        HtmlTemplate: Text;
    begin
        HtmlTemplate := LoadHtmlResource('HtmlTemplates/OfficeAddInSampleEmailNonEvalCompany.html');
        HTMLBody := SubstituteHtml(HtmlTemplate);
    end;
}