Zum Inhalt

Document Dispatch-Platzhalter mit eigener Codeunit füllen

Mit einer eigenen Codeunit können Sie den vollständigen Textwert eines Document Dispatch-Platzhalters selbst zusammensetzen. Die Codeunit erhält den aktuellen Beleg und liefert beispielsweise eine Kombination aus Rechnungsnummer, Kundenname und eigenen Berechnungen zurück. Document Dispatch setzt diesen Text anschließend für den zugeordneten Platzhalter in der E-Mail-Vorlage ein.

Die Zuordnung erfolgt im Versandprofil über Ausgabetypeinrichtung → E-Mail-Platzhalter → Data Mapping Code. Das ausgewählte CORE-Datenmapping enthält eine Zeile vom Typ CODEUNIT, die Ihre Codeunit aufruft. Für jeden benötigten Platzhalter, beispielsweise %1 oder %2, wählen Sie das passende Mapping; damit legen Sie dessen Inhalt selbst fest. Das folgende Beispiel zeigt die vollständige Einrichtung für eine gebuchte Verkaufsrechnung.

Aktueller Beleg → CORE-Datenmapping (CODEUNIT) → eigene Codeunit → Rückgabetext → Platzhalter in der E-Mail-Vorlage.

Voraussetzungen

  • Eine eigene AL-Erweiterung mit einer Abhängigkeit von CORE by Simova und den zugehörigen Symbolen.
  • Berechtigungen zum Einrichten von CORE-Datenmappings, zum Ausführen Ihrer Codeunit und zum Lesen der verwendeten Datensätze.
  • Für das E-Mail-Beispiel: Document Dispatch mit einer E-Mail-Vorlage und einem Versandprofil für Sales Invoice Header (Tabelle 112, gebuchte Verkaufsrechnungsköpfe).

1. Codeunit implementieren

Fügen Sie die folgende Codeunit Ihrer Erweiterung hinzu. Passen Sie Objekt-ID und Namen an Ihre Erweiterung an und veröffentlichen Sie diese, bevor Sie die Codeunit im Mapping auswählen.

codeunit 50100 "My Placeholder Mapping"
{
    TableNo = "SIM_CORE Temp Table";

    trigger OnRun()
    var
        SalesInvoiceHeader: Record "Sales Invoice Header";
        SourceRecordRef: RecordRef;
        DocumentTextLbl: Label '%1 | %2', Locked = true;
        UnsupportedFunctionErr: Label 'Unsupported function: %1.', Comment = '%1 = Function name';
        MissingRecordErr: Label 'The source record could not be found.';
        WrongTableErr: Label 'This function requires a posted sales invoice.';
    begin
        Rec."Function List" := 'DOCUMENTTEXT';
        Clear(Rec."Dyn Mapping Return Value");

        if Rec.Param = '' then
            exit;

        if Rec.Param <> 'DOCUMENTTEXT' then
            Error(UnsupportedFunctionErr, Rec.Param);

        if not SourceRecordRef.Get(Rec.RecID) then
            Error(MissingRecordErr);
        if SourceRecordRef.Number <> Database::"Sales Invoice Header" then
            Error(WrongTableErr);
        SourceRecordRef.SetTable(SalesInvoiceHeader);
        SourceRecordRef.Close();

        Rec."Dyn Mapping Return Value" := CopyStr(
            StrSubstNo(DocumentTextLbl,
                SalesInvoiceHeader."No.",
                SalesInvoiceHeader."Bill-to Name"),
            1, MaxStrLen(Rec."Dyn Mapping Return Value"));
    end;
}

Für eine gebuchte Rechnung mit der Nummer INV-1001 und dem Rechnungsempfängernamen Contoso lautet das Ergebnis INV-1001 | Contoso. Trennzeichen und Textzusammensetzung legen Sie in Ihrer Codeunit fest.

CORE führt die Codeunit über ihren Trigger OnRun mit einem Puffer der Tabelle SIM_CORE Temp Table aus:

Feld Verwendung
RecID ID des aktuellen Ausgangsdatensatzes, beispielsweise der gebuchten Verkaufsrechnung.
Param Wert aus Execute Codeunit Param, hier DOCUMENTTEXT (maximal 50 Zeichen).
Company Aktueller Mandantenname, begrenzt auf 30 Zeichen. Das Beispiel liest im aktuellen Mandanten.
Function List Durch Kommas getrennte Funktionsnamen für die Parameterauswahl. Bei leerem Parameter füllt das Beispiel ausschließlich diese Liste.
Dyn Mapping Return Value Rückgabetext für den Platzhalter, maximal 250 Zeichen.

Schreiben Sie das Ergebnis in Rec."Dyn Mapping Return Value". Diese Textausgabe benötigt weder einen Rückgabedatensatz noch einen Wert im BLOB Return Value. Das Beispiel kürzt längere Ergebnisse mit CopyStr auf die Feldlänge. Wenn Sie andere Ausgangstabellen unterstützen möchten, passen Sie Datensatzverarbeitung und Prüfung entsprechend an.

2. CORE-Datenmapping einrichten

  1. Suchen Sie nach CORE - Data Mappings und wählen Sie Neu.
  2. Tragen Sie unter Code DOC-TEXT und eine aussagekräftige Beschreibung ein.
  3. Setzen Sie die Ausgangstabelle (Starting Table) auf der Karte auf Sales Invoice Header (112).
  4. Fügen Sie genau eine Mappingzeile hinzu und wählen Sie zuerst Typ CODEUNIT.
  5. Füllen Sie die Zeile wie folgt aus. Zur eindeutigen Zuordnung sind die Feldnamen des englischen Clients angegeben.
Feld der Mappingzeile Wert
Type CODEUNIT
Starting Table Sales Invoice Header (112)
Execute Codeunit 50100 (oder Ihre eigene Objekt-ID)
Execute Codeunit Param DOCUMENTTEXT

Tragen Sie DOCUMENTTEXT direkt ein oder wählen Sie den Wert über die Parameterauswahl aus. Die Auswahl führt die Codeunit mit leerem Parameter aus und liest Function List. Deshalb verarbeitet das Beispiel diesen Aufruf, ohne einen Ausgangsdatensatz zu lesen.

Lassen Sie Source Table, Source Field, Starting Field und Field Filter für dieses Beispiel leer. Fügen Sie keine Zeilen vom Typ RETURN, RETURNFIELD oder CODEUNITRECORD hinzu: Dieses Mapping gibt seinen Text direkt über die Codeunit zurück. Verwenden Sie auf der Zeile dieselbe Ausgangstabelle wie auf der Karte, damit Test Data Mapping Datensätze der richtigen Tabelle zur Auswahl anbieten kann.

3. Mapping einem Platzhalter zuordnen

  1. Öffnen Sie das Document-Dispatch-Versandprofil für gebuchte Verkaufsrechnungen und dessen Ausgabetypeinrichtung.
  2. Wählen Sie E-Mail-Platzhalter und wählen oder erstellen Sie einen Platzhalter, beispielsweise %1.
  3. Wählen Sie im Feld Data Mapping Code den Wert DOC-TEXT. Lassen Sie Feld leer und Mit BC-Anrede füllen (Fill with BC Salutation) für diesen Platzhalter deaktiviert.
  4. Verwenden Sie %1 in der zugeordneten E-Mail-Vorlage, beispielsweise Beleg: %1.

Beim Auflösen des Platzhalters übergibt CORE den aktuellen Datensatz an die Codeunit und verwendet deren Rückgabetext. Aus dem Beispieltext der Vorlage wird Beleg: INV-1001 | Contoso.

4. Ergebnis prüfen

  1. Wählen Sie auf der Mappingkarte Test Data Mapping und eine gebuchte Verkaufsrechnung aus. Vergleichen Sie den angezeigten Text mit deren Nummer und Rechnungsempfängernamen.
  2. Bereiten Sie über das eingerichtete Document-Dispatch-Profil eine E-Mail vor und prüfen Sie den aufgelösten Platzhalter im E-Mail-Text vor dem Versand.
  3. Wiederholen Sie den Vorgang mit einer anderen Rechnung, um zu prüfen, dass der Wert aus dem aktuellen Beleg stammt.

Bleibt der Wert leer, prüfen Sie den ausgewählten Mappingcode, Typ, Codeunit-ID, Parameter und die Zuweisung an Dyn Mapping Return Value. Erscheint beim Mappingtest keine Datensatzauswahl, prüfen Sie Starting Table auf der Mappingzeile. Prüfen Sie bei einem Fehler außerdem die Ausgangstabelle sowie die Berechtigungen zum Ausführen der Codeunit und Lesen des Ausgangsdatensatzes. Kürzen Sie das Ergebnis, wenn es 250 Zeichen überschreitet; für den E-Mail-Betreff gilt zusätzlich eine Gesamtlängenbegrenzung.

Weiterführende Dokumentation