Zum Inhalt

AL-Sprachfunktionen

Diese Seite dokumentiert nützliche AL-Sprachfeatures, die in unseren Projekten eingesetzt werden können bzw. sollen. Dabei geht es in erster Linie darum ein Bewusstsein für die verschiedenen Features zu entwickel. Zusätzlich wird hilfreiche Dokumentation verlinkt, damit jeder Entwickler sich eigenständig dazu informieren kann.

Ziel sollte es sein, diese Features dann zu verwenden, wenn es Sinnvolle Anwendungsmöglichkeiten gibt. Es soll nicht das Ziel sein, starre Regeln festzulegen, bei denen es in der Praxis einen erheblichen Mehraufwand bedeutet, diese Einzuhalten.


Partial Records (SetLoadFields)

Mit SetLoadFields lassen sich gezielt nur die Felder laden, die tatsächlich benötigt werden – anstatt immer den gesamten Datensatz zu lesen. Das verbessert die Performance insbesondere bei großen Tabellen oder häufigen Lesezugriffen.

Weiterführende Dokumentation: Using Partial Records – Microsoft Learn


this-Keyword

Mit dem this-Keyword kann innerhalb eines Objekts explizit auf die eigene Instanz verwiesen werden. Das erhöht die Lesbarkeit, insbesondere wenn Parameter und Felder den gleichen Namen tragen.

Verfügbar ab: AL Runtime 14.0

Ressource Link
Microsoft Learn Use this as self-reference
Blog (Stefano Demiliani) This is a nice AL addition

Ternärer Operator (?:)

Der ternäre Operator ermöglicht kompakte Zuweisungen auf Basis einer Bedingung – als einzeilige Alternative zu if … then … else.

Vorsicht bei komplexen Ausdrücken

Der ternäre Operator sollte nur für einfache, gut lesbare Bedingungen verwendet werden. Bei verschachtelten Ausdrücken ist ein klassisches if-Statement vorzuziehen. Sollte es zu komplex werden bietet sich auch das Auslagern in eine Funktion an.

Verfügbar ab: AL Runtime 14.0

Beispiel für den ternären Operator

Ressource Link
Microsoft Learn Use ternary operator
Kritische Betrachtung Dark Side of Ternary Operator

Multiline Strings

Multiline Strings erlauben es, mehrzeilige Texte direkt im Code zu definieren – ohne Zeilenumbrüche manuell verketten zu müssen. Das vereinfacht insbesondere die Definition längerer Textbausteine oder JSON-/XML-Strukturen.

Verfügbar ab: AL Runtime 15.0

Multiline Strings – Beispiel

continue-Keyword

Das continue-Keyword erlaubt es, Iterationen in Schleifen zu überspringen und zur nächsten Iteration zu wechseln. In verschachtelten Schleifen gibt es aktuell jedoch ein Fehlverhalten, wodurch nicht die innere, sondern die äußere Schleife übersprungen wird. Im folgenden Beispiel wird beim Ausführen des Continues nicht der nächste Artikeldatensatz geholt, sondern die nächste Iteration der For-Schleife:

Erwartetes Verhalten

local procedure test()
var
    Item: Record "Item";
    i: Integer;
begin
    for i := 1 to 15 do begin
        Item.FindSet(); 
        repeat
            if (Item."No." <> '10000') then // ← ...springt der Code hierhin, mit dem nächsten Item Record
                continue; // ← Wenn dieser Code ausgeführt wird, dann...

            Message(i.ToText());
        until Item.Next() = 0;
    end;
end;

Aktuelles Verhalten

local procedure test()
var
    Item: Record "Item";
    i: Integer;
begin
    for i := 1 to 15 do begin
        Item.FindSet(); // ← ...springt der Code hierhin
        repeat
            if (Item."No." <> '10000') then
                continue; // ← Wenn dieser Code ausgeführt wird, dann...

            Message(i.ToText());
        until Item.Next() = 0;
    end;
end;

Bis dieses Problem behoben ist, ist es Ratsam continue in verschachtelten Schleifen zu vermeiden bzw. die Logik umzudrehen:

Alternative Lösung

local procedure test()
var
    Item: Record "Item";
    i: Integer;
begin
    for i := 1 to 15 do begin
        Item.FindSet();
        repeat
            if (Item."No." = '10000') then
                Message(i.ToText());
        until Item.Next() = 0;
    end;
end;
Ressource Link
Microsoft Community Beitrag "continue" statement in repeat until loops
Microsoft Learn Use new "continue"-Keyword in AL-loops

Verfügbar ab: AL Runtime 15.0