Ga naar inhoud

Voorbeeld van een dynamische toewijzingscodeunit

Codeunit 5138174 "SIM_DPS Sample Dyn. Mapping CU" laat zien hoe aangepaste AL-logica een waarde kan leveren aan een Simova CORE-gegevenstoewijzing die Business Portals gebruikt.

De codeunit gebruikt SIM_CORE Temp Table als brontabel. De toewijzingsengine geeft de context via dit tijdelijke record door, voert de geselecteerde functie uit en gebruikt Dyn Mapping Return Value.

Wanneer een toewijzingscodeunit gebruiken

Een normale regel haalt een waarde uit een veld, constante, filter of voorgedefinieerde functie. Gebruik CODEUNIT wanneer aangepaste AL-logica nodig is om records te combineren, waarden te berekenen of te formatteren, of een waarde op te lossen die niet met standaardregels kan worden uitgedrukt.

Zie Gegevenstoewijzingen maken.

Functiedetectie en dispatch

Tijdens de parameterlookup is Rec.Param leeg. OnRun gebruikt GETFUNCTIONS en retourneert Execute in Rec."Function List".

AL
'GETFUNCTIONS':
    Rec."Function List" := 'Execute';

Tijdens uitvoering kopieert CORE Execute Codeunit Param naar Rec.Param. Het voorbeeld stuurt Execute naar de openbare procedure Execute. Voeg extra functies toe aan Function List en case.

Uitvoeringscontext

Veld Doel
RecID Identificeert het bronrecord.
Company Identificeert het Business Central-bedrijf.
Param Bevat de functienaam, zoals Execute.
Function List Retourneert functies tijdens configuratie.
Dyn Mapping Return Value Retourneert het resultaat als tekst.

Het retourveld is Text[250]. Converteer andere gegevenstypen naar een geschikte tekstweergave.

Voorbeeldgedrag

Het voorbeeld retourneert THIS RETURN WILL BE SHOWN ON PAGE, waarmee alleen de aanroep en het retourpad worden bevestigd.

AL
ParamRecordSIMCORETempTable."Dyn Mapping Return Value" := 'THIS RETURN WILL BE SHOWN ON PAGE';

LocalRecordId wordt nooit vóór LocalRecordRef.Get(LocalRecordId) toegewezen en laadt dus niet het contextrecord. Een echte implementatie gebruikt ParamRecordSIMCORETempTable.RecID, eventueel ParamRecordSIMCORETempTable.Company, valideert de tabel en berekent de waarde.

Configuratie

  1. Open CORE Data Mapping en maak of open de toewijzing voor Business Portals.
  2. Voeg een regel toe en stel Type in op CODEUNIT.
  3. Stel Execute Codeunit in op 5138174 of op de aangepaste kopie.
  4. Open Execute Codeunit Param en selecteer Execute.
  5. Wijs de code toe aan het relevante veld, field mapping, tijdelijke aanduiding of andere configuratie.
  6. Test representatieve records en bedrijven.

De codeunit moet in de machtigingensets van de gebruiker of serviceaccount staan. Het standaardvoorbeeld is al opgenomen in de Business Portals-machtigingen.

Implementatieoverwegingen

  • Behoud TableNo = "SIM_CORE Temp Table".
  • CORE geeft de toewijzingscontext door via Rec.
  • Lees de bron-ID uit Rec.RecID, niet uit een niet-geïnitialiseerde lokale RecordId.
  • Respecteer Rec.Company en gebruik zo nodig RecordRef.Open met het juiste bedrijf.
  • Controleer RecID.TableNo, ontbrekende records en de limiet van 250 tekens.
  • Formatteer waarden consistent.
  • Vermijd interfaceaanroepen, bevestigingen en pagina-acties.
  • Verleen alleen noodzakelijke leesmachtigingen.

Volledige voorbeeldcode

AL
codeunit 5138174 "SIM_DPS Sample Dyn. Mapping CU"
{
    TableNo = "SIM_CORE Temp Table";

    trigger OnRun()
    var
        LocalParamText: Text;
    begin
        LocalParamText := 'GETFUNCTIONS';

        if (Rec.Param <> '') then
            LocalParamText := Rec.Param;

        case LocalParamText of
            'Execute':
                Execute(Rec);

            'GETFUNCTIONS':
                Rec."Function List" := 'Execute';
        end;
    end;

    procedure Execute(var ParamRecordSIMCORETempTable: Record "SIM_CORE Temp Table")
    var
        LocalRecordRef: RecordRef;
        LocalRecordId: RecordId;
    begin
        if LocalRecordRef.Get(LocalRecordId) then;

        ParamRecordSIMCORETempTable."Dyn Mapping Return Value" := 'THIS RETURN WILL BE SHOWN ON PAGE';
    end;
}