Skip to content

Implementing Multimail Functionality

The implementation of the Multimail functionality within the EDS can be extended to additional pages. Presented below is an example of how to integrate the Multimail feature. This particular implementation is tailored for the page associated with the Sales Invoice Header record. Please note the highlighted lines in the code snippet, these lines should be modified to correspond with the specific record.

AL
action(SIM_EDS_Multimail)
{
    Caption = 'EDS Multimail';
    ToolTip = 'This button sends all marked entries via email. The entries will be sent in case an active EDS dispatch profile is configured for the respective entries.';
    Ellipsis = true;
    Image = SendTo;
    ApplicationArea = All;

    trigger OnAction()
    var
        LocalRecordSIMEDSSetup: Record "SIM_EDS Setup";
        LocalRecordSalesInvoiceHeader: Record "Sales Invoice Header";
        TempLocalRecordSIMEDSRecord: Record "SIM_EDS Record" temporary;
        TempLocalRecordSIMEDSBusinessPartner: Record "SIM_EDS Business Partner" temporary;
        TempLocalRecordSIMEDSDynamicBP: Record "SIM_EDS Dynamic BP" temporary;
        LocalRecordSIMEDSMultimailPreview: Record "SIM_EDS Multimail Preview";
        LocalCodeunitSIMEDSMgt: Codeunit "SIM_EDS Mgt";
        LocalCodeunitSIMEDSQueueMgt: Codeunit "SIM_EDS Queue Mgt";
        LocalCodeunitSIMEDSSI: Codeunit "SIM_EDS SI";
        LocalRecordRef: RecordRef;
        LocalDynamicBusinessMappingExistsBoolean: Boolean;
        LocalNotAllEntriesPossible: Boolean;
        LocalExtendedBusinessMappingExistsBoolean: Boolean;
        LocalEntryNoListOfInteger: List of [Integer];
    begin
        LocalRecordSIMEDSMultimailPreview.DeleteAll();
        LocalCodeunitSIMEDSSI.ClearEntryNoList();
        LocalCodeunitSIMEDSSI.ClearFailedMultimailRecordList();
        LocalCodeunitSIMEDSSI.ClearMultiMailEmailErrorOccured();
        CurrPage.SetSelectionFilter(LocalRecordSalesInvoiceHeader);
        if not LocalRecordSIMEDSSetup.Get() then exit;

        if LocalRecordSalesInvoiceHeader.FindSet() then
            repeat
                LocalRecordRef.GetTable(LocalRecordSalesInvoiceHeader);

                LocalCodeunitSIMEDSMgt.GetRecords(LocalRecordRef, TempLocalRecordSIMEDSRecord);

                LocalCodeunitSIMEDSMgt.GetRecordAssignedData(
                    LocalRecordRef,
                    true,
                    LocalDynamicBusinessMappingExistsBoolean,
                    LocalExtendedBusinessMappingExistsBoolean,
                    TempLocalRecordSIMEDSRecord,
                    TempLocalRecordSIMEDSBusinessPartner,
                    TempLocalRecordSIMEDSDynamicBP,
                    true);

                TempLocalRecordSIMEDSRecord.SetRange("Table No.", LocalRecordRef.Number());
                TempLocalRecordSIMEDSRecord.SetRange("Output Type", TempLocalRecordSIMEDSRecord."Output Type"::"Mail");
                if not TempLocalRecordSIMEDSRecord.IsEmpty then
                    LocalCodeunitSIMEDSQueueMgt.SendEDS(LocalRecordRef, true, false, '', false, false, true)
                else begin
                    LocalNotAllEntriesPossible := true;
                    LocalCodeunitSIMEDSSI.AddFailedMultimailRecordToList(LocalRecordSalesInvoiceHeader.RecordId)
                end;
            until LocalRecordSalesInvoiceHeader.Next() = 0;

        LocalEntryNoListOfInteger := LocalCodeunitSIMEDSSI.GetEntryNoList();

        if LocalEntryNoListOfInteger.Count <> 0 then begin
            if LocalCodeunitSIMEDSMgt.CheckCreatedMultimailEntries(LocalEntryNoListOfInteger) then
                LocalCodeunitSIMEDSMgt.Multimail(LocalEntryNoListOfInteger);
            if LocalNotAllEntriesPossible and not LocalRecordSIMEDSSetup."Use Multimail Preview" then
                Message(GlobalSelectedEnrtiesMultimailNotPossibleLabelTxt);
        end else
            Message(GlobalMultimailNotPossibleLabelMsg);

        if LocalCodeunitSIMEDSSI.GetMultiMailEmailErrorOccured() then
            Message(GlobalMultiMailEmailErrorOccuredLabelTxt);

        LocalCodeunitSIMEDSSI.ClearEntryNoList();
        LocalCodeunitSIMEDSSI.ClearFailedMultimailRecordList();

        LocalRecordSIMEDSMultimailPreview.Reset();
        LocalRecordSIMEDSMultimailPreview.DeleteAll();
    end;
}