Integration tabellarische Darstellung im Inhalt
Anforderung
Im Inhalt der E-Mail soll eine Tabelle mit Informationen aus den Belegzeilen dargestellt werden. Da die Anzahl der Tabellenzeilen von Beleg zu Beleg unterschiedlich ist, muss die Tabelle beim Versand entsprechend den Belegzeilen generiert werden. In diesem Beispiel sollen alle Rechnungen zu der versendeten Mahnung aufgelistet werden.
Generierung der Tabelle in der Vorverarbeitung
Mit dem Multinav Mail Event Mail_OnPreProcessing können Parameter definiert werden, die dann Funktionen für individuelle Anpassungen ausführen.
codeunit 50000 InvoiceTablePreprocessing
{
// Diese Funktion dient als Interface für Kundenspezifische Vorverarbeitungen
// Als Paramter werden Queue und Vorlage übergeben
var
CMNMIntegrationInterface: Codeunit "CMNM Integration Interface";
CMNMIntegrationEvent: Codeunit "CMNM Integration Event";
[EventSubscriber(ObjectType::Codeunit, Codeunit::"CMNM Integration Event", 'Mail_OnPreProcessing', '', false, false)]
procedure PreProcessing(var pEntry: Record "CMNM Entry"; pPreProcessingParameter: Code[20]; var pResult: Integer; var pProcessed: Boolean)
var
lEMailTemplate: Record "CMNM eMail Template";
begin
if pProcessed then
exit;
case pPreProcessingParameter of
//'CUSTOMPARAMETER': pResult := CustomFunction(pEntry ,pTemplate);
'RGTABLE':
pResult := GetInvoicesForReminderTable(pEntry, 'RGTABLE');
else
pResult := 49;
end;
pProcessed := (pResult = 0) or ((pResult <> 49) and (pResult <> 0))
end;
local procedure GetInvoicesForReminderTable(var pEntry: Record "CMNM Entry"; pBufferCode: Code[10]) rResult: Integer
var
lIssRemHeader: Record "Issued Reminder Header";
lIssRemLine: Record "Issued Reminder Line";
lSalesInvHeader: Record "Sales Invoice Header";
lEntryBuffer: Record "CMNM Entry Buffer";
lText: Text;
lLineNo: Integer;
lTableStyle: Label '<style>table {font-family: calibri; font-size: 11pt; border-collapse: collapse; width: 500px;}td, th {border: 1px #dddddd; text-align: left; padding: 1px;}tr:nth-child(even) {background-color: #dddddd;}</style>';
lTableHeadLine: Label '<table><tr><th>%1</th> <th>%2</th><th>%3</th> </tr>';
lTableLine: Label '<tr><td>%1</td><td>%2</td><td>%3</td> </tr>';
begin
if pEntry."Entry No." = 0 then
exit;
lIssRemHeader.Get(pEntry."Source RecordID");
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 begin
Clear(lText);
// Tabelleneigenschaften
lText := lTableStyle;
CMNMIntegrationInterface.CMNMEntryBuffer_InsertNewLine(lEntryBuffer,pEntry."Entry No.", pEntry.Language, CopyStr(lText, 1, 250), pBufferCode, lLineNo, true);
Clear(lText);
// Tabellenueberschrift
lText := StrSubstNo(lTableHeadline, lSalesInvHeader.TableCaption,
lSalesInvHeader.FieldCaption("Document Date"),
lSalesInvHeader.FieldCaption("Amount Including VAT"));
CMNMIntegrationInterface.CMNMEntryBuffer_InsertNewLine(lEntryBuffer,pEntry."Entry No.", pEntry.Language, CopyStr(lText, 1, 250), pBufferCode, lLineNo, true);
repeat
lSalesInvHeader.Get(lIssRemLine."Document No.");
Clear(lText);
lSalesInvHeader.CalcFields("Amount Including VAT");
// Tabellenzeilen - Daten
lText := StrSubstNo(lTableLine, lSalesInvHeader."No.",
Format(lSalesInvHeader."Document Date"),
Format(lSalesInvHeader."Amount Including VAT"));
CMNMIntegrationInterface.CMNMEntryBuffer_InsertNewLine(lEntryBuffer,pEntry."Entry No.", pEntry.Language, CopyStr(lText, 1, 250), pBufferCode, lLineNo, true);
if rResult <> 0 then
exit(rResult);
until lIssRemLine.Next() = 0;
Clear(lText);
lText := '</table>';
CMNMIntegrationInterface.CMNMEntryBuffer_InsertNewLine(lEntryBuffer,pEntry."Entry No.", pEntry.Language, CopyStr(lText, 1, 250), pBufferCode, lLineNo, true);
end;
end;
}
In Business Central wird dann noch im Feld Vorverarbeitungsparameter der Wert RGTABLE eingetragen.
Im Mail Inhalt wird eine Ersetzung vom Typ TextPuffer angelegt und als TextPuffer Code RGTABLE eingetragen.
Multinav Mail Entry Buffer nach dem Versand leeren
Wenn der Multinav Mail Entry Buffer verwendet wird, dann sollte der Inhalt des Buffers nach dem Versand geleert werden.
Mit dem Multinav Mail Event Mail_OnPostProcessing können Parameter definiert werden, die dann Funktionen für individuelle Anpassungen ausführen.
codeunit 50001 InvoiceTablePostprocessing
{
// Diese Funktion dient als Interface für Kundenspezifische Nachverarbeitungen
// Als Paramter werden Queue und Vorlage übergeben
var
CMNMIntegrationInterface: Codeunit "CMNM Integration Interface";
CMNMIntegrationEvent: Codeunit "CMNM Integration Event";
[EventSubscriber(ObjectType::Codeunit, Codeunit::"CMNM Integration Event", 'Mail_OnPostProcessing', '', false, false)]
procedure PostProcessing(var pEntry: Record "CMNM Entry"; pPostProcessingParameter: Code[20]; var pResult: Integer; var pProcessed: Boolean)
begin
if pProcessed then
exit;
case pPostProcessingParameter of
//'CUSTOMPARAMETER': lResult := CustomFunction(pEntry,pTemplate);
'CLEARENTRYBUFFER':
pResult := ClearEntryBuffer(pEntry);
else
pResult := 50;
end;
pProcessed := (pResult = 0) or ((pResult <> 50) and (pResult <> 0))
end;
local procedure ClearEntryBuffer(var pEntry: Record "CMNM Entry") rResult: Integer
var
lEntryBuffer: Record "CMNM Entry Buffer";
begin
lEntryBuffer.SetRange("Entry No.", pEntry."Entry No.");
if lEntryBuffer.FindSet() then
lEntryBuffer.DeleteAll(true);
end;
}
In Business Central wird dann noch im Feld Nachverarbeitungsparameter der Wert CLEARENTRYBUFFER eingetragen.