Zum Inhalt

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.

AL
'GETFUNCTIONS':
    Rec."Function List" := 'Execute';

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.

AL
ParamRecordSIMCORETempTable."Dyn Mapping Return Value" := 'THIS RETURN WILL BE SHOWN ON PAGE';

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

  1. Öffnen Sie CORE Data Mapping und erstellen oder öffnen Sie die von Business Portals verwendete Zuordnung.
  2. Fügen Sie eine Zeile hinzu und setzen Sie Type auf CODEUNIT.
  3. Setzen Sie Execute Codeunit auf 5138174 oder die ID der kundenspezifischen Kopie.
  4. Öffnen Sie Execute Codeunit Param und wählen Sie Execute.
  5. Ordnen Sie den Mapping-Code dem relevanten Business-Portals-Dataset-Feld, Feld-Mapping, Platzhalter oder einer anderen Einrichtung zu, die CORE-Datenzuordnungen verwendet.
  6. 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.RecID statt aus einer uninitialisierten lokalen RecordId.
  • Berücksichtigen Sie Rec.Company und verwenden Sie bei Bedarf RecordRef.Open mit 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

AL
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;
}