Integration Mahnungsversand
1. Angemahnte Rechnungen anhängen
1.1. Anforderung
Beim Versand der Mahnung sollen die angemahnten Rechnungen als Anhang an die E-Mail angehängt werden.
1.2 Custom Anhang erstellen
Mit dem Multinav Mail Event Mail_OnCreateTempAttachment können Parameter definiert werden, die dann Funktionen für individuelle Anhänge ausführen.
codeunit 50000 "Multinav Attachments"
{
// Diese Funktion dient als Interface für Kundenspezifische Erweiterungen von Anhängen
// Als Parameter werden Queue und Anhang übergeben
var
CMNMIntegrationInterface: Codeunit "CMNM Integration Interface";
CMNMIntegrationEvent: Codeunit "CMNM Integration Event";
[EventSubscriber(ObjectType::Codeunit, Codeunit::"CMNM Integration Event", 'Mail_OnCreateTempAttachment', '', false, false)]
local procedure CustomTempAttachment(var pEntry: Record "CMNM Entry"; pAttachmentRecordId: RecordID; var pTempEntryDetail: Record "CMNM Entry Detail" temporary; var pResult: Integer; var pProcessed: Boolean)
begin
case pEntry."Dispatch Type" of
pEntry."Dispatch Type"::Outlook,
pEntry."Dispatch Type"::Smtp:
pResult := CustomTempEMailAttachment(pEntry, pAttachmentRecordId, pTempEntryDetail, pProcessed);
end;
end;
[EventSubscriber(ObjectType::Codeunit, Codeunit::"CMNM Integration Event", 'Preview_OnCreateTempAttachment', '', false, false)]
local procedure CustomPreviewTempAttachment(var pEntry: Record "CMNM Entry"; pAttachmentRecordId: RecordID; var pTempEntryDetail: Record "CMNM Entry Detail" temporary; var pResult: Integer; var pProcessed: Boolean)
begin
case pEntry."Dispatch Type" of
pEntry."Dispatch Type"::Outlook,
pEntry."Dispatch Type"::Smtp:
pResult := CustomTempEMailAttachment(pEntry, pAttachmentRecordId, pTempEntryDetail, pProcessed);
end;
end;
procedure CustomTempEMailAttachment(var pEntry: Record "CMNM Entry"; pAttachmentRecordId: RecordID; var pTempEntryDetail: Record "CMNM Entry Detail" temporary; var pProcessed: Boolean) lResult: Integer
var
lEmailAttachment: Record "CMNM eMail Attachment";
lRecRef: RecordRef;
begin
if pProcessed then
exit;
lRecRef.Get(pAttachmentRecordId);
lRecRef.SetTable(lEmailAttachment);
case lEmailAttachment."Codeunit Parameter" of
'REMINDERDOCS':
lResult := ReminderCreateInvoiceDocs(pEntry, lEmailAttachment, pTempEntryDetail);
else
if not pEntry."Temp Entry" and (pEntry."Entry No." > 0) then
exit(45);
end;
pProcessed := (lResult = 0) or ((lResult <> 45) and (lResult <> 0));
end;
procedure ReminderCreateInvoiceDocs(var pEntry: Record "CMNM Entry"; pAttachment: Record "CMNM eMail Attachment"; var pTempEntryDetail: Record "CMNM Entry Detail" temporary) lResult: Integer
var
lIssRemHeader: Record "Issued Reminder Header";
lIssRemLine: Record "Issued Reminder Line";
lSalesInvHeader: Record "Sales Invoice Header";
lRepSel: Record "Report Selections";
lRecRef: RecordRef;
lSalesInvHeaderRef: RecordRef;
lOutStream: OutStream;
begin
lRecRef.Get(pEntry."Source RecordID");
lRecRef.SetTable(lIssRemHeader);
lIssRemLine.SetRange("Reminder No.", lIssRemHeader."No.");
lIssRemLine.SetRange(Type, lIssRemLine.Type::"Customer Ledger Entry");
lIssRemLine.SetRange("Document Type", lIssRemLine."Document Type"::Invoice);
if lIssRemLine.FindSet() then
repeat
lSalesInvHeader.Get(lIssRemLine."Document No.");
Clear(lSalesInvHeaderRef);
lSalesInvHeaderRef.GetTable(lSalesInvHeader);
lSalesInvHeaderRef.SetRecFilter();
lSalesInvHeader.SetRecFilter();
lRepSel.Get(lRepSel.Usage::"S.Invoice", '1');
if not pTempEntryDetail.FindLast() then
pTempEntryDetail."Detail Entry No." := 1
else
pTempEntryDetail."Detail Entry No." += 1;
pTempEntryDetail.Init();
pTempEntryDetail."Entry No." := pEntry."Entry No.";
pTempEntryDetail.Type := pTempEntryDetail.Type::attachment;
pTempEntryDetail.Value := StrSubstNo(pAttachment."Custom Attachment Name", lSalesInvHeader."No.");
pTempEntryDetail.Attachment.CreateOutStream(lOutStream);
Report.SaveAs(lRepSel."Report ID", '', ReportFormat::Pdf, lOutStream, lSalesInvHeaderRef);
pTempEntryDetail.Insert();
until lIssRemLine.Next() = 0;
end;
}
Im letzten Schritt wird dann in der E-Mail Vorlage im Register Anhänge eine Zeile mit Anhang Art = Codeunit und Codeunit Parameter = REMINDERDOCS angelegt.
2. Versand der Mahnung beim Registrieren
2.1. Anforderung
Die Mahnungen sollen beim Registrieren automatisch versendet werden.
2.2. Integration in die Codeunit „Reminder-Issue“
In einem Event Subscriber für „OnAfterIssueReminder“ wird die Funktion CreateEntry von Multinav Mail aufgerufen und damit eine neue E-Mail erstellt.
Es werden immer alle Mahnungen beim Registrieren versendet. Möglich wäre hier auch eine Abfrage vor der Funktion CreateEntry, die prüft, ob ein Empfänger für die Mahnung vorhanden ist.
codeunit 50001 OnIssueReminder
{
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Reminder-Issue", 'OnAfterIssueReminder', '', false, false)]
local procedure OnAfterIssueReminder(var ReminderHeader: Record "Reminder Header"; IssuedReminderNo: Code[20]);
var
IssReminderHeader: record "Issued Reminder Header";
CMNMIntegrationInterface: Codeunit "CMNM Integration Interface";
begin
if IssuedReminderNo = '' then
exit;
IssReminderHeader.get(IssuedReminderNo);
CMNMIntegrationInterface.CMNMManagement_CreateEntry('MAHNUNG', IssReminderHeader.RecordId, Enum "CMNM Dispatch Type"::Smtp, false);
end;
//Übersteuerung des Drucks pro Issued Reminder Header Datensatz. Wenn kein Mail Posten erzeugt wurde wird die Mahnung gedruckt
[EventSubscriber(ObjectType::Table, Database::"Issued Reminder Header", 'OnBeforePrintRecords', '', false, false)]
local procedure OnBeforePrintRecords(var IssuedReminderHeader: Record "Issued Reminder Header"; ShowRequestForm: Boolean; SendAsEmail: Boolean; HideDialog: Boolean; var IsHandled: Boolean);
var
CMNMIntegrationInterface: Codeunit "CMNM Integration Interface";
EntryNo: Integer;
begin
//zusätzliche Empfänger Prüfung
EntryNo := CMNMIntegrationInterface.CMNMManagement_CreateEntry('MAHNUNG', IssuedReminderHeader.RecordId, Enum "CMNM Dispatch Type"::Smtp, false);
if EntryNo <> 0 then
IsHandled := true;
end;
}