gebuchter Lieferschein als Anhang in EMail senden

20. Oktober 2023 12:31

Moin,

habe die Suche benutzt aber kein Thema gefunden die mir hilft.
Es ist gewünscht, dass der gebuchte Lieferschein als PDF Anhang via E-Mail an einem bestimmten E-Mail Empfänger gesendet wird.
Dazu habe eine Funktion in der Page 130 angelegt was die Emailnachricht sendet. Das funktioniert auch wunderbar

Mein Code ( relativ einfach)

Code:
CLEAR(SMTPMail_lCdu);

txtCRLF := 'XX';
txtCRLF[1] := 13;
txtCRLF[2] := 10;

CompanyInformation.GET;

CustomTabelle.GET;
SmtpMailSetup_lRec.GET; //lokale Variable
Recipients_lTxt := CustomTabelle.MeinEMailEmpfänger;
Subject_lTxt := ('Lieferschein ' + "No.");

SMTPMail_lCdu.CreateMessage('Absender',
                          CustomTabelle.EMailAbsender01,
                          Recipients_lTxt,
                          Subject_lTxt,
                          Body_lTxt,
                          TRUE); // wird definiert ob EMail als HTML formatiert wird oder nicht (FALSE)
SMTPMail_lCdu.AppendBody('Guten Tag,');
SMTPMail_lCdu.AppendBody('<br>');
SMTPMail_lCdu.AppendBody('Im Anhang finden Sie den Lieferschein ' + "No.");
SMTPMail_lCdu.AppendBody('<br><br>');
SMTPMail_lCdu.AppendBody('Mit freundlichen Grüßen');
SMTPMail_lCdu.AppendBody('<br>');
SMTPMail_lCdu.AppendBody('Absender<BR>');
SMTPMail_lCdu.Send;



Nun soll aber der gebuchte Lieferschein was aufgerufen wurde als PDF Anhang mit gesendet werden.
Im Idealfall soll die PDF den Namen Lieferschein+gebuchte Verkaufslieferungnummer (Lieferschein123456.pdf) tragen.

Hat jemand eine Idee wie ich das umsetzen kann?
Herzlichen Dank

Re: gebuchter Lieferschein als Anhang in EMail senden

20. Oktober 2023 12:59

In Codeunit 400 SMTP Mail gibt es die Funktion AddAttachment.
Code:
AddAttachment(Attachment : Text;FileName : Text)
IF Attachment = '' THEN
  EXIT;
IF NOT EXISTS(Attachment) THEN
  ERROR(Text002,Attachment);

FileName := FileManagement.StripNotsupportChrInFileName(FileName);
FileName := DELCHR(FileName,'=',';'); // Used for splitting multiple file names in Mail .NET component

FileManagement.IsAllowedPath(Attachment,FALSE);
Result := Mail.AddAttachmentWithName(Attachment,FileName);

IF Result <> '' THEN
  ShowErrorNotification(AttachErr,Result);

Re: gebuchter Lieferschein als Anhang in EMail senden

20. Oktober 2023 14:07

danke für deine Rückmeldung. Das hatte ich gesehen, aber ich komme damit nicht klar wie man das einbindet

mein Code was ich ausprobiert habe

Code:
txtCRLF := 'XX';
txtCRLF[1] := 13;
txtCRLF[2] := 10;

CompanyInformation.GET;

CustomTabelle.GET;
SmtpMailSetup_lRec.GET; //lokale Variable
Recipients_lTxt := CustomTabelle.MeinEMailEmpfänger;
Subject_lTxt := ('Lieferschein ' + "No.");

SMTPMail_lCdu.CreateMessage('Absender',
                          CustomTabelle.EMailAbsender01,
                          Recipients_lTxt,
                          Subject_lTxt,
                          Body_lTxt,
                          TRUE); // wird definiert ob EMail als HTML formatiert wird oder nicht (FALSE)
SMTPMail_lCdu.AppendBody('Guten Tag,');
SMTPMail_lCdu.AppendBody('<br>');
SMTPMail_lCdu.AppendBody('Im Anhang finden Sie den Lieferschein ' + "No.");
SMTPMail_lCdu.AppendBody('<br><br>');
SMTPMail_lCdu.AppendBody('Mit freundlichen Grüßen');
SMTPMail_lCdu.AppendBody('<br>');
SMTPMail_lCdu.AppendBody('Absender<BR>');
[color=#FF0000]Attachment := SalesShipmentHeader_lRec."No."; //Attachment - lokale Variable
SMTPMail_lCdu.AddAttachment(Attachment+'.pdf');[/color]
SMTPMail_lCdu.Send;


funktioniert nicht, nach F11 kommt dieser Hinweis
Code:
---------------------------
Microsoft Dynamics NAV Development Environment
---------------------------
Es sollte eine Mindestanzahl von Parametern angegeben werden, wenn Sie diese Funktion aufrufen. Zum Beispiel:

MeineFunktion( .. , .. , .. )
ROUND(MeineVariable)
ROUND(MeineVariable,0.05)
---------------------------
OK   
---------------------------

Re: gebuchter Lieferschein als Anhang in EMail senden

20. Oktober 2023 14:19

Hi,

die Funktion AddAttachment hat zwei Parameter:

AddAttachment(Attachment : Text;FileName : Text)

Wobei Attachment der Pfad sein sollte. (Glaube ich zumindest)

Gruß Bastian

Re: gebuchter Lieferschein als Anhang in EMail senden

20. Oktober 2023 14:35

habe jetzt so probiert

Code:
SMTPMail_lCdu.AddAttachment(SalesShipmentHeader_lRec."No."+ '.pdf','PDF');


Dann kommt bei Ausführen

Code:
Microsoft Dynamics 365 Business Central
---------------------------

Die Anlage .pdf ist nicht vorhanden, oder aus dem Programm kann nicht auf sie zugegriffen werden.
---------------------------
OK
---------------------------

Re: gebuchter Lieferschein als Anhang in EMail senden

20. Oktober 2023 15:26

SalesShipmentHeader_lRec."No."+ '.pdf'ist kein Pfad. Ein vollständiger Pfad (lokal oder im Netzwerk) zu dem PDF ist hier erforderlich.
Das erkennt man an dieser Zeile.
Code:
FileManagement.IsAllowedPath(Attachment,FALSE);

Liegt der Lieferschein überhaupt schon als PDF vor oder muss der noch erzeugt werden?
Das kann man sinngemäß so machen, SalesShipmentHeader dabei vorher filtern
PathFileNam + '.pdf' ist dann der Pfad, den man dem Mailprogramm mitgibt.
FileMgt. ist Codeunit 419 File Management.
Code:
ServerFileName:=  FileMgt.ServerTempFileName('pdf');
CLEAR(DeliveryNoteReport);
DeliveryNoteReport.SETTABLEVIEW(SalesShipmentHeader);
DeliveryNoteReport.USEREQUESTPAGE(FALSE);
PDFok := DeliveryNoteReport.SAVEASPDF(ServerFileName);
CLEAR(DeliveryNoteReport);

// Erstellung abwarten, ggf. die Wartezeit 5 erhöhen, wenn das nicht reicht
WHILE NOT FileMgt.ServerFileExists(ServerFileName) AND (SecondsWait <= 5) DO BEGIN
  SLEEP(1000); 
  SecondsWait +=1;
  // PDFWindow ggf. Zähler einblenden, dass PDF erzeugt wird
END;

IF FileMgt.ServerFileExists(ServerFileName) THEN BEGIN
  TempClientFileName := FileMgt.DownloadTempFile(ServerFileName);
  FileMgt.DeleteServerFile(ServerFileName);
  FileMgt.MoveAndRenameClientFile(TempClientFileName,PathFileNam + '.pdf','');
END ELSE BEGIN
  ERROR(ServerFileErr,ServerFileName); // Meldung, dass PDF-Erstellung fehlgeschlagen ist
END;