Beispiel-Action-Codeunit
Die Codeunit 5138156 "SIM_DPS Sample CU" zeigt, wie eine Business-Central-Codeunit benutzerdefinierte Action-Logik für Business Portals bereitstellt. Das Beispiel verwendet SIM_DPS OL als Quelltabelle und behandelt Funktionsermittlung, Action-Ausführung, Frontend-Ereignisse sowie die Navigation zu Quell- oder neu erstellten Datensätzen.
Die Codeunit ist eine Referenzimplementierung. Übernehmen Sie die benötigten Muster in eine kundenspezifische Codeunit und ersetzen Sie Verkaufslogik, Meldungen, Eingabefeldcodes und Berechnungen durch die Anforderungen der Lösung.
Verfügbare Funktionen
Wenn Business Portals die Codeunit ohne Action-Kontext ausführt, verwendet OnRun den Wert GETFUNCTIONS und gibt in Rec."Function List" folgende kommagetrennte Werte zurück:
| Funktion | Zweck |
|---|---|
MakeOrderFromQuote |
Aktualisiert Angebotszeilen aus Portaleingaben und wandelt das Verkaufsangebot in einen Verkaufsauftrag um. |
MakeOrderFromItem |
Erstellt einen Verkaufsauftrag mit einer Zeile für den ausgewählten Artikel. |
MakeQuoteFromItem |
Erstellt ein Verkaufsangebot mit einer Zeile für den ausgewählten Artikel. |
Diese Werte können als Parameter ausgewählt werden, wenn die Codeunit einer Action oder einem Prozessstatus zugeordnet ist.
Ausführungsablauf
Der Trigger OnRun verteilt alle Aufrufe der Beispiel-Codeunit.
- Bei einem normalen Action-Aufruf liest er die Dataset-Tabellen-Action und deren Einrichtung. Eine Prozess-Action bezieht ihren Parameter aus dem nächsten Status; andere Action-Typen beziehen ihn aus der Action.
- Bei einem Unterfunktionsaufruf liest er die der Kopftabelle zugeordnete Action und hängt ein aus
Rec."Sub Function Execute"abgeleitetes Suffix an. - Der resultierende Wert wird in der abschließenden
case-Anweisung verarbeitet.
Der Dispatcher erkennt folgende Unterfunktionswerte:
Sub Function Execute |
Angefügtes Suffix | Verwendungszweck |
|---|---|---|
SAVE |
Save |
Benutzerdefinierte Speicherlogik. |
CHECK |
Check |
Validierung vor der Ausführung. |
EVENT |
Event |
Frontend-Ereignis verarbeiten und Ereignisdaten zurückgeben. |
HASEVENT |
HasEvent |
Dem Frontend mitteilen, ob ein Ereignis implementiert ist. |
OPENDOCPAGE |
OpenDocPage |
Den durch die Dataset-Zeile dargestellten Datensatz öffnen. |
OPENNEWPAGE |
OpenNewPage |
Den von der Action erstellten Datensatz öffnen. |
BASKETCHECK |
BasketCheck |
Einen Warenkorbvorgang prüfen. |
Beispielsweise ergeben der Funktionsparameter MakeOrderFromQuote und die Unterfunktion EVENT den Dispatch-Wert MakeOrderFromQuoteEvent.
Nur folgende Unterfunktionshandler enthalten in diesem Beispiel Logik:
MakeOrderFromQuoteEventMakeOrderFromQuoteHasEventMakeOrderFromQuoteOpenDocPageMakeOrderFromQuoteOpenNewPageMakeOrderFromItemOpenDocPageMakeOrderFromItemOpenNewPageMakeQuoteFromItemOpenDocPageMakeQuoteFromItemOpenNewPage
Die Zweige Save, Check und BasketCheck sowie die Ereigniszweige der artikelbasierten Funktionen sind Platzhalter. Ergänzen Sie dort nur Logik, wenn das entsprechende Portalverhalten benötigt wird.
Beispiele für Verkaufsbelege
Angebot in Auftrag umwandeln
MakeOrderFromQuote erhält den aktuellen Dataset-Datensatz über einen RecordRef. Vor der Umwandlung sucht die Prozedur die zugehörigen Zeileneinträge in SIM_DPS OL, liest den Eingabewert QUANTITY und aktualisiert die zugehörigen Verkaufszeilen. Eine leere Menge wird als 1 behandelt.
Anschließend:
- Wird die standardmäßige Genehmigungsprüfung für das Angebot ausgeführt.
- Wird bei verfügbarer Benutzeroberfläche eine Bestätigung angefordert.
- Wird die Standard-Codeunit
Sales-Quote to Orderausgeführt. - Wird die Business-Portals-Auftragsnummer in
Your Referencedes neuen Verkaufsauftrags kopiert. - Werden die neue Datensatz-ID und die Seiten-ID des Verkaufsauftrags gespeichert, damit Business Portals das Ergebnis später öffnen kann.
Auftrag oder Angebot aus einem Artikel erstellen
MakeOrderFromItem und MakeQuoteFromItem verwenden den ausgewählten Artikel und die der Business-Portals-Bestellung zugeordnete Geschäftsnummer. Jede Prozedur erstellt einen Verkaufskopf und eine Artikelzeile, liest QUANTITY und verwendet bei leerer Eingabe 1.
Der neue Beleg wird über seine Datensatz- und Seiten-ID mit Business Portals verknüpft. Bei Prozess-Actions werden die Daten in den passenden Datensatz SIM_DPS OL Status, bei anderen Action-Typen direkt in SIM_DPS OL geschrieben.
Frontend-Ereignisse
Das Beispiel zur Umwandlung eines Angebots in einen Auftrag unterstützt folgende Zeilenereignisse:
| Ereignis | Beispielverhalten |
|---|---|
SELECTLINE |
Gibt die Datensatz-IDs der Verkaufszeilen desselben Belegs mit derselben Menge wie die ausgewählte Zeile zurück. |
UNSELECTLINE |
Gibt dieselbe Gruppe von Datensatz-IDs zurück, damit das Frontend die Auswahl entfernen kann. |
INPUTLINE |
Liest QUANTITY, BRUTTO, NETTO und PRICE und gibt berechnete Werte für die auslösende Zeile zurück. |
MakeOrderFromQuoteHasEvent setzt Sub Function Has Event für diese Ereignisnamen auf true. Dadurch kann das Frontend die Unterstützung vor der Ereignisverarbeitung prüfen.
Der Handler liest XML aus dem BLOB Sub Function Event Data, übernimmt EVENTVALUE aus ROOT/EVENT, interpretiert ihn als Business-Central-Datensatz-ID und schreibt die Antwort mit UTF-8-Codierung in Sub Function Event Return.
Die Berechnung für INPUTLINE dient nur als Beispiel:
PRICEist Menge multipliziert mit dem VK-Preis der Verkaufszeile.BRUTTOist Menge multipliziert mit10.NETTOist Menge multipliziert mit5.- Leere numerische Eingaben werden als null behandelt.
Weitere Beispiele finden Sie unter Ereignis Zeile auswählen, Ereignis Zeile abwählen und Ereignis Zeileneingabe.
Business-Central-Seiten öffnen
OpenDocPage öffnet den durch Dataset Table Record referenzierten Datensatz. Die Prozedur verwendet die in der Dataset-Tabelle konfigurierte Seite und versucht eine Seite zu ermitteln, wenn keine Seiten-ID konfiguriert ist.
OpenNewPage öffnet den von einer Action erstellten Datensatz. Prozess-Actions lesen Datensatz- und Seiten-ID aus SIM_DPS OL Status, andere Actions aus SIM_DPS OL.
Das Öffnen von Seiten erfordert eine Business-Central-Benutzeroberfläche und eignet sich nicht für Hintergrundsitzungen oder Webservice-Aufrufe.
Implementierungshinweise
- Behalten Sie
TableNo = "SIM_DPS OL"bei; Business Portals übergibt den Kontext überRec. - Ergänzen Sie jede auswählbare Basisfunktion in
GETFUNCTIONSund im Dispatcher. - Verwenden Sie für Unterfunktionen exakt die gezeigte Namenskonvention aus Basisparameter und Suffix.
- Validieren Sie alle benötigten Portal-, Kunden-, Artikel-, Angebots- und Statusdatensätze. Mehrere Lookups enthalten absichtlich keine explizite Fehlerbehandlung.
- Ersetzen Sie fest codierte Ereignismeldungen, Feldcodes und
BRUTTO-/NETTO-Multiplikatoren. - Verwenden Sie lokalisierte Labels für sichtbare Bestätigungen und Ereignistexte.
- Die Belegprozeduren rufen nach dem Speichern der Verknüpfung
Commitauf. Prüfen Sie diese Transaktionsgrenze. - Geben Sie bei vielen Treffern nur benötigte Datensätze zurück und verlagern Sie geeignete Berechnungen zum Client.
Konfigurationsübersicht
- Erstellen oder wählen Sie die Dataset-Tabellen für die Quelldatensätze.
- Erstellen Sie eine Action oder einen Prozessstatus und ordnen Sie die Codeunit zu.
- Wählen Sie einen von
GETFUNCTIONSzurückgegebenen Funktionsparameter. - Ordnen Sie die Action der erforderlichen Dataset-Tabelle zu.
- Konfigurieren Sie Eingabefeldcodes, Seiten-IDs und Frontend-Ereignisse.
- Testen Sie die normale Ausführung, aktivierte Unterfunktionen, die Prozessstatusverfolgung, den mandantenübergreifenden Zugriff und die Ausführung ohne Benutzeroberfläche.