Voorbeeld van een actie-codeunit
Codeunit 5138156 "SIM_DPS Sample CU" laat zien hoe een Business Central-codeunit aangepaste actielogica voor Business Portals kan leveren. Het voorbeeld gebruikt SIM_DPS OL als brontabel en behandelt functiedetectie, actie-uitvoering, frontend-gebeurtenissen en navigatie naar bronrecords of nieuw aangemaakte records.
De codeunit is een referentie-implementatie. Kopieer de benodigde patronen naar een klantspecifieke codeunit en vervang de verkooplogica, berichten, invoerveldcodes en berekeningen door de vereisten van de oplossing.
Beschikbare functies
Wanneer Business Portals de codeunit zonder actiecontext uitvoert, gebruikt OnRun GETFUNCTIONS en retourneert het in Rec."Function List" de volgende kommagescheiden waarden:
| Functie | Doel |
|---|---|
MakeOrderFromQuote |
Werkt offerteregels bij vanuit portaalinvoer en zet de verkoopofferte om in een verkooporder. |
MakeOrderFromItem |
Maakt een verkooporder met één regel voor het geselecteerde artikel. |
MakeQuoteFromItem |
Maakt een verkoopofferte met één regel voor het geselecteerde artikel. |
Deze waarden kunnen als parameters worden geselecteerd wanneer de codeunit aan een actie of processtatus is toegewezen.
Uitvoeringsstroom
De trigger OnRun verdeelt alle aanroepen.
- Bij een normale actie leest deze de dataset-tabelactie en configuratie. Een procesactie haalt de parameter uit de volgende status; andere actietypen uit de actie.
- Bij een subfunctie leest deze de actie van de koptabel en voegt een achtervoegsel uit
Rec."Sub Function Execute"toe. - De resulterende waarde wordt door de laatste
case-instructie verwerkt.
Sub Function Execute |
Achtervoegsel | Gebruik |
|---|---|---|
SAVE |
Save |
Aangepaste opslaglogica. |
CHECK |
Check |
Validatie vóór uitvoering. |
EVENT |
Event |
Een frontend-gebeurtenis verwerken en gegevens retourneren. |
HASEVENT |
HasEvent |
Aangeven of een gebeurtenis is geïmplementeerd. |
OPENDOCPAGE |
OpenDocPage |
Het record van de datasetregel openen. |
OPENNEWPAGE |
OpenNewPage |
Het door de actie gemaakte record openen. |
BASKETCHECK |
BasketCheck |
Een winkelmandbewerking valideren. |
Zo leveren MakeOrderFromQuote en EVENT de dispatchwaarde MakeOrderFromQuoteEvent.
Alleen deze handlers bevatten logica:
MakeOrderFromQuoteEventMakeOrderFromQuoteHasEventMakeOrderFromQuoteOpenDocPageMakeOrderFromQuoteOpenNewPageMakeOrderFromItemOpenDocPageMakeOrderFromItemOpenNewPageMakeQuoteFromItemOpenDocPageMakeQuoteFromItemOpenNewPage
De takken Save, Check en BasketCheck en de gebeurtenissen van de artikelgebaseerde functies zijn tijdelijke aanduidingen.
Voorbeelden van verkoopdocumenten
Een offerte naar een order converteren
MakeOrderFromQuote ontvangt het huidige record via een RecordRef. De procedure zoekt bijbehorende regels in SIM_DPS OL, leest QUANTITY en werkt verkoopregels bij. Een lege hoeveelheid krijgt 1.
Vervolgens voert deze de standaard goedkeuringscontrole uit, vraagt bevestiging wanneer een gebruikersinterface beschikbaar is, voert Sales-Quote to Order uit, kopieert het Business Portals-ordernummer naar Your Reference en slaat de nieuwe record- en pagina-ID op.
Een order of offerte vanuit een artikel maken
MakeOrderFromItem en MakeQuoteFromItem gebruiken het geselecteerde artikel en bedrijfsnummer dat aan de portaalorder is gekoppeld. Elke procedure maakt een kop en één regel, leest QUANTITY en gebruikt 1 bij lege invoer.
Voor procesacties wordt de documentkoppeling in SIM_DPS OL Status opgeslagen; voor andere actietypen in SIM_DPS OL.
Frontend-gebeurtenissen
| Gebeurtenis | Voorbeeldgedrag |
|---|---|
SELECTLINE |
Retourneert de record-ID's van regels in hetzelfde document met dezelfde hoeveelheid. |
UNSELECTLINE |
Retourneert dezelfde groep zodat de selectie kan worden gewist. |
INPUTLINE |
Leest QUANTITY, BRUTTO, NETTO en PRICE en retourneert berekende waarden. |
MakeOrderFromQuoteHasEvent zet Sub Function Has Event voor deze gebeurtenissen op true.
De handler leest XML uit de BLOB Sub Function Event Data, haalt EVENTVALUE uit ROOT/EVENT en schrijft het UTF-8-antwoord naar Sub Function Event Return.
De berekening voor INPUTLINE is illustratief: PRICE is hoeveelheid maal eenheidsprijs, BRUTTO is hoeveelheid maal 10, NETTO is hoeveelheid maal 5 en lege numerieke invoer geldt als nul.
Zie Regelselectie-gebeurtenis, Regeldeselectie-gebeurtenis en Regelinvoer-gebeurtenis.
Business Central-pagina's openen
OpenDocPage opent het record uit Dataset Table Record met de geconfigureerde pagina. OpenNewPage opent het gemaakte record; procesacties lezen de ID's uit SIM_DPS OL Status, andere acties uit SIM_DPS OL.
Hiervoor is een Business Central-gebruikersinterface nodig. Het is niet geschikt voor achtergrondsessies of webservices.
Implementatieoverwegingen
- Behoud
TableNo = "SIM_DPS OL"; Business Portals geeft de context door viaRec. - Voeg elke selecteerbare functie toe aan
GETFUNCTIONSen de dispatcher. - Gebruik exact de conventie van basisparameter plus achtervoegsel.
- Valideer vereiste records; meerdere lookups laten foutafhandeling bewust weg.
- Vervang hardgecodeerde berichten, veldcodes en
BRUTTO/NETTO-vermenigvuldigers. - Gebruik gelokaliseerde labels voor zichtbare tekst.
- Controleer de transactiegrens die
Commitveroorzaakt. - Retourneer bij veel overeenkomsten alleen noodzakelijke records.
Configuratieoverzicht
- Maak of selecteer de dataset-tabellen.
- Maak een actie of processtatus en wijs de codeunit toe.
- Selecteer een parameter die
GETFUNCTIONSretourneert. - Wijs de actie aan de vereiste tabel toe.
- Configureer invoercodes, pagina-ID's en gebeurtenissen.
- Test normale uitvoering, subfuncties, statussen, toegang tussen bedrijven en uitvoering zonder interface.