Dieser Beitrag behandelt die Codeunit 397 Mail.
Die Standard Codeunit 397 ist so konzipiert, dass nur ein Anhang versendet werden kann. Es gibt Situationen da möchte man mehr als einen Anhang über diese Codeunit versenden.
Das kann relativ einfach durch Erweiterungen des bestehenden Codes erreicht werden.
In diesem Beispiel habe ich die benötigten Funktionen aus der Codeunit 397 heraus kopiert um diese Funktion in einer neuen Codeunit zu testen.
Ich habe mir für diese Zwecke eine neue Codeunit erstellt mit den folgenden kopierten globalen Variablen aus den Codeunit 397:
OApplication Automation 'NS Outlook Synchronization Handler'.OApplication OAttachment Automation 'NS Outlook Synchronization Handler'.OAttachment OAttachments Automation 'NS Outlook Synchronization Handler'.OAttachments OSendMail Automation 'NS Outlook Synchronization Handler'.OSendMail BSTRConverterBody Automation 'Navision Attain Hash 1.0'.BSTRConverter BSTRConverterAttachFileName Automation 'Navision Attain Hash 1.0'.BSTRConverter HideDialog Boolean ErrorNo Integer
Zusätzliche habe ich eine wie in Codeunit 397 eine neue Funktion Namens NewMessage hinzugefügt mit den folgenden lokalen Parametern:
Var Name DataType Subtype Length Nein ToName Text 80 Nein CCName Text 80 Nein Subject Text 260 Nein Body Text 260 Nein AttachFileName Text 260 Nein OpenDialog Boolean Nein AttachFileName2 Text 260
Die Erweiterungen habe ich an dieser Stelle Rot markiert.
OnRun() // Der Aufruf der NewMessage Funktion beinhlatet die folgenden Parameter ToName, CCName, Subject, Body, Attachment1, Open Dialog und Attachment2. Die Attachments habe ich zur verreinfachung von der Festplatte geladen. NewMessage('Info@contoso.info','','Test-Email','Hallo Welt','d:\Attachment1.txt',FALSE,'d:\Attachment2.txt');
Trigger NewMessage: IF ISCLEAR(OApplication) THEN CREATE(OApplication);
IF (NOT OApplication.Logon(TRUE,'','',FALSE,FALSE)) THEN BEGIN OApplication.Logoff; EXIT END;
IF ISCLEAR(OSendMail) THEN CREATE(OSendMail);
ErrorNo := 0;
OSendMail."To" := ToName; OSendMail.CC := CCName; OSendMail.Subject := Subject;
IF ISCLEAR(BSTRConverterBody) THEN CREATE(BSTRConverterBody);
IF Body <> '' THEN BEGIN BSTRConverterBody.ResetBSTR; BSTRConverterBody.AppendNextStringPortion(Body); END; OSendMail.Body := BSTRConverterBody;
IF ISCLEAR(BSTRConverterAttachFileName) THEN CREATE(BSTRConverterAttachFileName);
IF AttachFileName <> '' THEN BEGIN BSTRConverterAttachFileName.ResetBSTR; BSTRConverterAttachFileName.AppendNextStringPortion(AttachFileName); OAttachments := OSendMail.Attachments; OAttachment := OAttachments.Add(BSTRConverterAttachFileName); END;
//Das ist der weitere Anhang. IF AttachFileName2 <> '' THEN BEGIN BSTRConverterAttachFileName.ResetBSTR; BSTRConverterAttachFileName.AppendNextStringPortion(AttachFileName2); OAttachments := OSendMail.Attachments; OAttachment := OAttachments.Add(BSTRConverterAttachFileName); END;
OSendMail.OpenDialog := OpenDialog;
MailSent := OSendMail.Send; ErrorNo := OSendMail.ErrorStatus; OApplication.Logoff;
Die Codeunit ist nun so aufgebaut, das die Funktion NewMessage aus dem OnRun Trigger mit den angegebenen Parametern aufgerufen wird.
Sie können so viele Anhänge-Parameter dieser Funktion hinzufügen wie Sie benötigen,
These postings are provided "AS IS" with no warranties and confer no rights. You assume all risk for your use.
Mit freundlichen Grüßen
Sebastian Röttel
Microsoft Dynamics Germany
Microsoft Customer Service and Support (CSS) EMEA