Skip to main content

Notifications

Announcements

No record found.

Business Central forum
Suggested answer

EventSubscriber of Table "Email Item" OnBeforeGetBodyText not returning value

Posted on by 380
Hello BC developers,
I m trying to modify word merging document dynamically. 
[EventSubscriber(ObjectType::Table, Database::"Email Item", 'OnBeforeGetBodyText', '', true, true)]

    local procedure OnBeforeGetBodyText(var EmailItem: Record "Email Item"; var Value: Text; var IsHandled: Boolean)
    var
        TempBlob: Codeunit "Temp Blob";
        FileManagement: Codeunit "File Management";
        BodyText: BigText;
        DataStream: InStream;
        BlobInStream: InStream;
        BodyOutStream: OutStream;
        MyHTML: Text;

        Attachments: Codeunit "Temp Blob List";
        AttachmentNames: List of [Text];

        NewBody: Text;
    begin

        MyHTML := '

Custom HTML

'; if not EmailItem.Body.HasValue() and not ((EmailItem."Body File Path" <> '')) then exit; if EmailItem."Body File Path" <> '' then begin //FileManagement.InstreamExportToServerFile(TempBlob, EmailItem."Body File Path"); //FileManagement.BLOBImport(TempBlob, EmailItem."Body File Path"); //TempBlob.CreateInStream(BlobInStream, TextEncoding::UTF8); //EmailItem.Body.CreateOutStream(BodyOutStream); //CopyStream(BodyOutStream, BlobInStream); end; if EmailItem."Plaintext Formatted" then begin EmailItem.Body.CreateInStream(DataStream, TextEncoding::UTF8); BodyText.Read(DataStream); BodyText.GetSubText(Value, 1); end else begin // EmailItem.Body.CreateInStream(DataStream, TextEncoding::UTF8); // DataStream.Read(Value); Clear(Value); EmailItem.Calcfields(Body); If EmailItem.Body.HasValue() then begin EmailItem.Body.CreateInStream(DataStream); DataStream.Read(Value); end; end; Value := MyHTML Value; IsHandled := true; End;
subscribing above method of "Email Item" table is not running nothing in BODY field. Following is the EMAIL ITEM.DAT file
[Scope('OnPrem')]
    procedure GetBodyText() Value: Text
    var
        TempBlob: Codeunit "Temp Blob";
        FileManagement: Codeunit "File Management";
        BodyText: BigText;
        DataStream: InStream;
        BlobInStream: InStream;
        BodyOutStream: OutStream;
        IsHandled: Boolean;
    begin
        // Note this is intended only to get the body in memory - not from the database.
        Value := '';

        IsHandled := false;
        OnBeforeGetBodyText(Rec, Value, IsHandled);
        if IsHandled then
            exit(Value);

        // If the body doesn't have a value, attempt to import the value from the file path, otherwise exit.
        if not Body.HasValue() and not (("Body File Path" <> '') and Exists("Body File Path")) then
            exit;
        if not Body.HasValue() and ("Body File Path" <> '') and Exists("Body File Path") then begin
            FileManagement.BLOBImportFromServerFile(TempBlob, "Body File Path");
            TempBlob.CreateInStream(BlobInStream, TextEncoding::UTF8);
            Body.CreateOutStream(BodyOutStream);
            CopyStream(BodyOutStream, BlobInStream);
        end;

        if "Plaintext Formatted" then begin
            Body.CreateInStream(DataStream, TextEncoding::UTF8);
            BodyText.Read(DataStream);
            BodyText.GetSubText(Value, 1);
        end else begin
            Body.CreateInStream(DataStream, TextEncoding::UTF8);
            DataStream.Read(Value);
        end;

        exit(Value);
    end;
Another subscriber can be possible but there I cannot set body. Only GETTER are there.
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Email", 'OnEnqueuedInOutbox', '', true, true)]
local procedure OnEnqueuedInOutbox(MessageId: Guid)
begin

end;
Please give any idea. 
  • Asif Shahzad Profile Picture
    Asif Shahzad 380 on at
    RE: EventSubscriber of Table "Email Item" OnBeforeGetBodyText not returning value

    yammer is not accepting .tech domain. My work email is xxxxx@abc.tech

  • Asif Shahzad Profile Picture
    Asif Shahzad 380 on at
    RE: EventSubscriber of Table "Email Item" OnBeforeGetBodyText not returning value

    Thank you Marco.

    I m trying to signup at yammer but didn't get verification email at my gmail. should i give work email?

  • Inge M. Bruvik Profile Picture
    Inge M. Bruvik 32,744 Moderator on at
    RE: EventSubscriber of Table "Email Item" OnBeforeGetBodyText not returning value

    What version are you on?

    And you are running on-prem if i read your code correctly?

  • Suggested answer
    Marco Mels Profile Picture
    Marco Mels on at
    RE: EventSubscriber of Table "Email Item" OnBeforeGetBodyText not returning value

    Hello,

    We currently do not have dedicated Dev support via the Dynamics 365 Business Central forums, but I wanted to provide you some additional resources to assist. If you need assistance with debugging or coding I would recommend discussing this on one of our communities.

    www.yammer.com/dynamicsnavdev

    dynamicsuser.net/.../developers

    I will open this up to the community in case they have something to add.

    Thanks.

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Anton Venter – Community Spotlight

Kudos to our October Community Star of the month!

Announcing Our 2024 Season 2 Super Users!

A new season of Super Users has arrived, and we are so grateful for the daily…

Dynamics 365 Community Newsletter - September 2024

Check out the latest community news

Leaderboard

#1
André Arnaud de Calavon Profile Picture

André Arnaud de Cal... 290,564 Super User 2024 Season 2

#2
Martin Dráb Profile Picture

Martin Dráb 228,651 Most Valuable Professional

#3
nmaenpaa Profile Picture

nmaenpaa 101,148

Leaderboard

Featured topics

Product updates

Dynamics 365 release plans