5. November 2009 09:47
Hallo Allerseits,
brauche mal wieder Tipps von Euch, diesmal zum Thema Batch-Verarbeitung, bei der ich eine Möglichkeit haben will, den Batch-Job durch den Benutzer ggf. abzubrechen.
Gegeben sei eine Tabelle mit etlichen Datensätzen. Diese Tabelle wird von oben nach unten abgearbeitet. Für jeden Datensatz wird hintereinander ein komplexerer Prozess angestoßen. Ist die Tabelle abgearbeitet, dann sind alle glücklich.
Nun mag es sein, daß dem Anwender die Abarbeitung der Tabelle zu lange dauert, und er soll die Möglichkeit haben, einen Abbruch-Button zu klicken, durch den der "Loop" unterbrochen wird.
In den Loop habe ich einen Dialog implementiert, der mir einen Verlaufsbalken anzeigt (analog des Tipps von MichaelSchumacher in den Navision24-Tutorials)
Das bekomme ich leider nicht hin. Starte ich meinen Job, dann bekomme ich die weiße Sanduhr, und das Progrämmle läßt sich hartnäckig nicht ansprechen, bis es denn den Job bis zum bitteren Ende abgearbeitet hat.
Bisherige Vorgehensweise:
-----------------------------------
Start erfolgt über einen Button in einer Form.
Eine Funktion in einer CU wird aufgerufen.
In der Funktion wird ein Record auf die abzuarbeitenden Datensätze gefiltert (Reset, Setrange, Findfirst).
OpenDialog
REPEAT
UpdateDialog
Für jeden Datensatz wird eine Unterfunktion in einer anderen CU aufgerufen. Da passiert ganz viel, das ich jetzt erstmal als Blck-Box auffasse.
Commit; //Damit diese Daten schonmal geschrieben sind, egal, was mit dem Batch weiter passiert
Until Record.Next = 0;
CloseDialog
Ende der Funktion
-----------------------------------
Starte ich jetzt über meinen Form-Button den Prozess, läuft alles ganz prima - nur kann ich den Job nicht unterbrechen.
2. Versuch: Ein Yield nach meinem Commit. Nützt nix.
3. Versuch: Ein Sleep(200) nach meinem Commit. Ganz übel. Das System stürzt gänzlich ab.
4. Versuch: Ich mache den Loop gar nicht über die CU, sondern verwende, jetzt in noch näherer Analogie zum MichaelSchumacher-Tipp im Navision24-Tutorial, einen Report, über den ich dann meine untergeodneten Funktionen aufrufe, und lasse den Report ansonsten meine Ausgangstabelle abarbeiten. Nützt leider auch nix.
Hat irgendjemand eine Idee?
Viele Grüße,
SafetyFirst
Zuletzt geändert von SafetyFirst am 11. November 2009 14:29, insgesamt 1-mal geändert.