Mit Bezeichnern, Syntax und Variablen arbeiten

Abgeschlossen

Bevor Sie mit Variablen und Funktionen arbeiten können, müssen Sie zunächst einige wichtige Konzepte erlernen. Bezeichner, Syntax und Variablen sind zentrale Konzepte von AL und anderen Programmiersprachen.

Ein Bezeichner ist der Name eines Programmierelements, während eine Variable ein Speicherort ist, an dem Daten gespeichert werden. Sie können einen Bezeichner verwenden, um Ihrer Variable einen Namen zu geben, damit Sie sie verwenden können.

Syntax beschreibt die grammatikalischen Regeln für die Verwendung dieser Bezeichner. Die Syntax der Bezeichner wird durch die Anwendungssprache und einige bewährte Methoden bestimmt.

Für die Verwendung von Bezeichnern gelten einige grammatikalische Regeln. Innerhalb eines Objekts müssen alle Bezeichner eindeutig sein. Daher können Sie innerhalb eines Objekts nicht zwei Variablen mit demselben Bezeichner (oder Namen) deklarieren.

Wenn Sie eine Variable durch einen Bezeichner definieren, ist das erste Zeichen vorzugsweise ein Unterstrich oder ein Buchstabe. Wenn Sie ein Sonderzeichen oder ein Leerzeichen im Bezeichner verwenden, müssen Sie den Bezeichner in doppelte Anführungszeichen setzen.

Da die Anwendungssprache nicht zwischen Groß‑ und Kleinschreibung unterscheidet, unterscheidet sie keine Groß‑ und Kleinbuchstaben in Bezeichnern. Wir empfehlen, dass Sie Bezeichner mit PascalCase erstellen. PascalCase bedeutet, dass Sie den Namen Ihrer Variable mit einem Großbuchstaben beginnen. Wenn Ihr Name eine Kombination aus zwei Wörtern ist, würden Sie das zweite Wort auch mit einem Großbuchstaben beginnen. Wenn Sie beispielsweise eine Variable zum Speichern des Debitorennamens haben, können Sie CustomerName verwenden. Dies ist ein Beispiel für die PascalCase-Notation.

Bevor Sie mit Variablen arbeiten, müssen Sie sie deklarieren. Dies bedeutet, dass die Variablen Folgendes aufweisen müssen:

  • einen Bezeichner

  • einen Umfang

  • einen Datentyp

  • müssen initialisiert sein

Ihre Variable muss außerdem einen Umfang haben, der definiert, wo Sie auf Ihre Variable zugreifen und sie verwenden können.

Eine Variable kann mit einem globalen oder einem lokalen Umfang definiert werden. Wenn Sie Ihre Variable mit einem globalen Umfang definieren, ist Ihre Variable überall im Objekt verfügbar. Daher steht bei jedem Trigger überall dort, wo Sie Code-Anweisungen schreiben möchten, diese Variable zur Verfügung. Wenn der Umfang lokal ist, können Sie nur in der Prozedur, in der er deklariert wurde, auf diese Variable im jeweiligen Trigger zugreifen.

Beispiel für globale und lokale Geltungsbereichsvariablen

Im vorhergehenden Beispiel ist die Variable Counter mit einem globalen Umfang deklariert und kann in jedem Trigger und jeder Funktion in der Tabelle MyTable verwendet werden. Die Variable CustomerName ist im Trigger OnInsert definiert. Daher hat sie einen lokalen Umfang. Die Variable kann nur in diesem Trigger verwendet und nicht von einem anderen Trigger aufgerufen werden. Das Definieren aller Ihrer Variablen mit einem globalen Umfang kann einfacher sein, aber diese Variable kann dann in jedem Trigger verwendet werden. Die Variable kann anschließend in jedem Trigger geändert werden, was zu unerwünschten oder unerwarteten Ergebnissen führen kann. Wenn Sie also Variablen deklarieren, denken Sie über die Definition des Geltungsbereichs nach, und wählen Sie dann die richtige aus.

Systemdefinierte Variablen, die vom System automatisch definiert und verwaltet werden, sind ebenfalls vorhanden, und ihr Umfang wird auch vom System festgelegt. Die Variablen Rec und xRec sind Beispiele für systemdefinierte Variablen. Rec gibt Zugriff auf den aktuellen Datensatz und xRec ermöglicht Zugriff auf den vorherigen Datensatz (z. B. bevor eine Aktualisierung durchgeführt wurde).

Eine Variable hat immer einen bestimmten Datentyp. Es kann sich um eine Ganzzahl, einen Text, einen Code, ein Datum, eine Option usw. handeln. Wenn eine Variable im Speicher erstellt wird, wird sie initialisiert. Dies bedeutet, dass die Variable einen Standardstartwert erhält, bevor Sie dieser Variable einen Wert zuweisen. Dieser Standardwert hängt vom Datentyp dieser Variable ab.

Für Variablen mit einem numerischen Datentyp wird zum Initialisieren der Wert „Null“ verwendet. Zeichenfolgenvariablen werden mit einer leeren Zeichenfolge initialisiert. Eine boolesche Variable hat den Standardwert „false“.

Bis vor kurzem musste jede Variable in einer eigenen Zeile deklariert werden. Bei größeren Objekten führte dies zu seitenlangen Variablendeklarationen, selbst wenn die meisten von ihnen vom gleichen Typ waren.

, Nun ist es möglich, mehrere Variablendeklarationen desselben Typs in einer einzigen Zeile hinzuzufügen, um das Scrollen zu reduzieren, die Lesbarkeit zu verbessern und die Anzeige und Deklaration verwandter Typen zu erleichtern.

Deklarieren Sie mehrere Variablen desselben Typs in derselben Zeile, und verwenden Sie ein Komma, um die Variablennamen zu trennen.

Beispiel:


var
        myInt, nextInt, thirdInt : Integer;
        isValid, doCheck : Boolean;

Geschützte Variablen

Das Schlüsselwort „protected“ kann verwendet werden, um Variablen zwischen Tabellen und Tabellenerweiterungen sowie zwischen Seiten und Seitenerweiterungen zugänglich zu machen.

Wenn Sie nur einige Variablen als geschützt verfügbar machen möchten, müssen Sie zwei Abschnitte mit var-Deklarationen erstellen. Siehe die Syntax unten.


protected var
        myInt: Integer; // protected var

var
        myLocalInt: Integer; // local var

Das folgende Beispiel veranschaulicht, wie eine geschützte Variable deklariert und verwendet wird.


page 50100 MyPage
{
    SourceTable = Customer;
    PageType = Card;

    layout
    {
        area(Content)
        {
            group(General)
            {
                field(Name; Name)
                {
                    ApplicationArea = All;
                }
            }
            group(Advanced)
            {
                Visible = ShowBalance;

                field(Balance; Balance)
                {
                    ApplicationArea = All;
                }
            }
        }
    }

    protected var
        [InDataSet]
        ShowBalance: Boolean;
}

pageextension 50101 MyPageExt extends MyPage
{
    layout
    {
        addlast(Content)
        {
            group(MoreBalance)
            {
                Visible = ShowBalance; // ShowBalance from MyPage

                field("Balance (LCY)"; "Balance (LCY)")
                {
                    ApplicationArea = All;
                }
            }
        }

    }

    actions
    {
        addlast(Navigation)
        {
            action(ToggleBalance)
            {
                ApplicationArea = All;
                trigger OnAction()
                begin
                    ShowBalance := not ShowBalance; // Toggle ShowBalance from MyPage.
                end;
            }
        }
    }
}

Richtlinien für die Platzierung von AL-Code

Wir empfehlen die folgenden Richtlinien für AL-Code:

  • Schreiben Sie den Code im Allgemeinen in Codeunits anstatt auf das Objekt, auf dem er ausgeführt wird. Dies unterstützt ein klares Design und bietet die Möglichkeit, Code wiederzuverwenden. Es hilft auch, die Sicherheit durchzusetzen. Beispielsweise haben Benutzer in der Regel weder direkten Zugriff auf Tabellen, die vertrauliche Daten enthalten, wie die Sachpostentabelle, noch verfügen Sie über Berechtigung zum Ändern von Objekten.

  • Wenn Sie den Code, der auf dem Hauptbuch ausgeführt wird, in eine Codeunit einfügen, der Codeunit Zugriff auf die Tabelle gewähren und dem Benutzer die Berechtigung zum Ausführen der Codeunit erteilen, wird die Sicherheit der Tabelle nicht beeinträchtigt, und der Benutzer kann auf die Tabelle zugreifen.

  • Wenn Sie Code auf ein Objekt anstatt in eine Codeunit einfügen müssen, platzieren Sie den Code so nah wie möglich an dem Objekt, auf dem es ausgeführt wird. Fügen Sie beispielsweise Code, der Datensätze ändert, in die Trigger der Tabellenfelder ein.

Wiederverwenden von Code

Durch die Wiederverwendung von Code können Anwendungen schneller und einfacher entwickelt werden. Vor allem sind Ihre Anwendungen weniger fehleranfällig, wenn Sie Ihren AL-Code wie vorgeschlagen organisieren. Durch die Zentralisierung des Codes wird vermieden, dass Sie unbeabsichtigt Inkonsistenzen erzeugen, indem Sie dieselbe Berechnung an vielen Stellen durchführen, z. B. in mehreren Triggern, die dasselbe Tabellenfeld als Quellausdruck aufweisen. Wenn Sie den Code ändern müssen, können Sie entweder einige dieser Trigger vergessen oder einen Fehler machen, wenn Sie einen davon ändern.