Codeunit 8898 Map Email Source

App
Base Application
Namespace
System.EMail
Versions
18-28

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/OtherCapabilities/Email/MapEmailSource.Codeunit.al79 lines, Copyright (c) Microsoft Corporation. MIT

namespace System.Email;

using Microsoft.Foundation.Attachment;
using Microsoft.Utilities;
using System.Utilities;

codeunit 8898 "Map Email Source"
{
    Access = Internal;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::Email, 'OnShowSource', '', false, false)]
    local procedure OnGetPageForSourceRecord(SourceTableId: Integer; SourceSystemId: Guid; var IsHandled: Boolean)
    var
        PageManagement: Codeunit "Page Management";
        SourceRecordRef: RecordRef;
    begin
        SourceRecordRef.Open(SourceTableId);
        if not SourceRecordRef.GetBySystemId(SourceSystemId) then
            exit;

        if PageManagement.PageRun(SourceRecordRef) then
            IsHandled := true;
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::Email, 'OnFindRelatedAttachments', '', false, false)]
    local procedure FindRelatedAttachments(SourceTableId: Integer; SourceSystemID: Guid; var EmailRelatedAttachments: Record "Email Related Attachment")
    var
        DocumentAttachment: Record "Document Attachment";
        DocumentAttachmentMgmt: Codeunit "Document Attachment Mgmt";
        SourceRecordRef: RecordRef;
    begin
        SourceRecordRef.Open(SourceTableId);
        if not SourceRecordRef.GetBySystemId(SourceSystemID) then
            exit;

        DocumentAttachmentMgmt.SetDocumentAttachmentRelatedFiltersForRecRef(DocumentAttachment, SourceRecordRef);
        if DocumentAttachment.FindSet() then
            repeat
                EmailRelatedAttachments."Attachment Name" :=
                        CopyStr(StrSubstNo(FileFormatTxt, DocumentAttachment."File Name", DocumentAttachment."File Extension"),
                            1,
                            MaxStrLen(EmailRelatedAttachments."Attachment Name")
                        );
                EmailRelatedAttachments."Attachment Table ID" := Database::"Document Attachment";
                EmailRelatedAttachments."Attachment System ID" := DocumentAttachment.SystemId;
                EmailRelatedAttachments.Insert();
            until DocumentAttachment.Next() = 0;
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::Email, 'OnGetAttachment', '', false, false)]
    local procedure InsertAttachment(AttachmentTableID: Integer; AttachmentSystemID: Guid; MessageID: Guid)
    var
        DocAttachment: Record "Document Attachment";
        EmailMessage: Codeunit "Email Message";
        TempBlob: Codeunit "Temp Blob";
        AttachmentInStream: InStream;
        FileName: Text;
    begin
        if (AttachmentTableID <> Database::"Document Attachment") then
            exit;

        if not DocAttachment.GetBySystemId(AttachmentSystemID) then
            exit;

        EmailMessage.Get(MessageID);
        FileName := StrSubstNo(FileFormatTxt, DocAttachment."File Name", DocAttachment."File Extension");

        DocAttachment.GetAsTempBlob(TempBlob);

        if not TempBlob.HasValue() then
            exit;

        TempBlob.CreateInStream(AttachmentInStream);
        EmailMessage.AddAttachment(CopyStr(FileName, 1, 250), DocAttachment.GetContentType(), AttachmentInStream);
    end;

    var
        FileFormatTxt: Label '%1.%2', Comment = '%1=File Name, %2=File Extension', Locked = true;
}