16. September 2021 14:35
ImportData.SETRANGE("Processed at", 0DT);
IF ImportData.FINDSET(TRUE, FALSE) THEN BEGIN
REPEAT
ProcessSingleImportData(ImportData);
ImportData.VALIDATE("Processed at", CREATEDATETIME(TODAY, TIME));
ImportData.MODIFY(TRUE);
COMMIT;
UNTIL ImportData.NEXT = 0;
END;
Die unten aufgeführten C/AL-Funktionen sind während Schreibtransaktionen eingeschränkt, da mindestens eine Tabelle gesperrt wird. Form.RunModal ist in Schreibtransaktionen nicht zulässig. Codeunit.Run ist in Schreibtransaktionen nur zulässig, wenn der Rückgabewert nicht verwendet wird. OK := Codeunit.Run() ist z. B. nicht zulässig. Report.RunModal ist in Schreibtransaktionen nur zulässig, wenn RequestForm = FALSE. Report.RunModal(...,FALSE) ist z. B. zulässig. XmlPort.RunModal ist in Schreibtransaktionen nur zulässig, wenn RequestForm = FALSE gilt. XmlPort.RunModal(...,FALSE) ist z. B. zulässig. Verwenden Sie die COMMIT-Funktion, um die Änderungen vor dem Aufruf zu speichern, oder strukturieren Sie den Code anders.
Set this parameter to true if you want to modify any field value within the current key.
This parameter only applies if the ForUpdate parameter is true.
If you set this parameter to false, then you can still modify the records in the set, but these updates will not be performed optimally.
The default value is false.
16. September 2021 14:43
16. September 2021 15:02
16. September 2021 15:49
16. September 2021 16:27
Jupiter hat geschrieben:Du kannst es schon bei Deinem FINDSET(TRUE) belassen, nur musst Du den COMMIT immer VOR dem IF CODEUNIT.RUN absetzen (und nicht danach).
16. September 2021 16:39
Jupiter hat geschrieben:Und die Record-Variable ImportData an die Funktion ProcessSingleImportData am besten per VAR übergeben.
Jupiter hat geschrieben:Den anschließenden MODIFY auf die ImportData-Variable würde ich per neuen Instanz der Variable machen, denn Du änderst beim MODIFY das gefilterte Feld, u.U. kann Dir passieren, das Du dadurch nicht alle Datensätze erwischst (wenn Du wie jetzt MODIFY ohne die neue Instanz machst).
16. September 2021 17:12
InfoWissler hat geschrieben:Jupiter hat geschrieben:Den anschließenden MODIFY auf die ImportData-Variable würde ich per neuen Instanz der Variable machen, denn Du änderst beim MODIFY das gefilterte Feld, u.U. kann Dir passieren, das Du dadurch nicht alle Datensätze erwischst (wenn Du wie jetzt MODIFY ohne die neue Instanz machst).
Das ist soweit ich weiß nicht mehr aktuell. Früher habe ich das auch so gemacht, dass ich mir mit ImportHead2.GET die Variable nochmal zum Modifzieren geholt hätte, aber in NAV 2016 (und ich glaube auch in einigen früheren Versionen) ist das aber kein Thema mehr, dass sich NAV da verhaspeln kann, wenn man auf Felder filtert, deren Werte man dann in der Schleife anpasst.
InfoWissler hat geschrieben:@Timo, alles klar, danke. Dann würde ich demnächst mal einen NAV-Key statt eines SQL-Index anlegen und mal schauen, ob das den gleichen Effekt hat, wenn ich wieder das Problem habe, dass ein Repeat Until langsam ist aufgrund der Filterung, weil es dazu noch keinen passenden Schlüssel gibt.
16. September 2021 17:30
InfoWissler hat geschrieben:Aus Performancegründen?
20. September 2021 09:41
enh hat geschrieben:InfoWissler hat geschrieben:Jupiter hat geschrieben:Den anschließenden MODIFY auf die ImportData-Variable würde ich per neuen Instanz der Variable machen, denn Du änderst beim MODIFY das gefilterte Feld, u.U. kann Dir passieren, das Du dadurch nicht alle Datensätze erwischst (wenn Du wie jetzt MODIFY ohne die neue Instanz machst).
Das ist soweit ich weiß nicht mehr aktuell. Früher habe ich das auch so gemacht, dass ich mir mit ImportHead2.GET die Variable nochmal zum Modifzieren geholt hätte, aber in NAV 2016 (und ich glaube auch in einigen früheren Versionen) ist das aber kein Thema mehr, dass sich NAV da verhaspeln kann, wenn man auf Felder filtert, deren Werte man dann in der Schleife anpasst.
Ich bin mir ziemlich sicher dass das nachwievor relevant ist. Hatte das Problem definitiv schon in NAV 2017.
20. September 2021 17:24
20. September 2021 17:33
21. September 2021 08:19