Tijdelijke aanduidingen in Document Dispatch vullen met een eigen codeunit
Gebruik een eigen codeunit om de volledige tekstwaarde van een tijdelijke aanduiding in Document Dispatch samen te stellen. De codeunit ontvangt het huidige document en kan een combinatie van factuurnummer, klantnaam en uw eigen berekeningen teruggeven. Document Dispatch voegt deze tekst vervolgens in bij de toegewezen tijdelijke aanduiding in de e-mailsjabloon.
U wijst de gegevenskoppeling toe in het verzendprofiel via Instellingen voor het uitvoertype → Tijdelijke aanduidingen voor e-mail → Data Mapping Code. De geselecteerde CORE-gegevenskoppeling bevat een regel van het type CODEUNIT die uw codeunit aanroept. Selecteer de juiste gegevenskoppeling voor elke benodigde tijdelijke aanduiding, zoals %1 of %2, om de inhoud zelf te bepalen. Het volgende voorbeeld toont de volledige instelling voor een geboekte verkoopfactuur.
Huidig document → CORE-gegevenskoppeling (CODEUNIT) → eigen codeunit → geretourneerde tekst → tijdelijke aanduiding in de e-mailsjabloon.
Vereisten
- Een eigen AL-extensie met een afhankelijkheid van CORE by Simova en de bijbehorende symbolen.
- Machtigingen om CORE-gegevenskoppelingen in te stellen, uw codeunit uit te voeren en de gebruikte records te lezen.
- Voor het e-mailvoorbeeld: Document Dispatch met een e-mailsjabloon en een verzendprofiel voor Sales Invoice Header (tabel 112, geboekte verkoopfactuurkop).
1. De codeunit implementeren
Voeg de volgende codeunit toe aan uw extensie. Pas het object-ID en de naam aan uw extensie aan en publiceer deze voordat u de codeunit in de gegevenskoppeling selecteert.
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;
}
Voor een geboekte factuur met nummer INV-1001 en factuurklantnaam Contoso is het resultaat INV-1001 | Contoso. Uw codeunit bepaalt het scheidingsteken en de samenstelling van de tekst.
CORE voert de codeunit uit via de trigger OnRun met een buffer van de tabel SIM_CORE Temp Table:
| Veld | Gebruik |
|---|---|
RecID |
ID van het huidige bronrecord, bijvoorbeeld de geboekte verkoopfactuur. |
Param |
Waarde van Execute Codeunit Param, hier DOCUMENTTEXT (maximaal 50 tekens). |
Company |
Naam van het huidige bedrijf, beperkt tot 30 tekens. Het voorbeeld leest in het huidige bedrijf. |
Function List |
Door komma’s gescheiden functienamen voor de parameterkeuze. Bij een lege parameter vult het voorbeeld alleen deze lijst. |
Dyn Mapping Return Value |
Tekst die aan de tijdelijke aanduiding wordt doorgegeven, maximaal 250 tekens. |
Schrijf het resultaat naar Rec."Dyn Mapping Return Value". Voor deze tekstuitvoer is geen retourrecord of waarde in de BLOB Return Value nodig. Het voorbeeld gebruikt CopyStr om langere resultaten af te kappen op de veldlengte. Pas de recordverwerking en validatie aan als u andere brontabellen wilt ondersteunen.
2. De CORE-gegevenskoppeling instellen
- Zoek naar CORE - Data Mappings en kies Nieuw.
- Voer
DOC-TEXTin bij Code en geef een duidelijke Omschrijving op. - Stel de begintabel (Starting Table) op de kaart in op Sales Invoice Header (112).
- Voeg precies één koppelingsregel toe en selecteer eerst Type
CODEUNIT. - Vul de regel als volgt in. De veldnamen komen overeen met de Engelstalige client.
| Veld op de koppelingsregel | Waarde |
|---|---|
| Type | CODEUNIT |
| Starting Table | Sales Invoice Header (112) |
| Execute Codeunit | 50100 (of uw eigen object-ID) |
| Execute Codeunit Param | DOCUMENTTEXT |
Voer DOCUMENTTEXT rechtstreeks in of selecteer de waarde via de parameterkeuze. Deze keuze voert de codeunit uit met een lege parameter en leest Function List. Daarom verwerkt het voorbeeld deze aanroep zonder een bronrecord te lezen.
Laat Source Table, Source Field, Starting Field en Field Filter voor dit voorbeeld leeg. Voeg geen regels van het type RETURN, RETURNFIELD of CODEUNITRECORD toe: deze gegevenskoppeling geeft de tekst rechtstreeks via de codeunit terug. Gebruik op de regel dezelfde begintabel als op de kaart, zodat Test Data Mapping records uit de juiste tabel kan aanbieden.
3. De gegevenskoppeling aan een tijdelijke aanduiding toewijzen
- Open het Document Dispatch-verzendprofiel voor geboekte verkoopfacturen en de bijbehorende instellingen voor het uitvoertype.
- Kies Tijdelijke aanduidingen voor e-mail (Email Placeholders) en selecteer of maak een tijdelijke aanduiding, bijvoorbeeld
%1. - Selecteer
DOC-TEXTbij Data Mapping Code. Laat Veld leeg en schakel Vullen met BC-aanhef (Fill with BC Salutation) uit voor deze tijdelijke aanduiding. - Gebruik
%1in de toegewezen e-mailsjabloon, bijvoorbeeldDocument: %1.
Bij het vervangen van de tijdelijke aanduiding geeft CORE het huidige record aan de codeunit door en gebruikt het de geretourneerde tekst. De voorbeeldtekst van de sjabloon wordt Document: INV-1001 | Contoso.
4. Het resultaat controleren
- Kies op de koppelingskaart Test Data Mapping en selecteer een geboekte verkoopfactuur. Vergelijk de weergegeven tekst met het nummer en de factuurklantnaam.
- Bereid een e-mail voor via het ingestelde Document Dispatch-profiel en controleer de ingevulde tijdelijke aanduiding in de e-mailtekst vóór verzending.
- Herhaal dit met een andere factuur om te controleren of de waarde uit het huidige document komt.
Als de waarde leeg is, controleert u de geselecteerde koppelingscode, het Type, het codeunit-ID, de parameter en de toewijzing aan Dyn Mapping Return Value. Als tijdens de test geen recordkeuze verschijnt, controleert u Starting Table op de koppelingsregel. Controleer bij een fout ook de brontabel en de machtigingen om de codeunit uit te voeren en het bronrecord te lezen. Verkort het resultaat als het meer dan 250 tekens bevat; voor het e-mailonderwerp geldt daarnaast een totale lengtelimiet.