Pre Execute Codeunit
De Pre Execute Codeunit biedt een aanknopingspunt om aangepaste Business Central-logica uit te voeren vlak voordat Business Portals een dataset-tabel leest en serialiseert. Hierdoor kunt u informatie voorbereiden, synchroniseren, valideren of registreren voordat de dataset naar het portal wordt teruggestuurd.
De codeunit wordt voor elke dataset-tabel afzonderlijk geconfigureerd. Omdat het aanknopingspunt deel uitmaakt van het laden van de dataset, kan dezelfde aanpak worden gebruikt voor productlijsten, projecten, facturen en andere Business Central-tabellen.
Resultaat van het voorbeeld
Het voorbeeld schrijft een informatie-item naar het bestaande Business Portals-logboek. De records die door de dataset worden weergegeven, worden niet gewijzigd.
Het logboekitem bevat de datasetcode, de code en het type van de dataset-tabel, de DPS-gebruikersnaam, het bedrijf en de geselecteerde parameter. Zoek in Business Central naar Business Portals – Log om het item te bekijken.
Elke eerste keer dat een dataset wordt geladen of vernieuwd, kan een extra item worden gemaakt. Met de actie Clear History op de logboekpagina kunt u items verwijderen die niet langer nodig zijn.
Info
Het registreren is bedoeld als een eenvoudige demonstratie. Vervang de procedure WriteLogEntry door de voorbereidingslogica die voor uw implementatie nodig is, zoals het vernieuwen van een stagingtabel of het synchroniseren van gegevens.
Aandachtspunten voor ontwikkeling
- Stel de eigenschap
TableNovan de codeunit in op SIM_DPS Temp Table, zodat DPS de uitvoeringscontext viaReckan doorgeven. - Gebruik geen interactieve functies zoals
Message,Confirmof pagina’s. Het laden van datasets vindt normaal plaats via een webservicesessie. - Houd de bewerking kort, omdat de datasetserialisatie wacht totdat de codeunit is voltooid.
- Zorg dat de bewerking herhaalbaar is, omdat dashboardvernieuwingen, het opnieuw laden van lijsten en nieuwe pogingen van aanvragen de codeunit meerdere keren kunnen uitvoeren.
- Gebruik
Rec.Companywanneer de dataset-tabel gegevens kan lezen uit een ander bedrijf dan het huidige bedrijf. - Retourneer alle selecteerbare functies via
Rec."Function List"bij het verwerken vanGETFUNCTIONS.
Codevoorbeeld
codeunit 5138173 "SIM_DPS Sample Pre Execute CU"
{
// Een Pre Execute Codeunit moet "SIM_DPS Temp Table" gebruiken, zodat DPS de uitvoeringscontext in Rec kan doorgeven.
TableNo = "SIM_DPS Temp Table";
trigger OnRun()
var
LocalParamText: Text;
begin
// DPS voert de codeunit zonder parameter uit vanuit de configuratiezoekfunctie om de beschikbare functies op te vragen.
LocalParamText := 'GETFUNCTIONS';
// Tijdens de uitvoering van de dataset bevat Rec.Param de functie die is geselecteerd in "Pre Execute Codeunit Param".
if (Rec.Param <> '') then
LocalParamText := Rec.Param;
// Leidt de configuratie- of uitvoeringsaanvraag naar de bijbehorende logica.
case LocalParamText of
'Write Log Entry':
WriteLogEntry(Rec);
'GETFUNCTIONS':
// "Function List" wordt weergegeven in de zoekfunctie. Scheid meerdere functienamen met komma’s.
Rec."Function List" := 'Write Log Entry';
end;
end;
// Schrijft de door DPS aangeleverde context naar het bestaande Business Portals-logboek.
local procedure WriteLogEntry(ParamRecordSIMDPSTempTable: Record "SIM_DPS Temp Table")
var
LocalCodeunitSIMDPSLogMgt: Codeunit "SIM_DPS Log Mgt";
LocalDescriptionLabelMsg: Label 'The pre-execute sample codeunit was executed. Dataset Code: %1; Dataset Table Code: %2; Dataset Table Type: %3; DPS Username: %4; Company: %5; Parameter: %6', Comment = '%1 = Dataset Code, %2 = Dataset Table Code, %3 = Dataset Table Type, %4 = DPS Username, %5 = Company, %6 = Pre Execute Codeunit Parameter';
LocalSourceLabelMsg: Label 'Sample Pre Execute Codeunit';
begin
// Voegt een informatie-item toe dat gebruikers op de pagina "Business Portals - Log" kunnen bekijken.
LocalCodeunitSIMDPSLogMgt.AddInformationInTheLog(
// Vervangt de tijdelijke aanduidingen in het label door de waarden die van het serialisatieproces zijn ontvangen.
StrSubstNo(
LocalDescriptionLabelMsg,
ParamRecordSIMDPSTempTable."Dataset Code",
ParamRecordSIMDPSTempTable."Dataset Table Code",
ParamRecordSIMDPSTempTable."Dataset Table Type",
ParamRecordSIMDPSTempTable.Username,
ParamRecordSIMDPSTempTable.Company,
ParamRecordSIMDPSTempTable.Param),
LocalSourceLabelMsg);
end;
}