Beispiel-Codeunit für dynamische Zuordnung
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, die Ausführung von Aktionen, Frontend-Ereignisse
sowie die Navigation zu Quell- oder neu erstellten Datensätzen.
Die Codeunit verwendet SIM_CORE Temp Table als Quelltabelle. Die Datenzuordnungs-Engine übergibt den Ausführungskontext über diesen temporären Datensatz, führt die ausgewählte Funktion aus und verwendet den in Dyn Mapping Return Value geschriebenen Wert.
Verwendung einer Mapping-Codeunit
Eine normale Zuordnungszeile bezieht einen Wert aus einem Feld, einer Konstante, einem Filter oder einer vordefinierten Funktion. Verwenden Sie den Typ CODEUNIT, wenn benutzerdefinierte AL-Logik erforderlich ist, etwa zum Kombinieren mehrerer Datensätze, für Berechnungen, für Werte, die mit Standardzuordnungen nicht dargestellt werden können, oder für portalspezifische Bezeichnungen.
Eine Einführung finden Sie unter Datenzuordnungen erstellen.
Funktionsermittlung und Dispatch
Beim Parameter-Lookup ist Rec.Param leer. OnRun verwendet deshalb GETFUNCTIONS und gibt Execute in Rec."Function List" zurück.
Bei normaler Ausführung kopiert CORE Execute Codeunit Param nach Rec.Param. Das Beispiel verteilt Execute an die öffentliche Prozedur Execute. Weitere Funktionen müssen sowohl in Function List als auch in der case-Anweisung ergänzt werden.
Ausführungskontext
| Feld | Zweck |
|---|---|
RecID |
Identifiziert den Quelldatensatz. |
Company |
Identifiziert den Business-Central-Mandanten der Auswertung. |
Param |
Enthält den konfigurierten Funktionsnamen wie Execute. |
Function List |
Gibt bei der Einrichtung verfügbare Funktionen zurück. |
Dyn Mapping Return Value |
Gibt das Ergebnis als Text an die Mapping-Engine zurück. |
Das Rückgabefeld ist Text[250]. Konvertieren Sie andere Datentypen vor der Zuweisung in eine geeignete Textdarstellung.
Beispielverhalten
Das Beispiel gibt den festen Text THIS RETURN WILL BE SHOWN ON PAGE zurück. Damit wird lediglich geprüft, ob Aufruf und Rückgabe korrekt funktionieren.
LocalRecordId wird vor LocalRecordRef.Get(LocalRecordId) nie zugewiesen. Die Anweisung lädt daher nicht den Datensatz des aktuellen Mapping-Kontexts. Eine kundenspezifische Implementierung sollte ParamRecordSIMCORETempTable.RecID und bei Bedarf ParamRecordSIMCORETempTable.Company verwenden, die Tabellennummer prüfen und anschließend den Rückgabewert berechnen.
Konfiguration
- Öffnen Sie CORE Data Mapping und erstellen oder öffnen Sie die von Business Portals verwendete Zuordnung.
- Fügen Sie eine Zeile hinzu und setzen Sie Type auf
CODEUNIT. - Setzen Sie Execute Codeunit auf
5138174oder die ID der kundenspezifischen Kopie. - Öffnen Sie Execute Codeunit Param und wählen Sie
Execute. - Ordnen Sie den Mapping-Code dem relevanten Business-Portals-Dataset-Feld, Feld-Mapping, Platzhalter oder einer anderen Einrichtung zu, die CORE-Datenzuordnungen verwendet.
- Testen Sie repräsentative Datensätze und Mandanten.
Die Codeunit muss in den Berechtigungssätzen des ausführenden Benutzers oder Dienstkontos enthalten sein. Das Standardbeispiel ist bereits in den Business-Portals-Berechtigungen für Administratoren und Benutzer enthalten.
Implementierungshinweise
- Behalten Sie
TableNo = "SIM_CORE Temp Table"bei. - CORE übergibt den Mapping-Kontext über
Rec. - Lesen Sie die Quell-ID aus
Rec.RecIDstatt aus einer uninitialisierten lokalenRecordId. - Berücksichtigen Sie
Rec.Companyund verwenden Sie bei BedarfRecordRef.Openmit dem vorgesehenen Mandanten. - Prüfen Sie
RecID.TableNo, fehlende Datensätze und die maximale Länge von 250 Zeichen. - Formatieren Sie Werte konsistent, da CORE das Ergebnis als Text verwendet.
- Vermeiden Sie UI-Aufrufe, Bestätigungen und Seitenaktionen.
- Gewähren Sie nur die erforderlichen Leseberechtigungen.
Vollständiger Beispielcode
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;
}