Table 60 Document Sending Profile

App
Base Application
Namespace
Microsoft.Foundation.Reporting
Versions
17-28

Fields, 15Keys, 1Procedures, 26Events, 35

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Foundation/Reporting/DocumentSendingProfile.Table.al1161 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.Foundation.Reporting;

using Microsoft.CRM.Outlook;
using Microsoft.EServices.EDocument;
using Microsoft.Purchases.Vendor;
using Microsoft.Sales.Customer;
using Microsoft.Sales.History;
using System.Email;
using System.IO;
using System.Reflection;
using System.Telemetry;
using System.Utilities;

table 60 "Document Sending Profile"
{
    Caption = 'Document Sending Profile';
    LookupPageID = "Document Sending Profiles";
    DataClassification = CustomerContent;

    fields
    {
        field(1; "Code"; Code[20])
        {
            Caption = 'Code';
            ToolTip = 'Specifies a code to identify the document sending method in the system.';
            NotBlank = true;
        }
        field(2; Description; Text[100])
        {
            Caption = 'Description';
            ToolTip = 'Specifies the document sending format.';
        }
        field(10; Printer; Option)
        {
            Caption = 'Printer';
            ToolTip = 'Specifies if and how the document is printed when you choose the Post and Send button. If you choose the Yes (Prompt for Settings) option, the document is printed according to settings that you must make on the printer setup dialog.';
            OptionCaption = 'No,Yes (Prompt for Settings),Yes (Use Default Settings)';
            OptionMembers = No,"Yes (Prompt for Settings)","Yes (Use Default Settings)";
        }
        field(11; "E-Mail"; Option)
        {
            Caption = 'Email';
            ToolTip = 'Specifies if and how the document is attached as a PDF file to an email to the involved customer when you choose the Post and Send button. If you choose the Yes (Prompt for Settings) option, the document is attached to an email according to settings that you must make in the Send Email window.';
            OptionCaption = 'No,Yes (Prompt for Settings),Yes (Use Default Settings)';
            OptionMembers = No,"Yes (Prompt for Settings)","Yes (Use Default Settings)";
        }
        field(12; "E-Mail Attachment"; Enum "Document Sending Profile Attachment Type")
        {
            Caption = 'Email Attachment';
            ToolTip = 'Specifies the type of file to attach.';
        }
        field(13; "E-Mail Format"; Code[20])
        {
            Caption = 'Email Format';
            ToolTip = 'Specifies how customers are set up with their preferred method of sending sales documents.';
            TableRelation = "Electronic Document Format".Code;
        }
        field(15; Disk; Enum "Doc. Sending Profile Disk")
        {
            Caption = 'Disk';
            ToolTip = 'Specify if the document is saved as a PDF file when you choose the Post and Send button.';
        }
        field(16; "Disk Format"; Code[20])
        {
            Caption = 'Disk Format';
            ToolTip = 'Specifies the format of the electronic document.';
            TableRelation = "Electronic Document Format".Code;
        }
        field(20; "Electronic Document"; Enum "Doc. Sending Profile Elec.Doc.")
        {
            Caption = 'Electronic Document';
            ToolTip = 'Specifies if the document is sent as an electronic document that the customer can import into their system when you choose the Post and Send button. To use this option, you must also fill the Electronic Format field. Alternatively, the file can be saved to disk.';
        }
        field(21; "Electronic Format"; Code[20])
        {
            Caption = 'Electronic Format';
            ToolTip = 'Specifies which format to use for electronic document sending. You must fill this field if you selected the Silent option in the Electronic Document field.';
            TableRelation = "Electronic Document Format".Code;
        }
        field(30; Default; Boolean)
        {
            Caption = 'Default';
            ToolTip = 'Specifies if this document sending method will be used as the default method for all customers.';

            trigger OnValidate()
            var
                DocumentSendingProfile: Record "Document Sending Profile";
            begin
                if (xRec.Default = true) and (Default = false) then
                    Error(CannotRemoveDefaultRuleErr);

                DocumentSendingProfile.SetRange(Default, true);
                DocumentSendingProfile.ModifyAll(Default, false, false);
            end;
        }
        field(50; "Send To"; Enum "Doc. Sending Profile Send To")
        {
            Caption = 'Send To';
        }
        field(51; Usage; Enum "Document Sending Profile Usage")
        {
            Caption = 'Usage';
        }
        field(52; "One Related Party Selected"; Boolean)
        {
            Caption = 'One Related Party Selected';
            InitValue = true;

            trigger OnValidate()
            begin
                if not "One Related Party Selected" then begin
                    "Electronic Document" := "Electronic Document"::No;
                    "Electronic Format" := '';
                end;
            end;
        }
        field(60; "Combine Email Documents"; Boolean)
        {
            Caption = 'Combine Email Documents';
            ToolTip = 'Merge selected documents into a single PDF file when you send the documents by email or print them. For example, this reduces the number of documents the recipient must process.';
            InitValue = false;
        }
    }

    keys
    {
        key(Key1; "Code")
        {
            Clustered = true;
        }
    }

    fieldgroups
    {
    }

    trigger OnDelete()
    var
        Customer: Record Customer;
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeOnDelete(Rec, IsHandled);
        if IsHandled then
            exit;

        if Default then
            Error(CannotDeleteDefaultRuleErr);

        Customer.SetRange("Document Sending Profile", Code);
        if Customer.FindFirst() then
            if Confirm(UpdateAssCustomerQst, false, Code) then
                Customer.ModifyAll("Document Sending Profile", '')
            else
                Error(CannotDeleteErr);
    end;

    trigger OnInsert()
    var
        DocumentSendingProfile: Record "Document Sending Profile";
    begin
        DocumentSendingProfile.SetRange(Default, true);
        if not DocumentSendingProfile.FindFirst() then
            Default := true;
    end;

    var
        DefaultCodeTxt: Label 'DEFAULT', Comment = 'Translate as we translate default term in local languages';
        DefaultDescriptionTxt: Label 'Default rule used if no other provided';
#pragma warning disable AA0470
        RecordAsTextFormatterTxt: Label '%1 ; %2';
#pragma warning restore AA0470
        FieldCaptionContentFormatterTxt: Label '%1 (%2)', Comment = '%1=Field Caption (e.g. Email), %2=Field Content (e.g. PDF) so for example ''Email (PDF)''';
        CannotDeleteDefaultRuleErr: Label 'You cannot delete the default rule. Assign other rule to be default first.';
        CannotRemoveDefaultRuleErr: Label 'There must be one default rule in the system. To remove the default property from this rule, assign default to another rule.';
#pragma warning disable AA0470
        UpdateAssCustomerQst: Label 'If you delete document sending profile %1, it will also be deleted on customer cards that use the profile.\\Do you want to continue?';
#pragma warning restore AA0470
        CannotDeleteErr: Label 'Cannot delete the document sending profile.';
        CannotSendMultipleSalesDocsErr: Label 'You can only send one electronic sales document at a time.';
        ProfileSelectionQst: Label 'Confirm the first profile and use it for all selected documents.,Confirm the profile for each document.,Use the default profile for all selected documents without confirmation.', Comment = 'Translation should contain comma separators between variants as ENU value does. No other commas should be there.';
        CustomerProfileSelectionInstrTxt: Label 'Customers on the selected documents might use different document sending profiles. Choose one of the following options: ';
        VendorProfileSelectionInstrTxt: Label 'Vendors on the selected documents might use different document sending profiles. Choose one of the following options: ';
        InvoicesTxt: Label 'Invoices';
        ShipmentsTxt: Label 'Shipments';
        CreditMemosTxt: Label 'Credit Memos';
        ReceiptsTxt: Label 'Receipts';
        JobQuotesTxt: Label 'Project Quotes';
        PurchaseOrdersTxt: Label 'Purchase Orders';

    procedure GetDefaultForCustomer(CustomerNo: Code[20]; var DocumentSendingProfile: Record "Document Sending Profile")
    var
        Customer: Record Customer;
    begin
        if Customer.Get(CustomerNo) then
            if DocumentSendingProfile.Get(Customer."Document Sending Profile") then
                exit;

        GetDefault(DocumentSendingProfile);
    end;

    local procedure GetDefaultSendingProfileForCustomerFromLookup(CustomerNo: Code[20]; var DocumentSendingProfile: Record "Document Sending Profile")
    var
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeGetDefaultSendingProfileForCustomerFromLookup(CustomerNo, DocumentSendingProfile, IsHandled);
        if IsHandled then
            exit;

        GetDefaultForCustomer(CustomerNo, DocumentSendingProfile);
    end;

    local procedure GetDefaultSendingProfileForVendorFromLookup(VendorNo: Code[20]; var DocumentSendingProfile: Record "Document Sending Profile")
    var
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeGetDefaultSendingProfileForVendorFromLookup(VendorNo, DocumentSendingProfile, IsHandled);
        if IsHandled then
            exit;

        DocumentSendingProfile.GetDefaultForVendor(VendorNo, DocumentSendingProfile);
    end;

    procedure GetDefaultForVendor(VendorNo: Code[20]; var DocumentSendingProfile: Record "Document Sending Profile")
    var
        Vendor: Record Vendor;
    begin
        if Vendor.Get(VendorNo) then
            if DocumentSendingProfile.Get(Vendor."Document Sending Profile") then
                exit;

        GetDefault(DocumentSendingProfile);
    end;

    procedure GetDefault(var DefaultDocumentSendingProfile: Record "Document Sending Profile")
    var
        DocumentSendingProfile: Record "Document Sending Profile";
    begin
        DocumentSendingProfile.SetRange(Default, true);
        if not DocumentSendingProfile.FindFirst() then begin
            DocumentSendingProfile.Init();
            DocumentSendingProfile.Validate(Code, DefaultCodeTxt);
            DocumentSendingProfile.Validate(Description, DefaultDescriptionTxt);
            DocumentSendingProfile.Validate("E-Mail", "E-Mail"::"Yes (Prompt for Settings)");
            DocumentSendingProfile.Validate("E-Mail Attachment", "E-Mail Attachment"::PDF);
            DocumentSendingProfile.Validate(Default, true);
            OnGetDefaultOnBeforeDocumentSendingProfileInsert(DocumentSendingProfile);
            DocumentSendingProfile.Insert(true);
        end;

        DefaultDocumentSendingProfile := DocumentSendingProfile;
    end;

    procedure GetRecordAsText(): Text
    var
        RecordAsText: Text;
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeGetRecordAsText(Rec, RecordAsText, IsHandled);
        if IsHandled then
            exit(RecordAsText);

        RecordAsText := '';

        if ("Electronic Document" <> "Electronic Document"::No) and ("Electronic Format" <> '') then
            RecordAsText := StrSubstNo(
                RecordAsTextFormatterTxt,
                StrSubstNo(FieldCaptionContentFormatterTxt, FieldCaption("Electronic Document"), "Electronic Document"), RecordAsText);

        if "E-Mail" <> "E-Mail"::No then
            RecordAsText := StrSubstNo(
                RecordAsTextFormatterTxt,
                StrSubstNo(FieldCaptionContentFormatterTxt, FieldCaption("E-Mail"), "E-Mail Attachment"), RecordAsText);
        if Printer <> Printer::No then
            RecordAsText := StrSubstNo(RecordAsTextFormatterTxt, FieldCaption(Printer), RecordAsText);

        if Disk <> Disk::No then
            RecordAsText := StrSubstNo(
                RecordAsTextFormatterTxt, StrSubstNo(FieldCaptionContentFormatterTxt, FieldCaption(Disk), Disk), RecordAsText);

        OnAfterGetRecordAsText(Rec, RecordAsText, RecordAsTextFormatterTxt, FieldCaptionContentFormatterTxt);

        exit(RecordAsText);
    end;

    procedure WillUserBePrompted(): Boolean
    begin
        exit(
          (Printer = Printer::"Yes (Prompt for Settings)") or
          ("E-Mail" = "E-Mail"::"Yes (Prompt for Settings)"));
    end;

    procedure SetDocumentUsage(DocumentVariant: Variant)
    var
        ElectronicDocumentFormat: Record "Electronic Document Format";
        DocumentUsage: Enum "Electronic Document Format Usage";
    begin
        ElectronicDocumentFormat.GetDocumentFormatUsage(DocumentUsage, DocumentVariant);
        Validate(Usage, DocumentUsage);
    end;

    procedure VerifySelectedOptionsValid()
    var
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeVerifySelectedOptionsValid(Rec, IsHandled);
        if IsHandled then
            exit;

        if "One Related Party Selected" then
            exit;

        if "E-Mail Attachment" <> "E-Mail Attachment"::PDF then
            Error(CannotSendMultipleSalesDocsErr);

        if "Electronic Document".AsInteger() > "Electronic Document"::No.AsInteger() then
            Error(CannotSendMultipleSalesDocsErr);
    end;

    procedure LookupProfile(CustNo: Code[20]; Multiselection: Boolean; ShowDialog: Boolean): Boolean
    var
        DocumentSendingProfile: Record "Document Sending Profile";
        OfficeMgt: Codeunit "Office Management";
    begin
        if OfficeMgt.IsAvailable() then begin
            GetOfficeAddinDefault(Rec, OfficeMgt.AttachAvailable());
            exit(true);
        end;

        GetDefaultSendingProfileForCustomerFromLookup(CustNo, DocumentSendingProfile);
        if ShowDialog then
            exit(RunSelectSendingOptionsPage(DocumentSendingProfile.Code, Multiselection));

        Rec := DocumentSendingProfile;
        exit(true);
    end;

    procedure LookUpProfileVendor(VendorNo: Code[20]; Multiselection: Boolean; ShowDialog: Boolean): Boolean
    var
        DocumentSendingProfile: Record "Document Sending Profile";
        OfficeMgt: Codeunit "Office Management";
    begin
        if OfficeMgt.IsAvailable() then begin
            GetOfficeAddinDefault(Rec, OfficeMgt.AttachAvailable());
            exit(true);
        end;

        GetDefaultSendingProfileForVendorFromLookup(VendorNo, DocumentSendingProfile);
        if ShowDialog then
            exit(RunSelectSendingOptionsPage(DocumentSendingProfile.Code, Multiselection));

        Rec := DocumentSendingProfile;
        exit(true);
    end;

    local procedure RunSelectSendingOptionsPage(DocumentSendingProfileCode: Code[20]; OneRelatedPartySelected: Boolean): Boolean
    var
        TempDocumentSendingProfile: Record "Document Sending Profile" temporary;
    begin
        TempDocumentSendingProfile.Init();
        TempDocumentSendingProfile.Code := DocumentSendingProfileCode;
        TempDocumentSendingProfile.Validate("One Related Party Selected", OneRelatedPartySelected);
        TempDocumentSendingProfile.Insert();

        Commit();
        if PAGE.RunModal(PAGE::"Select Sending Options", TempDocumentSendingProfile) = ACTION::LookupOK then begin
            Rec := TempDocumentSendingProfile;
            exit(true);
        end;

        exit(false);
    end;

    procedure SendCustomerRecords(ReportUsage: Integer; RecordVariant: Variant; DocName: Text[150]; CustomerNo: Code[20]; DocumentNo: Code[20]; CustomerFieldNo: Integer; DocumentFieldNo: Integer)
    var
        DocumentSendingProfile: Record "Document Sending Profile";
        RecRefSource: RecordRef;
        RecRefToSend: RecordRef;
        ProfileSelectionMethod: Option ConfirmDefault,ConfirmPerEach,UseDefault;
        SingleCustomerSelected: Boolean;
        ShowDialog: Boolean;
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeSendCustomerRecords(ReportUsage, RecordVariant, DocName, CustomerNo, DocumentNo, CustomerFieldNo, DocumentFieldNo, IsHandled);
        if not IsHandled then begin
            SingleCustomerSelected := IsSingleRecordSelected(RecordVariant, CustomerNo, CustomerFieldNo);

            if not CheckShowProfileSelectionMethodDialog(SingleCustomerSelected, ProfileSelectionMethod, CustomerNo, true) then
                exit;

            if SingleCustomerSelected or (ProfileSelectionMethod = ProfileSelectionMethod::ConfirmDefault) then begin
                ShowDialog := true;
                OnSendCustomerRecordsOnBeforeLookupProfile(ReportUsage, RecordVariant, CustomerNo, RecRefToSend, SingleCustomerSelected, ShowDialog);
                if DocumentSendingProfile.LookupProfile(CustomerNo, true, ShowDialog) then
                    DocumentSendingProfile.Send(ReportUsage, RecordVariant, DocumentNo, CustomerNo, DocName, CustomerFieldNo, DocumentFieldNo);
            end else begin
                ShowDialog := ProfileSelectionMethod = ProfileSelectionMethod::ConfirmPerEach;
                RecRefSource.GetTable(RecordVariant);
                if RecRefSource.FindSet() then
                    repeat
                        RecRefToSend := RecRefSource.Duplicate();
                        RecRefToSend.CurrentKeyIndex(1);
                        RecRefToSend.SetRecFilter();
                        CustomerNo := RecRefToSend.Field(CustomerFieldNo).Value();
                        DocumentNo := RecRefToSend.Field(DocumentFieldNo).Value();
                        OnSendCustomerRecordsOnBeforeLookupProfile(ReportUsage, RecordVariant, CustomerNo, RecRefToSend, SingleCustomerSelected, ShowDialog);
                        if DocumentSendingProfile.LookupProfile(CustomerNo, true, ShowDialog) then
                            DocumentSendingProfile.Send(ReportUsage, RecRefToSend, DocumentNo, CustomerNo, DocName, CustomerFieldNo, DocumentFieldNo);
                    until RecRefSource.Next() = 0;
            end;
        end;

        OnAfterSendCustomerRecords(ReportUsage, RecordVariant, DocName, CustomerNo, DocumentNo, CustomerFieldNo, DocumentFieldNo);
    end;

    procedure SendVendorRecords(ReportUsage: Integer; RecordVariant: Variant; DocName: Text[150]; VendorNo: Code[20]; DocumentNo: Code[20]; VendorFieldNo: Integer; DocumentFieldNo: Integer)
    var
        DocumentSendingProfile: Record "Document Sending Profile";
        RecRef: RecordRef;
        RecRef2: RecordRef;
        ProfileSelectionMethod: Option ConfirmDefault,ConfirmPerEach,UseDefault;
        SingleVendorSelected: Boolean;
        ShowDialog: Boolean;
        Handled: Boolean;
    begin
        OnBeforeSendVendorRecords(ReportUsage, RecordVariant, DocName, VendorNo, DocumentNo, VendorFieldNo, DocumentFieldNo, Handled);
        if Handled then
            exit;

        SingleVendorSelected := IsSingleRecordSelected(RecordVariant, VendorNo, VendorFieldNo);

        if not CheckShowProfileSelectionMethodDialog(SingleVendorSelected, ProfileSelectionMethod, VendorNo, false) then
            exit;

        if SingleVendorSelected or (ProfileSelectionMethod = ProfileSelectionMethod::ConfirmDefault) then begin
            ShowDialog := true;
            OnSendVendorRecordsOnBeforeLookupProfile(ReportUsage, RecordVariant, VendorNo, RecRef2, SingleVendorSelected, ShowDialog);
            if DocumentSendingProfile.LookUpProfileVendor(VendorNo, true, ShowDialog) then
                DocumentSendingProfile.SendVendor(ReportUsage, RecordVariant, DocumentNo, VendorNo, DocName, VendorFieldNo, DocumentFieldNo);
        end else begin
            ShowDialog := ProfileSelectionMethod = ProfileSelectionMethod::ConfirmPerEach;
            RecRef.GetTable(RecordVariant);
            if RecRef.FindSet() then
                repeat
                    RecRef2 := RecRef.Duplicate();
                    RecRef2.CurrentKeyIndex(1);
                    RecRef2.SetRecFilter();
                    VendorNo := RecRef2.Field(VendorFieldNo).Value();
                    DocumentNo := RecRef2.Field(DocumentFieldNo).Value();
                    OnSendVendorRecordsOnBeforeLookupProfile(ReportUsage, RecordVariant, VendorNo, RecRef2, SingleVendorSelected, ShowDialog);
                    if DocumentSendingProfile.LookUpProfileVendor(VendorNo, true, ShowDialog) then
                        DocumentSendingProfile.SendVendor(ReportUsage, RecRef2, DocumentNo, VendorNo, DocName, VendorFieldNo, DocumentFieldNo);
                until RecRef.Next() = 0;
        end;
    end;

    local procedure CheckShowProfileSelectionMethodDialog(SingleRecordSelected: Boolean; var ProfileSelectionMethod: Option ConfirmDefault,ConfirmPerEach,UseDefault; AccountNo: Code[20]; IsCustomer: Boolean) Result: Boolean
    var
        DocumentSendingProfile: Record "Document Sending Profile";
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeCheckShowProfileSelectionMethodDialog(ProfileSelectionMethod, AccountNo, IsCustomer, Result, IsHandled);
        if IsHandled then
            exit(Result);

        if not SingleRecordSelected then
            if not DocumentSendingProfile.ProfileSelectionMethodDialog(ProfileSelectionMethod, IsCustomer) then
                exit(false);
        exit(true);
    end;

    procedure Send(ReportUsage: Integer; RecordVariant: Variant; DocNo: Code[20]; ToCust: Code[20]; DocName: Text[150]; CustomerFieldNo: Integer; DocumentNoFieldNo: Integer)
    var
        FeatureTelemetry: Codeunit "Feature Telemetry";
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeSend(ReportUsage, RecordVariant, DocNo, ToCust, DocName, CustomerFieldNo, DocumentNoFieldNo, IsHandled);
        if IsHandled then
            exit;

        if Rec."Combine Email Documents" then
            FeatureTelemetry.LogUsage('0000II3', 'Document Sending Profile - Combine PDF', 'Combine');

        UpdateDocumentProfileForRecord(Rec, RecordVariant);
        SendToVAN(RecordVariant);
        SendToPrinter("Report Selection Usage".FromInteger(ReportUsage), RecordVariant, CustomerFieldNo);
        TrySendToEMailGroupedMultipleSelection(
            "Report Selection Usage".FromInteger(ReportUsage), RecordVariant, DocumentNoFieldNo, DocName, CustomerFieldNo, true);
        SendToDisk("Report Selection Usage".FromInteger(ReportUsage), RecordVariant, DocNo, DocName, ToCust);

        OnAfterSend(ReportUsage, RecordVariant, DocNo, ToCust, DocName, CustomerFieldNo, DocumentNoFieldNo, Rec);
        Commit();
    end;

    procedure SendVendor(ReportUsage: Integer; RecordVariant: Variant; DocNo: Code[20]; ToVendor: Code[20]; DocName: Text[150]; VendorNoFieldNo: Integer; DocumentNoFieldNo: Integer)
    var
        FeatureTelemetry: Codeunit "Feature Telemetry";
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeSendVendor(ReportUsage, RecordVariant, DocNo, ToVendor, DocName, VendorNoFieldNo, DocumentNoFieldNo, IsHandled);
        if IsHandled then
            exit;

        if Rec."Combine Email Documents" then
            FeatureTelemetry.LogUsage('0000II4', 'Document Sending Profile - Combine PDF', 'Combine');

        SendToVAN(RecordVariant);
        SendToPrinterVendor("Report Selection Usage".FromInteger(ReportUsage), RecordVariant, VendorNoFieldNo);
        TrySendToEMailGroupedMultipleSelection("Report Selection Usage".FromInteger(ReportUsage), RecordVariant, DocumentNoFieldNo, DocName, VendorNoFieldNo, false);
        SendToDiskVendor("Report Selection Usage".FromInteger(ReportUsage), RecordVariant, DocNo, DocName, ToVendor);

        OnAfterSendVendor(
            ReportUsage, RecordVariant, DocNo, ToVendor, DocName, VendorNoFieldNo, DocumentNoFieldNo, Rec);
        Commit();
    end;

    [Scope('OnPrem')]
    procedure TrySendToVAN(RecordVariant: Variant)
    begin
        "Electronic Document" := "Electronic Document"::"Through Document Exchange Service";
        SendToVAN(RecordVariant);
    end;

    procedure TrySendToPrinter(ReportUsage: Integer; RecordVariant: Variant; CustomerFieldNo: Integer; ShowDialog: Boolean)
    var
        Handled: Boolean;
    begin
        OnBeforeTrySendToPrinter(ReportUsage, RecordVariant, CustomerFieldNo, ShowDialog, Handled);
        if Handled then
            exit;

        if ShowDialog then
            Printer := Printer::"Yes (Prompt for Settings)"
        else
            Printer := Printer::"Yes (Use Default Settings)";

        SendToPrinter("Report Selection Usage".FromInteger(ReportUsage), RecordVariant, CustomerFieldNo);
    end;

    procedure TrySendToPrinterVendor(ReportUsage: Integer; RecordVariant: Variant; VendorNoFieldNo: Integer; ShowDialog: Boolean)
    begin
        if ShowDialog then
            Printer := Printer::"Yes (Prompt for Settings)"
        else
            Printer := Printer::"Yes (Use Default Settings)";

        SendToPrinterVendor("Report Selection Usage".FromInteger(ReportUsage), RecordVariant, VendorNoFieldNo);
    end;

    procedure TrySendToEMail(ReportUsage: Integer; RecordVariant: Variant; DocumentNoFieldNo: Integer; DocName: Text[150]; CustomerFieldNo: Integer; ShowDialog: Boolean)
    var
        Handled: Boolean;
        IsCustomer: Boolean;
    begin
        IsCustomer := true;
        OnBeforeTrySendToEMail(ReportUsage, RecordVariant, DocumentNoFieldNo, DocName, CustomerFieldNo, ShowDialog, Handled, IsCustomer, Rec);
        if Handled then
            exit;

        if ShowDialog then
            "E-Mail" := "E-Mail"::"Yes (Prompt for Settings)"
        else
            "E-Mail" := "E-Mail"::"Yes (Use Default Settings)";

        "E-Mail Attachment" := "E-Mail Attachment"::PDF;

        TrySendToEMailGroupedMultipleSelection(
            "Report Selection Usage".FromInteger(ReportUsage), RecordVariant, DocumentNoFieldNo, DocName, CustomerFieldNo, IsCustomer);
    end;

    procedure TrySendToEMailGroupedMultipleSelection(ReportUsage: Enum "Report Selection Usage"; RecordVariant: Variant; DocumentNoFieldNo: Integer; DocName: Text[150]; CustomerVendorFieldNo: Integer; IsCustomer: Boolean)
    var
        ReportDistributionMgt: Codeunit "Report Distribution Management";
        RecRef: RecordRef;
        RecToSend: RecordRef;
        CustomerNoFieldRef: FieldRef;
        RecToSendCombine: Variant;
        CustomerVendorNos: Dictionary of [Code[20], Code[20]];
        CustomerVendorNo: Code[20];
        DocumentNo: Code[20];
    begin
        RecRef.GetTable(RecordVariant);

        if Rec."Combine Email Documents" then begin
            GetDistinctCustomerVendor(RecRef, CustomerVendorFieldNo, CustomerVendorNos);

            RecToSendCombine := RecordVariant;
            CustomerNoFieldRef := RecRef.Field(CustomerVendorFieldNo);
            foreach CustomerVendorNo in CustomerVendorNos.Keys() do begin
                CustomerNoFieldRef.SetRange(CustomerVendorNo);
                RecRef.FindFirst();
                RecRef.SetTable(RecToSendCombine);

                DocumentNo := GetMultipleDocumentsNo(RecRef, DocumentNoFieldNo);
                DocName := GetMultipleDocumentsName(DocName, ReportUsage, RecRef);
                if IsCustomer then
                    SendToEMail(ReportUsage, RecToSendCombine, DocumentNo, DocName, CustomerVendorNo, CustomerVendorFieldNo)
                else
                    SendToEMailVendor(ReportUsage, RecToSendCombine, DocumentNo, DocName, CustomerVendorNo, CustomerVendorFieldNo);
            end;
        end
        else
            if RecRef.FindSet() then
                repeat
                    RecToSend := RecRef.Duplicate();
                    RecToSend.CurrentKeyIndex(1);
                    RecToSend.SetRecFilter();
                    CustomerVendorNo := RecToSend.Field(CustomerVendorFieldNo).Value();
                    DocumentNo := RecToSend.Field(DocumentNoFieldNo).Value();
                    DocName := ReportDistributionMgt.GetFullDocumentTypeText(RecToSend);
                    if IsCustomer then
                        SendToEMail(ReportUsage, RecToSend, DocumentNo, DocName, CustomerVendorNo, CustomerVendorFieldNo)
                    else
                        SendToEMailVendor(ReportUsage, RecToSend, DocumentNo, DocName, CustomerVendorNo, CustomerVendorFieldNo);
                until RecRef.Next() = 0;
    end;

    local procedure GetMultipleDocumentsNo(RecRef: RecordRef; DocumentNoFieldNo: Integer): Code[20]
    var
        DocumentNoFieldRef: FieldRef;
    begin
        if RecRef.Count > 1 then
            exit('');

        DocumentNoFieldRef := RecRef.Field(DocumentNoFieldNo);
        exit(DocumentNoFieldRef.Value);
    end;

    local procedure GetMultipleDocumentsName(DocName: Text[150]; ReportUsage: Enum "Report Selection Usage"; RecRef: RecordRef): Text[150]
    var
        ReportSelections: Record "Report Selections";
    begin
        if RecRef.Count > 1 then
            case ReportUsage of
                ReportSelections.Usage::"S.Invoice":
                    exit(InvoicesTxt);
                ReportSelections.Usage::"S.Shipment":
                    exit(ShipmentsTxt);
                ReportSelections.Usage::"S.Cr.Memo":
                    exit(CreditMemosTxt);
                ReportSelections.Usage::"S.Ret.Rcpt.":
                    exit(ReceiptsTxt);
                ReportSelections.Usage::JQ:
                    exit(JobQuotesTxt);
                ReportSelections.Usage::"P.Order":
                    exit(PurchaseOrdersTxt);
                else begin
                    OnGetDocumentName(ReportUsage, DocName);
                    exit(DocName);
                end;
            end;

        exit(DocName);
    end;

    local procedure GetDistinctCustomerVendor(RecRef: RecordRef; CustomerVendorFieldNo: Integer; var CustomerVendorNos: Dictionary of [Code[20], Code[20]])
    var
        FieldRef: FieldRef;
        CustomerNo: Code[20];
    begin
        if RecRef.FindSet() then
            repeat
                FieldRef := RecRef.Field(CustomerVendorFieldNo);
                CustomerNo := FieldRef.Value();
                if CustomerVendorNos.Add(CustomerNo, CustomerNo) then;
            until RecRef.Next() = 0;
    end;

    [Scope('OnPrem')]
    procedure TrySendToDisk(ReportUsage: Integer; RecordVariant: Variant; DocNo: Code[20]; DocName: Text[150]; ToCust: Code[20])
    begin
        Disk := Disk::PDF;
        SendToDisk("Report Selection Usage".FromInteger(ReportUsage), RecordVariant, DocNo, DocName, ToCust);
    end;

    procedure SendToVAN(RecordVariant: Variant)
    var
        ReportDistributionManagement: Codeunit "Report Distribution Management";
        SendWithReportDistributionManagement: Boolean;
    begin
        SendWithReportDistributionManagement := true;
        OnSendWithReportDistributionManagement(Rec, SendWithReportDistributionManagement);

        if (not SendWithReportDistributionManagement) or ("Electronic Document" = "Electronic Document"::No) then
            exit;

        ReportDistributionManagement.VANDocumentReport(RecordVariant, Rec);
    end;

    procedure SendToPrinter(ReportUsage: Enum "Report Selection Usage"; RecordVariant: Variant; CustomerNoFieldNo: Integer)
    var
        ReportSelections: Record "Report Selections";
        ShowRequestForm: Boolean;
    begin
        OnBeforeSendToPrinter(Rec, ReportSelections, RecordVariant);

        if Printer = Printer::No then
            exit;

        ShowRequestForm := Printer = Printer::"Yes (Prompt for Settings)";
        ReportSelections.PrintWithDialogForCust(ReportUsage, RecordVariant, ShowRequestForm, CustomerNoFieldNo);
    end;

    local procedure SendToPrinterVendor(ReportUsage: Enum "Report Selection Usage"; RecordVariant: Variant; VendorNoFieldNo: Integer)
    var
        ReportSelections: Record "Report Selections";
        ShowRequestForm: Boolean;
    begin
        if Printer = Printer::No then
            exit;

        ShowRequestForm := Printer = Printer::"Yes (Prompt for Settings)";
        ReportSelections.PrintWithDialogForVend(ReportUsage, RecordVariant, ShowRequestForm, VendorNoFieldNo);
    end;

    local procedure SendToEMail(ReportUsage: Enum "Report Selection Usage"; RecordVariant: Variant; DocNo: Code[20]; DocName: Text[150]; ToCust: Code[20]; DocNoFieldNo: Integer)
    var
        ReportSelections: Record "Report Selections";
        ElectronicDocumentFormat: Record "Electronic Document Format";
        Customer: Record Customer;
        ReportDistributionManagement: Codeunit "Report Distribution Management";
        DocumentMailing: Codeunit "Document-Mailing";
        DataCompression: Codeunit "Data Compression";
        TempBlob: Codeunit "Temp Blob";
        EmailBodyTempBlob: Codeunit "Temp Blob";
        TypeHelper: Codeunit "Type Helper";
        SourceReference: RecordRef;
        ShowDialog: Boolean;
        ClientFilePath: Text[250];
        ClientZipFileName: Text[250];
        SendToEmailAddress: Text[250];
        AttachmentStream: Instream;
        SourceTableIDs, SourceRelationTypes : List of [Integer];
        SourceIDs: List of [Guid];
    begin
        if "E-Mail" = "E-Mail"::No then
            exit;

        ShowDialog := "E-Mail" = "E-Mail"::"Yes (Prompt for Settings)";

        case "E-Mail Attachment" of
            "E-Mail Attachment"::PDF:
                ReportSelections.SendEmailToCust(ReportUsage.AsInteger(), RecordVariant, DocNo, DocName, ShowDialog, ToCust);
            "E-Mail Attachment"::"Electronic Document":
                begin
                    ReportSelections.GetEmailBodyForCust(EmailBodyTempBlob, ReportUsage, RecordVariant, ToCust, SendToEmailAddress);
                    ReportDistributionManagement.SendXmlEmailAttachment(
                      RecordVariant, "E-Mail Format", EmailBodyTempBlob, SendToEmailAddress, ReportUsage);
                end;
            "E-Mail Attachment"::"PDF & Electronic Document":
                begin
                    ElectronicDocumentFormat.SendElectronically(TempBlob, ClientFilePath, RecordVariant, "E-Mail Format");
                    ReportDistributionManagement.CreateOrAppendZipFile(DataCompression, TempBlob, ClientFilePath, ClientZipFileName);
                    ReportSelections.SendToZipForCust(ReportUsage, RecordVariant, DocNo, ToCust, DataCompression);

                    DataCompression.SaveZipArchive(TempBlob);
                    TempBlob.CreateInStream(AttachmentStream);

                    TypeHelper.CopyRecVariantToRecRef(RecordVariant, SourceReference);
                    SourceTableIDs.Add(SourceReference.Number());
                    SourceIDs.Add(SourceReference.Field(SourceReference.SystemIdNo).Value());
                    SourceRelationTypes.Add(Enum::"Email Relation Type"::"Primary Source".AsInteger());

                    if Customer.Get(ToCust) then begin
                        SourceTableIDs.Add(Database::Customer);
                        SourceIDs.Add(Customer.SystemId);
                        SourceRelationTypes.Add(Enum::"Email Relation Type"::"Related Entity".AsInteger());
                    end;

                    ReportSelections.GetEmailBodyForCust(EmailBodyTempBlob, ReportUsage, RecordVariant, ToCust, SendToEmailAddress);

                    DocumentMailing.EmailFile(
                      AttachmentStream, ClientZipFileName, EmailBodyTempBlob, DocNo, SendToEmailAddress, DocName,
                      not ShowDialog, ReportUsage.AsInteger(), SourceTableIDs, SourceIDs, SourceRelationTypes);
                end;
        end;

        OnAfterSendToEMail(Rec, ReportUsage, RecordVariant, DocNo, DocName, ToCust, DocNoFieldNo, ShowDialog);
    end;

    local procedure SendToEmailVendor(ReportUsage: Enum "Report Selection Usage"; RecordVariant: Variant; DocNo: Code[20]; DocName: Text[150]; ToVendor: Code[20]; VendorNoFieldNo: Integer)
    var
        ReportSelections: Record "Report Selections";
        ElectronicDocumentFormat: Record "Electronic Document Format";
        Vendor: Record Vendor;
        ReportDistributionManagement: Codeunit "Report Distribution Management";
        DocumentMailing: Codeunit "Document-Mailing";
        DataCompression: Codeunit "Data Compression";
        TempBlob: Codeunit "Temp Blob";
        EmailBodyTempBlob: Codeunit "Temp Blob";
        SourceReference: RecordRef;
        ShowDialog: Boolean;
        ClientFilePath: Text[250];
        ClientZipFileName: Text[250];
        SendToEmailAddress: Text[250];
        AttachmentStream: Instream;
        SourceTableIDs, SourceRelationTypes : List of [Integer];
        SourceIDs: List of [Guid];
    begin
        if "E-Mail" = "E-Mail"::No then
            exit;

        ShowDialog := "E-Mail" = "E-Mail"::"Yes (Prompt for Settings)";

        case "E-Mail Attachment" of
            "E-Mail Attachment"::PDF:
                ReportSelections.SendEmailToVendor(ReportUsage.AsInteger(), RecordVariant, DocNo, DocName, ShowDialog, ToVendor);
            "E-Mail Attachment"::"Electronic Document":
                begin
                    ReportSelections.GetEmailBodyForVend(EmailBodyTempBlob, ReportUsage, RecordVariant, ToVendor, SendToEmailAddress);
                    ReportDistributionManagement.SendXmlEmailAttachmentVendor(
                      RecordVariant, "E-Mail Format", EmailBodyTempBlob, SendToEmailAddress);
                end;
            "E-Mail Attachment"::"PDF & Electronic Document":
                begin
                    ElectronicDocumentFormat.SendElectronically(TempBlob, ClientFilePath, RecordVariant, "E-Mail Format");
                    ReportDistributionManagement.CreateOrAppendZipFile(DataCompression, TempBlob, ClientFilePath, ClientZipFileName);
                    ReportSelections.SendToZipForVend(ReportUsage, RecordVariant, DocNo, ToVendor, DataCompression);

                    DataCompression.SaveZipArchive(TempBlob);
                    TempBlob.CreateInStream(AttachmentStream);
                    SourceReference := RecordVariant;

                    SourceTableIDs.Add(SourceReference.Number());
                    SourceIDs.Add(SourceReference.Field(SourceReference.SystemIdNo).Value());
                    SourceRelationTypes.Add(Enum::"Email Relation Type"::"Primary Source".AsInteger());

                    if Vendor.Get(ToVendor) then begin
                        SourceTableIDs.Add(Database::Vendor);
                        SourceIDs.Add(Vendor.SystemId);
                        SourceRelationTypes.Add(Enum::"Email Relation Type"::"Related Entity".AsInteger());
                    end;

                    ReportSelections.GetEmailBodyForVend(EmailBodyTempBlob, ReportUsage, RecordVariant, ToVendor, SendToEmailAddress);

                    DocumentMailing.EmailFile(
                      AttachmentStream, ClientZipFileName, EmailBodyTempBlob, DocNo, SendToEmailAddress, DocName,
                      not ShowDialog, ReportUsage.AsInteger(), SourceTableIDs, SourceIDs, SourceRelationTypes);
                end;
        end;

        OnAfterSendToEmailVendor(Rec, ReportUsage, RecordVariant, DocNo, DocName, ToVendor, VendorNoFieldNo, ShowDialog);
    end;

    procedure SendToDisk(ReportUsage: Enum "Report Selection Usage"; RecordVariant: Variant; DocNo: Code[20]; DocName: Text; ToCust: Code[20])
    var
        ReportSelections: Record "Report Selections";
        ElectronicDocumentFormat: Record "Electronic Document Format";
        ReportDistributionManagement: Codeunit "Report Distribution Management";
        DataCompression: Codeunit "Data Compression";
        TempBlob: Codeunit "Temp Blob";
        ClientFilePath: Text[250];
        ClientZipFileName: Text[250];
        IsHandled: Boolean;
    begin
        if Disk = Disk::No then
            exit;

        OnBeforeSendToDisk(ReportUsage.AsInteger(), RecordVariant, DocNo, DocName, ToCust, IsHandled);
        if IsHandled then
            exit;

        case Disk of
            Disk::PDF:
                ReportSelections.SendToDiskForCust(ReportUsage, RecordVariant, DocNo, DocName, ToCust);
            Disk::"Electronic Document":
                begin
                    ElectronicDocumentFormat.SendElectronically(TempBlob, ClientFilePath, RecordVariant, "Disk Format");
                    ReportDistributionManagement.SaveFileOnClient(TempBlob, ClientFilePath);
                end;
            Disk::"PDF & Electronic Document":
                begin
                    ElectronicDocumentFormat.SendElectronically(TempBlob, ClientFilePath, RecordVariant, "Disk Format");
                    ReportDistributionManagement.CreateOrAppendZipFile(DataCompression, TempBlob, ClientFilePath, ClientZipFileName);
                    ReportSelections.SendToZipForCust(ReportUsage, RecordVariant, DocNo, ToCust, DataCompression);
                    SaveZipArchiveToBLOB(DataCompression, TempBlob);

                    ReportDistributionManagement.SaveFileOnClient(TempBlob, ClientZipFileName);
                end;
        end;
    end;

    local procedure SendToDiskVendor(ReportUsage: Enum "Report Selection Usage"; RecordVariant: Variant; DocNo: Code[20]; DocName: Text; ToVendor: Code[20])
    var
        ReportSelections: Record "Report Selections";
        ElectronicDocumentFormat: Record "Electronic Document Format";
        ReportDistributionManagement: Codeunit "Report Distribution Management";
        DataCompression: Codeunit "Data Compression";
        TempBlob: Codeunit "Temp Blob";
        ClientFilePath: Text[250];
        ClientZipFileName: Text[250];
    begin
        if Disk = Disk::No then
            exit;

        case Disk of
            Disk::PDF:
                ReportSelections.SendToDiskForVend(ReportUsage, RecordVariant, DocNo, DocName, ToVendor);
            Disk::"Electronic Document":
                begin
                    ElectronicDocumentFormat.SendElectronically(TempBlob, ClientFilePath, RecordVariant, "Disk Format");
                    ReportDistributionManagement.SaveFileOnClient(TempBlob, ClientFilePath);
                end;
            Disk::"PDF & Electronic Document":
                begin
                    ElectronicDocumentFormat.SendElectronically(TempBlob, ClientFilePath, RecordVariant, "Disk Format");
                    ReportDistributionManagement.CreateOrAppendZipFile(DataCompression, TempBlob, ClientFilePath, ClientZipFileName);
                    ReportSelections.SendToZipForVend(ReportUsage, RecordVariant, DocNo, ToVendor, DataCompression);
                    SaveZipArchiveToBLOB(DataCompression, TempBlob);

                    ReportDistributionManagement.SaveFileOnClient(TempBlob, ClientZipFileName);
                end;
        end;
    end;

    procedure GetOfficeAddinDefault(var TempDocumentSendingProfile: Record "Document Sending Profile" temporary; CanAttach: Boolean)
    begin
        TempDocumentSendingProfile.Init();
        TempDocumentSendingProfile.Code := DefaultCodeTxt;
        TempDocumentSendingProfile.Description := DefaultDescriptionTxt;
        if CanAttach then
            TempDocumentSendingProfile."E-Mail" := TempDocumentSendingProfile."E-Mail"::"Yes (Use Default Settings)"
        else
            TempDocumentSendingProfile."E-Mail" := TempDocumentSendingProfile."E-Mail"::"Yes (Prompt for Settings)";
        TempDocumentSendingProfile."E-Mail Attachment" := TempDocumentSendingProfile."E-Mail Attachment"::PDF;
        TempDocumentSendingProfile.Default := false;
    end;

    procedure ProfileSelectionMethodDialog(var ProfileSelectionMethod: Option ConfirmDefault,ConfirmPerEach,UseDefault; IsCustomer: Boolean): Boolean
    var
        ProfileSelectionInstruction: Text;
    begin
        if IsCustomer then
            ProfileSelectionInstruction := CustomerProfileSelectionInstrTxt
        else
            ProfileSelectionInstruction := VendorProfileSelectionInstrTxt;

        case StrMenu(ProfileSelectionQst, 3, ProfileSelectionInstruction) of
            0:
                exit(false);
            1:
                ProfileSelectionMethod := ProfileSelectionMethod::ConfirmDefault;
            2:
                ProfileSelectionMethod := ProfileSelectionMethod::ConfirmPerEach;
            3:
                ProfileSelectionMethod := ProfileSelectionMethod::UseDefault;
        end;
        exit(true);
    end;

    protected procedure IsSingleRecordSelected(RecordVariant: Variant; CVNo: Code[20]; CVFieldNo: Integer): Boolean
    var
        RecRef: RecordRef;
        FieldRef: FieldRef;
    begin
        RecRef.GetTable(RecordVariant);
        if not RecRef.FindSet() then
            exit(false);

        if RecRef.Next() = 0 then
            exit(true);

        FieldRef := RecRef.Field(CVFieldNo);
        FieldRef.SetFilter('<>%1', CVNo);
        exit(RecRef.IsEmpty);
    end;

    procedure CheckElectronicSendingEnabled()
    var
        DocExchServiceMgt: Codeunit "Doc. Exch. Service Mgt.";
    begin
        if "Electronic Document" <> "Electronic Document"::No then
            if not HasThirdPartyDocExchService() then
                DocExchServiceMgt.CheckServiceEnabled();
    end;

    local procedure HasThirdPartyDocExchService() ExchServiceEnabled: Boolean
    begin
        OnCheckElectronicSendingEnabled(ExchServiceEnabled);
    end;

    local procedure SaveZipArchiveToBLOB(var DataCompression: Codeunit "Data Compression"; var TempBlob: Codeunit "Temp Blob")
    var
        ZipFileOutStream: OutStream;
    begin
        TempBlob.CreateOutStream(ZipFileOutStream);
        DataCompression.SaveZipArchive(ZipFileOutStream);
        DataCompression.CloseZipArchive();
    end;

    local procedure UpdateDocumentProfileForRecord(var DocumentSendingProfile: Record "Document Sending Profile"; RecordVariant: Variant)
    var
        RecordRef: RecordRef;
    begin
        RecordRef.GetTable(RecordVariant);
        if RecordRef.Number in [Database::"Sales Shipment Header", Database::"Return Receipt Header"] then
            UpdateDocumentProfileForCustomer(DocumentSendingProfile);
    end;

    local procedure UpdateDocumentProfileForCustomer(var DocumentSendingProfile: Record "Document Sending Profile")
    begin
        if DocumentSendingProfile."E-Mail Attachment" <> DocumentSendingProfile."E-Mail Attachment"::PDF then begin
            DocumentSendingProfile."E-Mail Attachment" := DocumentSendingProfile."E-Mail Attachment"::PDF;
            DocumentSendingProfile."E-Mail Format" := '';
        end;

        if DocumentSendingProfile.Disk <> DocumentSendingProfile.Disk::No then begin
            DocumentSendingProfile.Disk := DocumentSendingProfile.Disk::PDF;
            DocumentSendingProfile."Disk Format" := '';
        end;

        if (DocumentSendingProfile."Electronic Document" <> DocumentSendingProfile."Electronic Document"::No) then begin
            DocumentSendingProfile."Electronic Document" := DocumentSendingProfile."Electronic Document"::No;
            DocumentSendingProfile."Electronic Format" := '';
        end;
    end;

    [IntegrationEvent(true, false)]
    local procedure OnAfterSend(ReportUsage: Integer; RecordVariant: Variant; DocNo: Code[20]; ToCust: Code[20]; DocName: Text[150]; CustomerFieldNo: Integer; DocumentNoFieldNo: Integer; DocumentSendingProfile: Record "Document Sending Profile")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterSendCustomerRecords(ReportUsage: Integer; RecordVariant: Variant; DocName: Text[150]; CustomerNo: Code[20]; DocumentNo: Code[20]; CustomerFieldNo: Integer; DocumentFieldNo: Integer);
    begin
    end;

    [IntegrationEvent(true, false)]
    local procedure OnAfterSendVendor(ReportUsage: Integer; RecordVariant: Variant; DocNo: Code[20]; ToVendor: Code[20]; DocName: Text[150]; VendorNoFieldNo: Integer; DocumentNoFieldNo: Integer; DocumentSendingProfile: Record "Document Sending Profile")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterSendToEMail(var DocumentSendingProfile: Record "Document Sending Profile"; ReportUsage: Enum "Report Selection Usage"; RecordVariant: Variant; DocNo: Code[20]; DocName: Text[150]; ToCust: Code[20]; DocNoFieldNo: Integer; ShowDialog: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterSendToEmailVendor(var DocumentSendingProfile: Record "Document Sending Profile"; ReportUsage: Enum "Report Selection Usage"; RecordVariant: Variant; DocNo: Code[20]; DocName: Text[150]; ToVendor: Code[20]; VendorNoFieldNo: Integer; ShowDialog: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeCheckShowProfileSelectionMethodDialog(var ProfileSelectionMethod: Option ConfirmDefault,ConfirmPerEach,UseDefault; AccountNo: Code[20]; IsCustomer: Boolean; var Result: Boolean; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeGetDefaultSendingProfileForCustomerFromLookup(CustomerNo: Code[20]; var DocumentSendingProfile: Record "Document Sending Profile"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeGetDefaultSendingProfileForVendorFromLookup(VendorNo: Code[20]; var DocumentSendingProfile: Record "Document Sending Profile"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeGetRecordAsText(DocumentSendingProfile: Record "Document Sending Profile"; var RecordAsText: Text; var Handled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeOnDelete(DocumentSendingProfile: Record "Document Sending Profile"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(true, false)]
    local procedure OnBeforeSend(ReportUsage: Integer; RecordVariant: Variant; DocNo: Code[20]; ToCust: Code[20]; DocName: Text[150]; CustomerFieldNo: Integer; DocumentNoFieldNo: Integer; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeSendCustomerRecords(ReportUsage: Integer; RecordVariant: Variant; DocName: Text[150]; CustomerNo: Code[20]; DocumentNo: Code[20]; CustomerFieldNo: Integer; DocumentFieldNo: Integer; var Handled: Boolean)
    begin
    end;

    [IntegrationEvent(true, false)]
    local procedure OnBeforeSendVendor(ReportUsage: Integer; RecordVariant: Variant; DocNo: Code[20]; ToVendor: Code[20]; DocName: Text[150]; VendorNoFieldNo: Integer; DocumentNoFieldNo: Integer; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeSendVendorRecords(ReportUsage: Integer; RecordVariant: Variant; DocName: Text[150]; VendorNo: Code[20]; DocumentNo: Code[20]; VendorFieldNo: Integer; DocumentFieldNo: Integer; var Handled: Boolean)
    begin
    end;

    [IntegrationEvent(true, false)]
    local procedure OnBeforeSendToDisk(ReportUsage: Integer; RecordVariant: Variant; DocNo: Code[20]; DocName: Text; ToCust: Code[20]; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeTrySendToPrinter(ReportUsage: Integer; RecordVariant: Variant; CustomerFieldNo: Integer; ShowDialog: Boolean; var Handled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeTrySendToEMail(ReportUsage: Integer; RecordVariant: Variant; DocumentNoFieldNo: Integer; DocName: Text[150]; CustomerFieldNo: Integer; var ShowDialog: Boolean; var Handled: Boolean; var IsCustomer: Boolean; var DocumentSendingProfile: Record "Document Sending Profile")
    begin
    end;

    [IntegrationEvent(true, false)]
    local procedure OnCheckElectronicSendingEnabled(var ExchServiceEnabled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnGetDocumentName(ReportUsage: Enum "Report Selection Usage"; var DocumentName: Text[150])
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnGetDefaultOnBeforeDocumentSendingProfileInsert(var DocumentSendingProfile: Record "Document Sending Profile")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnSendCustomerRecordsOnBeforeLookupProfile(ReportUsage: Integer; RecordVariant: Variant; CustomerNo: Code[20]; var RecRefToSend: RecordRef; SingleCustomerSelected: Boolean; var ShowDialog: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnSendVendorRecordsOnBeforeLookupProfile(ReportUsage: Integer; RecordVariant: Variant; VendorNo: Code[20]; var RecRefToSend: RecordRef; SingleVendorSelected: Boolean; var ShowDialog: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeVerifySelectedOptionsValid(var DocumentSendingProfile: Record "Document Sending Profile"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterGetRecordAsText(DocumentSendingProfile: Record "Document Sending Profile"; var RecordAsText: Text; RecordAsTextFormatterTxt: Text; FieldCaptionContentFormatterTxt: Text)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeSendToPrinter(var DocumentSendingProfile: Record "Document Sending Profile"; var ReportSelections: Record "Report Selections"; RecordVariant: Variant)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnSendWithReportDistributionManagement(var DocumentSendingProfile: Record "Document Sending Profile"; var SendWithReportDistributionManagement: Boolean)
    begin
    end;
}