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".
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.
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
- Open CORE Data Mapping en maak of open de toewijzing voor Business Portals.
- Voeg een regel toe en stel Type in op
CODEUNIT. - Stel Execute Codeunit in op
5138174of op de aangepaste kopie. - Open Execute Codeunit Param en selecteer
Execute. - Wijs de code toe aan het relevante veld, field mapping, tijdelijke aanduiding of andere configuratie.
- 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 lokaleRecordId. - Respecteer
Rec.Companyen gebruik zo nodigRecordRef.Openmet 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
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;
}