novomind
I'm new here

TaskResults bei Auftragsausführung über API nicht aktuell

Hallo,

folgendes Szenario: Wir haben ein Modul, das einen Auftrag (Schedule) über die API ausführt. Dies funktioniert soweit problemlos.

Als Rückmeldung für den Benutzer, soll nun während der Ausführung der gerade laufende Task angezeigt werden. Über ScheduleEntryControl und ScheduleEntryState kommt man an die Liste der TaskResults ran. Es scheint aber, als würden die TaskResults nicht aktualisiert werden. Es wird zu jedem Zeitpunkt während der Ausführung für alle Tasks der Status "NOT_STARTED" ausgegeben (auch nachdem die Ausführung des Auftrags beendet ist). Werden die TaskResults nur einmalig nach der Ausführung ausgegeben, so ist der jeweilige Status korrekt mit "SUCCESS" oder "FINISHED_WITH_ERRORS". Dazu folgendes Code Beispiel:

ScheduleEntry scheduleEntry = ...

ScheduleEntryControl control = scheduleEntry.execute();

while (RunState.NOT_STARTED.equals(control.getState().getState()) || control.isRunning()) {

    control.refresh();

    LogUtils.logInfo(getClass(), "schedule state: " + control.getState().getState());

    logState(control); // wird diese Zeile auskommentiert...

}

logState(control); // ... dann werden hier die TaskResults nach der Ausführung korrekt ausgegeben

// control.awaitTermination();

private void logState(ScheduleEntryControl control) {

    for (TaskResult tr : control.getState().getTaskResults()) {

        LogUtils.logInfo(getClass(), tr.getTask().getName() + " - " + tr.getState().toString()) + " - " + tr.getFinishTime());

    }

    Thread.sleep(500);

}

Handelt es sich hier um einen Bug oder ist das Code Beispiel nicht korrekt? Server-Version: 5.0.318.57504

Danke.

Viele Grüße.

0 Kudos
3 Replies
kohlbrecher
Crownpeak employee

Hallo Ronny,

das Problem ist uns bereits bekannt. Für genauere Informationen wende dich doch bitte an unseren Helpdesk (interne ID: #140971).

Vielleicht hilft die aber auch schon die Funktion awaitTermination() von ScheduleEntryControl.

Grüße

Jan

Hallo,

danke für die Info. ScheduleEntryControl.awaitTermination() nutzen wir bereits. Für eine detailierte Rückmeldung über den aktuellen Fortschritt der Ausführung reicht das aber leider nicht aus.

Viele Grüße.

0 Kudos

Hallo,

anbei nochmal die Begründung warum wir diesen Bugfix benötigen. Oder gibts es einen anderen workaroud um folgendes Problem zu lösen:

Folgendes haben wir bis jetzt umgesetzt: Wir haben ein Modul, das ein Icon in der FirstSpirit Toolbar bereitstellt. Wenn der Benutzer das Icon anklickt, wird ein Auftrag gestartet. Nach Beendigung des Auftrags kann der Benutzer weitere Aktionen ausführen, dazu benutzen wir bereits awaitTermination().
Problem hier ist, das der Auftrag durchaus länger (im Minutenbereich) dauern kann.
Aktuell können wir den Fortschritt des Auftrags nur durch eine unbestimmte Progressbar visualisieren, Viele Benutzer irritiert das aber, da sie nicht einschätzen können, ob noch etwas passiert oder der Auftrag "hängen geblieben" ist.

Wir wollen den Fortschritt des Auftrags deshalb mit einer bestimmten Progressbar visualisieren, die anzeigt welcher Schritt des Auftrags gerade ausgeführt wird. awaitTermination() hilft uns hier leider nicht. Die Methode refresh() steht nur für ScheduleEntryControl zur Verfügung und löst unser Problem ebenfalls nicht.
ScheduleEntryState und RunState stellen keine Methode refresh() zur Verfügung.

Vielen Dank und viele Grüße.

0 Kudos