Verschiedene Field-Funktionen in AL verwenden

Abgeschlossen

Wenn Sie mit Daten aus der Datenbank in AL arbeiten, müssen Sie andere Anweisungen verwenden, die in Feldern verwendet werden, z. B.:

  • CalcFields

  • CalcSums

  • FieldError

  • Init

  • TestField

  • Validate

Anweisungen „CalcFields“ und „SetAutoCalcfields“

Wenn Sie FlowFields im AL-Code abrufen, ist deren Wert immer Null. Dieser Wert ist darin begründet, dass die Berechnungsformel von FlowFields nicht im AL-Code ausgeführt wird. Wenn Sie FlowFields auf einer Seite verwenden, wird das FlowField automatisch berechnet, jedoch nicht im AL-Code. Daher müssen Sie die Funktion CalcFields verwenden. Mithilfe der Funktion CalcFields können Sie festlegen, welche FlowFields während der Implementierung Ihres Codes berechnet werden müssen.

Im folgenden Beispiel werden nur die FlowFields Saldo und Nettoveränderung berechnet. Außerhalb der Anweisung repeat until werden die FlowFields nicht mehr berechnet, nur innerhalb ihres Bereichs.

customer.SetRange("Date Filter", 0D, Today());

// Using CALCFIELDS
if customer.FindSet() then
    repeat
        customer.CalcFields(Balance, "Net Change");
       // Do some additional processing
    until customer.Next() = 0;

Wenn Sie immer bestimmte FlowFields (innerhalb des Funktionsbereichs) berechnen möchten, können Sie die Funktion SetAutoCalcFields verwenden.

// Using SETAUTOCALCFIELDS
customer.SetAutoCalcFields(Balance, "Net Change");
if customer.FindSet() then
    repeat
    // Do some additional processing
    until customer.Next() = 0;

CalcSums-Anweisung

Die Funktion CalcSums wird verwendet, um eine Summe für ein bestimmtes Feld basierend auf den Filtern des Datensatzes zu berechnen.

Im folgenden Beispiel wird die Tabelle Verkaufsrechnungskopf nach dem Feld Rech. an Deb.-Nr. zwischen 10000 und 50000 und das Belegdatum zwischen 0D (Beginn) bis Heute gefiltert. Die Funktion CalcSums fasst alle Felder vom Typ Amount zusammen.

salesInvoiceHeader.SetCurrentKey("Bill-to Customer No.");
salesInvoiceHeader.SetRange("Bill-to Customer No.", '10000', '50000');
salesInvoiceHeader.SetRange("Document Date", 0D, Today());
salesInvoiceHeader.CalcSums(Amount);

Message('The total is %1', salesInvoiceHeader.Amount);

Anweisung „FieldError”

Die Funktion FieldError beendet die Implementierung des Codes, was zu einem Laufzeitfehler führt. Außerdem wird eine Fehlermeldung für ein bestimmtes Feld erstellt. Das Feld wird rot umrandet, was darauf hinweist, dass beim Wert dieses Felds ein Fehler aufgetreten ist.

if item."Unit Price" < 10 then
    item.FieldError("Unit Price", 'must be greater than 10');

Anweisung „Init“

Der beste Ansatz besteht darin, den Befehl Init im Datensatz zu verwenden. Diese Aktion initialisiert alle Felder im Datensatz.

Initialisieren bedeutet, dass jedes Feld seinen eigenen Standardwert erhält (0 für numerische Datentypen, leere Zeichenfolge für Text usw.). Wenn Sie jedoch einen InitValue für das Feld in der Tabelle festgelegt haben, initialisiert die Funktion Init das Feld mit diesem Wert und nicht mit dem Standardwert.

customer.Init();
customer.Name := 'John Doe';
customer."E-Mail" := 'john.doe@contoso.com';
customer.Insert(true);

Anweisung „TestField”

Mit der TestField können Sie überprüfen, ob ein Feld einen Wert aufweist oder leer ist. Wenn das Feld leer ist, generiert die Funktion TestField einen Laufzeitfehler.

customer.TestField("Salesperson Code");

Sie können mit der Funktion TestField auch testen, ob ein Feld einen bestimmten Wert enthält oder nicht. Ist dies nicht der Fall, generiert das Feld einen Fehler. Im folgenden Beispiel überprüft TestField, ob der Verkäufercode den Wert ZX enthält. In diesem Fall enthält es den Wert nicht, da der Wert auf DK festgelegt ist.

customer."Salesperson Code" := 'DK';
customer.TestField("Salesperson Code", 'ZX');

Anweisung „Validate“

Wenn Sie einem Feld einen Wert zuweisen, wird der Trigger OnValidate dieses Felds nicht ausgeführt. Wenn Sie den Trigger OnValidate ausführen möchten, verwenden Sie die Funktion Validate.

Customer."Phone No." := '1234567891234'
customer.Validate("Phone No.");

Mit der Funktion Validate können Sie auch einen Wert zuweisen und den Trigger OnValidate ausführen.

customer.Validate("Phone No.", '1234567891234');