[Gelöst] [RTC] - Aufgabenwarteschlange Deadlocks

2. März 2020 12:37

Hi,

ich habe eine Codeunit welche auf Knopfdruck eine E-Mail mit ein Dokument versendet.
Da die Erstellung des Dokument etwas dauert würde ich das gerne über die Aufgabenwarteschlange machen, damit die GUI nicht blockiert.

Nun ist das verhalten so, wenn ich Codeunit einmal als Aufgabewarteschlangenposte erstelle ist es okay, markiere ich 20 Dokumente zu versenden,
gehen einige durch, bei einigen stellt sich die Aufgabenwarteschlange um auf Error weil:

"Vorgang konnte nicht abgeschlossen werden, da ein Datensatz in der Tabelle Aufgabewarteschlangenposten durch ein anderen Benutzer gesperrt wurde"
bzw.
"Die Aktion wurde aufgrund einer Änderung der Tabelle Aufgabewarteschlangeposten durch ein anderen Benutzer blockiert."

Den Prozess habe ich mir abgeschaut bei Sales Order Posten über Aufgabewarteschlange. Und trotzdem bekomme ich Sperren :(
Klar dass die Aufgabenwarteschlange ständig irgendwas macht und guckt und evtl. was ändern muss.

Wie könnte ich die Deadlocks vermeiden? Ich hatte da gedacht erstmal alle Jobs erstellen, und auf OnHold setzen, und dann erst abarbeiten.
Aber bekomme den initialen Job schon nicht auf OnHold. habe auch schon versucht die Jobs jeweils + 1 Minute, geht besser, aber kommt auch noch zu sperren.

Hat evtl. noch jemand die Zündende Idee für mich?

Vielen Dank
Zuletzt geändert von elTorito am 6. März 2020 16:21, insgesamt 2-mal geändert.

Re: [RTC] - Aufgabenwarteschlange Deadlocks

2. März 2020 16:25

für mich zum Verständnis:

du markierst 20 Dokumente (nehmen wir mal an, geb. VK-Rechnungen) und drückst deinen Knopf.

Was passiert dann?
Die Dokumente werden markiert (ich nenne es mal "zu versenden").
So wie du es schreibst, erstellst du aber für alle 20 Dokumente jeweils einen Aufgabenwarteschlangenposten (also 20 Stück)?

Warum machst du es nicht so:
Du hast eine Codeunit, die du in die Aufgabenwarteschlangeposten eingebunden hast - diese soll z.B. aller 5minuten die "zu versendenden" Dokumente durchlaufen (also prüfen, ob zu versendende Dokumente da sind) und diese jeweils versenden - damit es reibungslos funktioniert, wäre ein SLEEP vielleicht angebracht - je nachdem wie lange die Dokumentenerstellung dauert.

Re: [RTC] - Aufgabenwarteschlange Deadlocks

2. März 2020 17:23

Hallo Sweikelt,

ja genau so, die 20 Datensätze werden in eine Extra Tabelle verschoben und von dort aus dann ein XML /PDF gedöns generiert.

Eine CU welche alle X Minuten prüft ob was zu tun ist wäre auch eine Idee, aber wie geht das? Ich kenne bei Wiederkehrenden Jobs nur dass die Täglich ausgeführt werden.

Danke

Re: [RTC] - Aufgabenwarteschlange Deadlocks

2. März 2020 17:25

elTorito hat geschrieben:...
Eine CU welche alle X Minuten prüft ob was zu tun ist wäre auch eine Idee, aber wie geht das? Ich kenne bei Wiederkehrenden Jobs nur dass die Täglich ausgeführt werden.
...

Es gibt ein Feld am Warteschlangeposten "Anzahl Minuten zwischen den Ausführungen"

Re: [RTC] - Aufgabenwarteschlange Deadlocks

2. März 2020 18:17

Hmm. Tatsache. Das ist dann wohl ein paar Jahre an mir vorbeigegangen, passt zu den Montag heute :roll:
Dann probiert ich das mal so.

Vielen Dank

Re: [RTC] - Aufgabenwarteschlange Deadlocks

2. März 2020 18:48

elTorito hat geschrieben: Das ist dann wohl ein paar Jahre an mir vorbeigegangen, passt zu den Montag heute :roll:


kenn ich ;)
Mit einem Aufgabenwarteschlangenposten kommst du dann wunderbar hin - ist auch gleich viel übersichtlicher

Re: [RTC] - Aufgabenwarteschlange Deadlocks

2. März 2020 22:22

Mit der Codeunit Variante funktioniert das bisher gut.

Vielen Dank nochmal.

Wenn die CU nun über eine Tabelle läuft und etwas verarbeitet, und bei Datensatz 10 von 20 auf ein Fehler laeuft wird der Rest nicht verarbeitet.
Die Aufgabenwarteschlange setzt die CU ja dann auf Fehler. Bräuchte ich dann eine weitere CU welche den Status wieder zurücksetzt?

Re: [RTC] - Aufgabenwarteschlange Deadlocks

3. März 2020 09:24

Super!
ja du kannst das über eine weitere Codeunit zurücksetzen lassen, aber dann hast du ja keine Gewissheit, dass beim neuen RUN der fehlerhafte Datensatz nicht wieder einen Fehler wirft und die Verarbeitung wieder gestoppt wird.
Besser wäre vvl.

Code:
IF Codeunit xyz.RUN THEN....


Du hast also eine CU für den Durchlauf deiner markierten Tabellen - da dürfte nix passieren (Durchlauf CU)
Dann hast du eine zweite CU, die in der Durchlauf CU die Belege mailt (einzeln per IF Codutenit.RUN), kommt es da zu einem Fehler, kannst du es ja wunderbar abfangen und ggf. den fehlerhaften Datensatz markieren, dass er manuell versendet werden muss (oder so ähnlich).

Ich hoffe ich habe es einigermaßen verständlich ausgedrückt (in meinem Kopf klingt es logisch)

Re: [RTC] - Aufgabenwarteschlange Deadlocks

3. März 2020 11:41

Hallo,

das Problem dürfte sein, das der Job z.B. einmal pro Minute läuft der Job aber mehr als eine Minute benötigt.
Versuch mal die Zeiten so zu erhöhen, dass er auf jeden Fall fertig ist, bevor der nächste Lauf startet.

Gruß Fiddi

Re: [RTC] - Aufgabenwarteschlange Deadlocks

3. März 2020 18:41

fiddi hat geschrieben:Hallo,
das Problem dürfte sein, das der Job z.B. einmal pro Minute läuft der Job aber mehr als eine Minute benötigt.
Versuch mal die Zeiten so zu erhöhen, dass er auf jeden Fall fertig ist, bevor der nächste Lauf startet.
Gruß Fiddi


Wenn ich doch aber den Job "händisch" erstelle (wie das Beispiel Aufträge über Warteschlange buchen) dann läuft dieser nicht Wiederkehrend.
Aber könnte etwas dran sein, wenn ich die Zeit (letzter Job) + 2 Minuten setze, dann passieren weniger Fehler (Deadlocks).

Bei Job + 2 Minuten würde es aber ca 20 Minuten für 10 Dokumente dauern, wenn ich die Funktion ohne Aufgabenwarteschlange auslöse dauert es ein paar Minuten bis alle durch sind.
Werde das aber auch noch mal testen ob es so geht wenn die Zeit höher gesetzt wird.

Ansonsten halt über die zweite CU, in der Tabelle über welche die erste CU läuft wird ein Status gespeichert der gefiltert werden kann so dass im Fehlerfall die erste CU nicht nochmal drüber laeuft.

Danke euch für die Antworten .

Re: [RTC] - Aufgabenwarteschlange Deadlocks

4. März 2020 10:23

Guten morgen
Eine Frage noch :-)

Die Einstellung Maximum Concurrent Running Tasks, was bewirkt diese?

Über den weg der Zwischentabelle läuft das nun stabil, wenn Fehler auftauchen, werden diese in der Zwischentabelle gespeichert
und die Haupt CU welche prüft ob neue Sachen zu verarbeiten sind wird dabei nicht auf Fehler gesetzt, bzw. nur wenn ich irgendwo Fehler nicht behandelt habe.