Zum Inhalt

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.