Zum Inhalt

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.

AL
'GETFUNCTIONS':
    Rec."Function List" := 'MakeOrderFromQuote,MakeOrderFromItem,MakeQuoteFromItem';

Ausführungsablauf

Der Trigger OnRun verteilt alle Aufrufe der Beispiel-Codeunit.

  1. 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.
  2. Bei einem Unterfunktionsaufruf liest er die der Kopftabelle zugeordnete Action und hängt ein aus Rec."Sub Function Execute" abgeleitetes Suffix an.
  3. 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:

  • MakeOrderFromQuoteEvent
  • MakeOrderFromQuoteHasEvent
  • MakeOrderFromQuoteOpenDocPage
  • MakeOrderFromQuoteOpenNewPage
  • MakeOrderFromItemOpenDocPage
  • MakeOrderFromItemOpenNewPage
  • MakeQuoteFromItemOpenDocPage
  • MakeQuoteFromItemOpenNewPage

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:

  1. Wird die standardmäßige Genehmigungsprüfung für das Angebot ausgeführt.
  2. Wird bei verfügbarer Benutzeroberfläche eine Bestätigung angefordert.
  3. Wird die Standard-Codeunit Sales-Quote to Order ausgeführt.
  4. Wird die Business-Portals-Auftragsnummer in Your Reference des neuen Verkaufsauftrags kopiert.
  5. 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:

  • PRICE ist Menge multipliziert mit dem VK-Preis der Verkaufszeile.
  • BRUTTO ist Menge multipliziert mit 10.
  • NETTO ist Menge multipliziert mit 5.
  • 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 über Rec.
  • Ergänzen Sie jede auswählbare Basisfunktion in GETFUNCTIONS und 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 Commit auf. 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

  1. Erstellen oder wählen Sie die Dataset-Tabellen für die Quelldatensätze.
  2. Erstellen Sie eine Action oder einen Prozessstatus und ordnen Sie die Codeunit zu.
  3. Wählen Sie einen von GETFUNCTIONS zurückgegebenen Funktionsparameter.
  4. Ordnen Sie die Action der erforderlichen Dataset-Tabelle zu.
  5. Konfigurieren Sie Eingabefeldcodes, Seiten-IDs und Frontend-Ereignisse.
  6. Testen Sie die normale Ausführung, aktivierte Unterfunktionen, die Prozessstatusverfolgung, den mandantenübergreifenden Zugriff und die Ausführung ohne Benutzeroberfläche.