Table of Contents

Beleg E-Mails

Dieser E-Mail Versand wird empfohlen, wenn

  • eine PDF-Datei auf Basis des zu versendenden Datensatzes erstellt und an die E-Mail angefügt werden soll.

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

  • Sprachenabhängige E-Mail Bodys gefordert sind.

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

Voraussetzung ist, dass man über den zu versendenden Datensatz einen Bezug zu einem Debitor oder Kreditor herstellen kann.

Umsetzung

Soll im Projekt eine kundenindividuelle E-Mail auf Basis einer in unitop nicht vorhandenen Beleg-Belegart für Debitoren oder Kreditoren erstellt werden, müssen folgende Erweiterungen erfolgen: (Achtung: statt vorangestelltem GOB (in unitop) wird in Kundenprojekten mit PTE als Präfix gearbeitet!)

  • Neue "Verwendung" im Enum "Report Selection Usage" anlegen, hinter dem in der Berichtsauswahl der zu versendende Report eingerichtet wird.

  • Neue Belegart einrichten für die Tabelle, 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.

  • Neue Funktionen in der Tabelle, für die der Versand erfolgen soll:

    Für den generellen Versand: PTESend

    Aufruf der Codeunits CCSendCustomer oder CCSendVendor mit Funktion Send

    procedure PTESend(ReportSelectionUsage: Enum "Report Selection Usage"; var DocumentSendingProfile: Record "Document Sending Profile")
    var
        CCSendCustomer: Codeunit "GOB CC Send Customer";
    begin
        CCSendCustomer.Send(Rec, ReportSelectionUsage, DocumentSendingProfile);
    end;
    
  • Für den Aufruf der Belegempfänger: PTECallDocumentRecipients

    Aufruf der Codeunit CCDocRecipientsMgt mit Funktion CallCCDocumentRecipients

procedure PTECallDocumentRecipients()
var
	CCDocRecipientsMgt: Codeunit "GOB CC Doc. Recipients Mgt.";
begin
	CCDocRecipientsMgt.CallCCDocumentRecipients(Rec);
end;
  • Löschen der (gebuchten) Empfänger OnAfterDelete
trigger OnAfterDelete()
var
	CCDocRecipientsMgt: Codeunit "GOB CC Doc. Recipients Mgt.";
begin
	CCDocRecipientsMgt.DeleteDocumentRecipients(Rec);
end;
  • Erweiterung der Karte und Liste für die Tabelle deren Daten versendet werden soll, um eine E-Mail Action:
action("PTE E-Mail")
{
	Caption = 'Email',
	Comment = 'de-DE=E-Mail';
	ToolTip = 'Send the document by Email.',
	Comment = 'de-DE=Versenden Sie den Beleg per E-Mail.';
	ApplicationArea = All;
	Image = Email;

	trigger OnAction();
	var
		DocumentSendingProfile: Record "Document Sending Profile";
		DocSendingProfileMgt: Codeunit "GOB Doc. Sending Profile Mgt.";
	begin
		DocumentSendingProfile.Get(DocSendingProfileMgt.GetDocumentSendingProfile_Email());
		Rec.GOBSend(Enum::"Report Selection Usage"::<NeueVerwendung>,DocumentSendingProfile);
	end;
}
  • Erweiterung der Karte und Liste für die Tabelle deren Daten versendet werden soll, um die Action "Belegempfänger"
action("PTE Document Recipients")
{
	Caption = 'Document Recipients',
	Comment = 'de-DE=Belegempfänger';
	ToolTip = 'Set up the recipients of this document and possible follow-on documents here.',
	Comment = 'de-DE=Richten Sie hier die Empfänger dieses Belegs und möglicher Folgebelege ein.';
	ApplicationArea = All;
	Image = MailSetup;

	trigger OnAction();
	begin
	    Rec.PTECallDocumentRecipients();
	end;
}
  • Für das Kopieren der Dokumentenlayouts der Stammdaten in die Belegempfänger (der relevanten Belege):
    Erweiterung der Funktion GetUsageTypeFilterForCopyCRS in Codeunit 5059770 "GOB CC Doc. Recipients Mgt." über den Publisher OnAfterGetUsageFilterForCopyCRS zur Erweiterung des gebildeten Filterstrings
    [EventSubscriber(ObjectType::Codeunit, Codeunit::"GOB CC Doc. Recipients Mgt.", 'OnAfterGetUsageFilterForCopyCRS', '', false, false)]
    procedure PTEOnAfterGetUsageFilterForCopyCRS(RecRef, UsageFilter)
    begin
        case RecRef.Number of
            Database::"Sales Header":
                begin
                    RecRef.SetTable(SalesHeader);
                    case SalesHeader."Document Type" of
                        SalesHeader."Document Type"::Quote:
                            UsageFilter += '|' + Format(ReportSelections.Usage::"PTE ABC");
                    end;
                end;
        end;
    end;
  • Um die einzubindende Belegart ü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 in den benutzerdefinierten Berichtslayouts eingerichtet. Ebenso der Betreff und der Name der PDF-Datei, die an die E-Mail angefügt wird. 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

Grafischer Überblick in detaillierter Form: Action, Tabelle, Codeunit

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