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.