Durchsuchbare Dokumentation aufrufen | Zurück zur Dokumentationsübersicht
Navigation: Dokumentationen agorum core > agorum core information center entwickeln
Hintergrundaktivitäten sind laufende oder abgeschlossene Prozesse in agorum core. Solche Hintergrundaktivitäten laufen etwa, wenn ein Benutzer einen ZIP-Anhang entpackt. Sie können die Hintergrundaktivitäten verfolgen und feststellen, welchen Fehler das System meldet.
Typische Anwendungsfälle stellen etwa Migrationen oder Änderungen von großen Datensätzen dar. Die Funktion ist somit für große Datenmengen optimiert.
Sie konfigurieren Hintergrundaktivitäten mithilfe der JavaScript-Bibliothek background. Sie ist als Werkzeug für beliebige Aktivitäten gedacht, die überwacht werden sollen.
let background = require('/agorum/roi/customers/agorum.composite/js/lib/background'); // Callback, der ausgeführt wird // Parameter siehe nachfolgende Tabelle background(process => { process.name = 'Name des laufs'; process.status = 'Initialisiere Daten'; process.progress = 0; process.cancelable = true; });
let background = require('/agorum/roi/customers/agorum.composite/js/lib/background'); let objects = require('common/objects'); // Callback, der ausgeführt wird // Parameter siehe nachfolgende Tabelle background(process => { process.name = 'Name des laufs'; process.status = 'Initialisiere Daten'; process.progress = 0; process.cancelable = true; }, objects.find('user:demo'));
Hinweis: Wenn Sie eine Konfiguration im agorum core smart assistant konfigurator erstellen, damit ein Benutzer die Aktion per Klick im Kontextmenü ausführen kann, und diese Hintergrundaktivität sehen möchten, erscheint der Fortschritt in Prozent erst, wenn die Aktion des Benutzers vollständig durchgelaufen ist.
Damit der Fortschritt trotzdem erscheint, lagern Sie den Aufruf des Hintergrundprozesses aus, etwa über aguila.fork():
aguila.fork(() => { background(process => { process.name = 'Name des laufs'; process.status = 'Initialisere Daten'; process.progress = 0; // throw new Error('Test Error'); doSomething(process); }); });
Parameter | Wert |
---|---|
name | Definiert den Namen als String und erscheint in den Hintergrundaktivitäten in der Spalte Vorgang. |
status | Definiert den Status als String und erscheint in den Hintergrundaktivitäten in der Spalte Status. |
progress | Definiert den Status / Fortschritt als Integer zwischen 0 und 100 und erscheint in den Hintergrundaktivitäten in der rechten Spalte. |
cancelable | true Sie können den Prozess abbrechen. Die Funktion muss auf isCanceled reagieren (siehe Beispiel). false Sie können den Prozess nicht abbrechen. |
Hat das System den Callback (siehe Codebeispiel) abgearbeitet / ausgeführt und das Ende der Klammer erreicht, markiert das System den Prozess in den Hintergrundaktivitäten als abgeschlossen. Ein grauer Haken erscheint.
Tipp: Sie arbeiten mit der Funktion am effizientesten, wenn Sie diese in anderen Funktionen ausführen:
background(bt => { bt.name = 'Name des Laufs'; bt.status = 'Initialisiere Daten'; bt.progress = 0; doSomething(bt); }); function doSomething(bt) { // ... // isCanceled liefert true, wenn vom Benutzer "Abbrechen" gedrückt wurde while (bedingung && !bt.isCanceled()) { bt.status = 'Bearbeite xyz'; bt.progress = 50; } }
Die Hintergrundanzeige können Sie verwenden, ohne dass diese eine feste Schleifenfunktion enthält. Das ist für verstreut laufende Hintergrundprozesse nützlich, etwa innerhalb eines Workflows über mehrere Prozessknoten hinweg.
Sie können mit der Funktion background.get([ID], [USER-OBJECT]) einen Hintergrundprozess für einen bestimmten Benutzer starten.
Das System verwendet den aktuellen Benutzer der Sitzung, wenn Sie den Parameter user nicht mitgegeben.
let background = require('/agorum/roi/customers/agorum.composite/js/lib/background'); let objects = require('common/objects'); // Der folgende Aufruf gibt ein Prozess-Objekt mit der übergebenen ID zurück. // Ist das Prozess-Objekt bereits vorhanden, dann wird dieses geliefert, ansonsten ein neues angelegt. // Pro eindeutiger ID wird eine Zeile in der Hintergrundansicht erstellt. let process = background.get('eine-eindeutige-ID'); // let process = background.get('eine-eindeutige-ID', objects.find('user:demo')); // Wenn das Prozess-Objekt zuvor schon einmal verwendet wurde und bereits beendet ist, kann dieses wieder auf den Ursprungszustand // zurückgesetzt werden. (Dies ist nur notwendig, wenn immer wieder mit derselben ID gearbeitet wird.) if (process.isDone() || process.isCanceled()) { process.restart(); process.name = 'Bearbeite xyz'; process.cancelable = true; } // Nun kann irgendetwas gesetzt werden process.status = 'Bearbeite Schritt 123...'; process.progress = 60; // progress ist optional und auch nur dann möglich, wenn ein prozentualer Fortschritt berechnet werden kann. // Wenn der Vorgang fertig ist, kann dieser manuell abgeschlossen werden mit process.done();
Komplett lauffähiges Beispiel
/* global sc */ let aguila = require('common/aguila'); let background = require('/agorum/roi/customers/agorum.composite/js/lib/background'); let process= background.get('test-background'); process.restart(); background.show(); aguila.fork(() => { let cancelable = true; let countTo = 6000; process.cancelable = cancelable; process.name = 'Test process'; process.status = 'count'; // Sie können bei Bedarf im Prozess-Objekt auch noch weitere als JSON serialisierbare Daten speichern, die Sie an anderer // Stelle verwenden können. Dabei darf es sich nicht um lebende Objekte handeln, da diese serialisiert werden. Beispiele für ungültige Objekte: Date, agorum core-Objekte process.data = { total: countTo, current: 0 }; try { for (let progress = 0; progress <= countTo && !process.isCanceled(); ++progress) { let prog = progress/countTo * 100; if (process.isCanceled()) { progress = countTo; } process.data.current = progress; process.status = 'cancelable:' + cancelable + ' canceled:' + process.isCanceled() + ' (' + process.data.current + ')'; java.lang.Thread.sleep(1); } process.status = 'finished - cancelable: ' + cancelable + ' canceled: ' + process.isCanceled(); } finally { process.done(); } });
Das bei get() zurückgegebene Prozessobjekt besitzt folgende Parameter:
Parameter | Wert |
---|---|
name | Definiert den Namen als String und erscheint in den Hintergrundaktivitäten in der Spalte Vorgang. |
status | Definiert den Status als String und erscheint in den Hintergrundaktivitäten in der Spalte Status. |
progress | Definiert der Status / den Fortschritt als Integer zwischen 0 und 100 und erscheint in den Hintergrundaktivitäten in der rechten Spalte. |
cancelable | true Sie können den Prozess abbrechen. Die Funktion muss auf isCanceled reagieren (siehe Beispiel). false Sie können den Prozess NICHT abbrechen. |
done() | Markiert den aktuellen Prozess als beendet. |
cancel() | Bricht den aktuellen Prozess ab. Die Funktion muss im internen Ablauf auf cancel() mit isCanceled() reagieren. |
error(err) | Markiert den aktuellen Prozess als fehlerhaft. |
isCanceled() | Liefert true zurück, wenn der Benutzer den Prozess abgebrochen hat. |
isDone() | Liefert true zurück, wenn der Prozess abgeschlossen wurde. |
IsCancelable() | Liefert true zurück, wenn der Prozess als kann abgebrochen werden markiert ist. |
getError() | Liefert den Fehler zurück, der über error(err) gesetzt wurde. |
getId() | Liefert die ID des Prozesses zurück. |
data | Setzt oder holt eigene als JSON serialisierbare Daten, die das System im Prozess hinterlegt und die Sie systemweit verwenden können: data = {}; Dabei darf es sich nicht um lebende Objekte handeln, da das System diese serialisiert.
|
restart() | Setzt den Prozess zurück. |
Oftmals werden für die Verarbeitung im Hintergrund Suchen verwendet, um eine gewisse Menge an betroffenen Objekten zu verarbeiten. Um diese häufig verwendete Art zu vereinfachen, existiert ein vereinfachter Aufruf in der background-Bibliothek.
Beispiel
let metadata = require('common/metadata'); let background = require('/agorum/roi/customers/agorum.composite/js/lib/background'); // example, that runs as background task: searches all objects with tag=test and changes it to test2 background .query('ag_tags_ci:test') .name('Test query') .forEach(obj => { // do something with the object metadata({ ag_tags: ['test2'], }).save(obj); });
Tipp: Doppelklicken Sie auf eine Hintergrundaktivität, um mehr Informationen zur Hintergrundaktivität zu erhalten.
Zustand | Beschreibung |
---|---|
Schwarze Schrift | Der Prozess läuft gerade. Das System aktualisiert regelmäßig den Fortschritt, Status und Namen. |
Rote Schrift | Der Prozess ist auf einen Fehler gelaufen. |
Graue Schrift | Der Prozess ist abgeschlossen. Ein grauer Haken erscheint in der letzten Spalte. |
let background = require('/agorum/roi/customers/agorum.composite/js/lib/background'); background.show();