[Ok :=] Record.FINDSET([ForUpdate][, UpdateKey]);
FINDSET
Die Funktion findet eine Menge an Datensätzen, anhand der gesetzten Filter und Schlüssel.
Parameter
Record: Der Record in welchem die Menge gesucht wird.
ForUpdate: Boolean, Standardwert FALSE. Dieser optionale Wert sollte auf TRUE gesetzt werden, wenn die Datensätze innerhalb des Records modifiziert werden. Unmittelbar danach wird dadurch die LOCKTABLE-Funktion auf der Tabelle ausgeführt bevor die Datensätze gelesen werden. Wird FALSE übergeben kann der Record weiterhin modifiziert werden, allerdings ist dieses Vorgehen nicht optimal.
UpdateKey: Boolean, Standardwert FALSE. Dieser Parameter wird nur benötigt, wenn ForUpdate TRUE ist. Dieser optionale Wert sollte auf TRUE gesetzt werden, wenn Schlüssel-Felder modifiziert werden. Wird FALSE übergeben können Schlüssel-Felder weiterhin modifiziert werden, allerdings ist dieses Vorgehen nicht optimal.
Rückgabewert
Die Funktion liefert TRUE zurück, wenn Datensätze gefunden werden, andernfalls FALSE. Wird der optionale Rückgabewert nicht ausgewertet und gibt dieser FALSE zurück, kommt es zu einem Runtime-Error.
Hinweis
FINDSET sollte stets in Verbindung mit einer REPEAT-UNTIL-Schleife angewendet werden.
Beispiel 1
In diesem Beispiel wird die Funktion ohne Modifizierung des Records ausgeführt. Dafür wird die Funktion CopyLine und die folgende Variable benötigt.
Name | Datentyp | Subtyp |
---|---|---|
PurchaseLine | Record | Purchase Line |
Anschließend wird folgender C/AL-Code eingefügt.
PurchaseLine.SETFILTER(Quantity,'>10'); IF PurchaseLine.FINDSET THEN BEGIN REPEAT CopyLine(PurchaseLine); UNTIL PurchaseLine.NEXT = 0; END;
Beispiel 2
In diesem Beispiel wird die Funktion mit Modifizierung des Records ausgeführt. Dafür wird die Funktion GetNewRespCenter und die folgenden Variablen benötigt. Es wird davon ausgegangen dass den Variablen entsprechende Werte zugeordnet wurden.
Name | Datentyp | Subtyp |
---|---|---|
SalesLine | Rec | Sales Line |
DocumentType | Option | |
DocumentNo | Code |
Anschließend wird folgender C/AL-Code eingefügt.
SalesLine.SETRANGE("Document Type",DocumentType); SalesLine.SETRANGE("Document No.",DocumentNo); IF SalesLine.FINDSET(TRUE,FALSE) THEN BEGIN REPEAT SalesLinSalesLine."Responsibility Center" := GetNewRespCenter(SalesLine); SalesLine.MODIFY; UNTIL SalesLine.NEXT = 0; END;
Beispiel 3
In diesem Beispiel wird der Funktion mit Modifizierung eines Schlüsselfeldes ausgeführt. Dafür werden die folgenden Variablen benötigt. Es wird davon ausgegangen, dass den Variablen entsprechende Werte zugeordnet wurden.
Name | Datentyp | Subtyp |
---|---|---|
ProdOrder | Record | Production Order |
ProdOrderLine | Record | Production Order Line |
ProdOrderLine2 | Record | Production Order Line |
LineNo | Integer |
Anschließend wird folgender C/AL-Code eingefügt.
ProdOrderLine.SETCURRENTKEY(Status,"Prod. Order No.","Line No."); ProdOrderLine.SETRANGE(Status,ProdOrder.Status); ProdOrderLine.SETRANGE("Prod. Order No.",ProdOrder."No."); ProdOrderLine.SETRANGE("Line No.",LineNo); IF ProdOrderLine.FINDSET(TRUE,TRUE) THEN BEGIN REPEAT ProdOrderLine2 := ProdOrderLine; ProdOrderLine2."Line No." := ProdOrderLine."Line No." + 10000; ProdOrderLine2.MODIFY; UNTIL ProdOrderLine.NEXT = 0; END;