Table of Contents

Report E-Mails

Dieser E-Mail Versand wird empfohlen, wenn

  • der Anwender einen vom ursprünglichen Datensatz unabhängigen Report als PDF-Anhang einer E-Mail versenden möchte (vgl. Kontoauszug)

  • vom Standard abweichende Empfänger pro zu versendender Belegart einrichtbar sein sollen.

  • dauerhaft Dateien (wie z. B. AGBs) pro Belegart an die zu versendende E-Mail angehängt werden sollen.

Voraussetzung ist, dass über den zu versendenden Datensatz einen Bezug zu einem Debitor oder Kreditor hergestellt werden kann. Wichtig ist ebenfalls, dass hierbei Dokumentlayouts für den zu versendenden Report (Beleg-Belegart) angelegt sein müssen, da der Standard sonst mit einer Fehlermeldung den Vorgang abbricht (kein Fallback auf die E-Mail Adresse des Stammdatensatzes).

Umsetzung

Soll im Projekt eine kundenindividuelle E-Mail auf Basis eines Reports für Debitoren oder Kreditoren erstellt werden, müssen folgende Erweiterungen erfolgen:

  • Sollte der zu versendende Report noch keine entsprechende "Verwendung" in der Berichtsauswahl haben, muss eine neue "Verwendung" im Enum "Report Selection Usage" angelegt werden. Der zu versendende Report muss anschließend in der Berichtsauswahl mit der passenden Verwendung hinterlegt werden.

  • Eine neue Belegart für die Tabelle einrichten, auf deren Basis eine E-Mail versendet werden soll. Sollte keine Kopf-/Zeilenstruktur vorhanden sein, wird die Angabe für die Zeilentabelle leer gelassen (die Angabe der Kopf-Tabelle ist obligatorisch). Hinterlegung von Verwendung, Filtern (wenn in derselben Tabelle mehrere unterschiedliche E-Mails versendet werden sollen (vgl. Angebot, Auftrag etc.)) und Geschäftsbeziehung nicht vergessen.

  • Im zu versendenden Report muss in der RequestPage eine Versandoption angelegt werden: Vgl. dazu den Report 1316 "Standard Statement". Es ist wichtig, dass dies analog zum BC Standard geschieht und auch dieselben Namen für die Option gewählt werden, da der nachfolgende Prozess beim Auslesen der Werte aus der RequestPage fest darauf prüft.

  • Eine neue Codeunit muss für den Versand des Reports (in diesem Beispiel für den fiktiven "Report ABC") angelegt werden. Bitte darauf achten, dass dieses Code-Beispiel aus unitop 2021.7 adaptiert wurde und daher von der aktuellen Version abweichen kann. Bitte mit Codeunit "GOB CC Send Customer Statement" vergleichen und mindestens die in <> stehenden Variablen entsprechend ersetzen.

codeunit 50000 "PTE CC Send Report ABC"
{
    var
        CCEmailStorage: Codeunit "GOB CC Email Storage";
        CCEmailRecipients: Codeunit "GOB CC Email Recipients";
        CCEmailSubject: Codeunit "GOB CC Email Subject";
        CCEmailPDFFilename: Codeunit "GOB CC Email PDF Filename";
        CCCustomReportLayout: Codeunit "GOB CC Custom Report Layout";
        CCEmailAttachments: Codeunit "GOB CC Email Attachments";
        CCEmailSender: Codeunit "GOB CC Email Sender";

    procedure Send(Rec: Record "Record To Send")
    var
        RecordToSend: Record "Record To Send";
        CustomReportSelection: Record "Custom Report Selection";
        CustomLayoutReporting: Codeunit "Custom Layout Reporting";
        RecRef: RecordRef;
    begin
        BindCCSubscriptions();

        RecRef.Open(Database::"Record To Send");
        CustomReportSelection.SetRange(Usage, "Report Selection Usage"::<Neue Verwendung>);
        if CustomReportSelection.FindFirst() then
            CustomLayoutReporting.SetTableFilterForReportID(CustomReportSelection."Report ID", Rec."No.")
        else
            CustomLayoutReporting.SetTableFilterForReportID(Report::"Report ABC", Rec."No.");
        CustomLayoutReporting.ProcessReportData(
            "Report Selection Usage"::<Neue Verwendung>, RecRef, RecordToSend.FieldName(FilterField),
            Database::"Record To Send")), RecordToSend.FieldName(FilterField), true);

        UnbindCCSubscriptions();
    end;

    local procedure BindCCSubscriptions()
    begin
        BindSubscription(CCEmailStorage);
        BindSubscription(CCEmailRecipients);
        BindSubscription(CCCustomReportLayout);
        BindSubscription(CCEmailSubject);
        BindSubscription(CCEmailPDFFilename);
        BindSubscription(CCEmailAttachments);
        BindSubscription(CCEmailSender);
    end;

    local procedure UnbindCCSubscriptions()
    begin
        UnbindSubscription(CCEmailStorage);
        UnbindSubscription(CCEmailRecipients);
        UnbindSubscription(CCCustomReportLayout);
        UnbindSubscription(CCEmailSubject);
        UnbindSubscription(CCEmailPDFFilename);
        UnbindSubscription(CCEmailAttachments);
        UnbindSubscription(CCEmailSender);
    end;
}
  • In den Pages (Karte/Liste), von denen aus der Report per E-Mail versendet werden soll eine neue Action einfügen:
action("PTE <Report ABC>")
{
	ApplicationArea = All;
	Caption = Report ABC,
	Comment = 'de-DE=Report ABC;
	Image = "Report";
	ToolTip = 'View and send the Report ABC.',
	Comment = 'de-DE=Zeigt und versendet den Report ABC.';

	trigger OnAction()
	var
		CCSendReportABC: Codeunit "PTE CC Send Report ABC";
	begin
		CCSendReportABC.Send(Rec);
	end;
}
  • Um die E-Mail über einen eigenen Absender zu versenden, muss das Enum "Email Scenario" erweitert und in der Codeunit "GOB CC Email Scenario Mapping" der Publisher OnElseCaseOnGetEmailScenario abonniert werden. Dort kann man dann gemappt über die neue Belegart das neue E-Mail Szenario zurückgeben.

  • Das Layout für den E-Mail Body wird wie bei allen Beleg-Belegarten eingerichtet (vgl. "Beleg E-Mails" → "PDF-Dateiname". Ebenso werden auch der Betreff und der Name der PDF-Datei, die an die E-Mail angefügt werden, eingerichtet. Eine programmtechnische Erweiterung ist bei dieser Nutzung nicht nötig.

  • E-Mail Anhänge, die dauerhaft bei E-Mails der neuen Belegart mit versendet werden sollen, können wie gewohnt in der neuen Belegart hinterlegt werden. Eine programmtechnische Erweiterung ist bei dieser Nutzung nicht nötig.

  • Sollten für die neue Tabelle die Kopf- (und Zeilen-)anhänge aus dem BC Standard übernommen werden, werden diese automatisch beim E-Mail Versand als CC Anhang im E-Mail Dialog vorgeschlagen. Eine programmtechnische Erweiterung ist über die Adaption des BC Standards hinaus bei dieser Nutzung nicht nötig.

  • Sollten für die neue Tabelle die DMS-Anhänge aus unitop übernommen werden, werden diese automatisch beim E-Mail Versand als CC Anhang im E-Mail Dialog vorgeschlagen. Eine programmtechnische Erweiterung ist über die Adaption des unitop Standards hinaus bei dieser Nutzung nicht nötig.

Grafischer Überblick

*Rot umrandet ist der Part der im Projekt programmiert werden muss.