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
| 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
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

