Durchsuchbare Dokumentation aufrufen

Zurück zur Dokumentationsübersicht

Hintergrundaktivitäten konfigurieren

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.

Verwendung


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;
});

Den Hintergrundprozess für einen bestimmten Benutzer starten

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

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;
  }
}

Verwendung im manuellen Modus, ohne interne Funktion


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.

Den Hintergrundprozess für einen bestimmten Benutzer starten

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.


Beispiel

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.

Beispiele für ungültige Objekte

  • Date
  • agorum core-Objekte
restart() Setzt den Prozess zurück.

Hintergrundaktivitäten mit queries


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);
  });

Hintergrundaktivitäten manuell öffnen


  1. Klicken Sie oben rechts neben Ihrem Profilbild auf  .
  2. Wählen Sie Zeige Hintergrundaktivitäten.

    Ergebnis: Das System zeigt laufende, fehlerhafte und abgeschlossene Hintergrundaktivitäten. 
Darstellung der Hintergrundaktivitäten

Tipp: Doppelklicken Sie auf eine Hintergrundaktivität, um mehr Informationen zur Hintergrundaktivität zu erhalten.

Zustände der Hintergrundaktivität

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.

Hintergrundaktivität per JavaScript aufrufen


let background = require('/agorum/roi/customers/agorum.composite/js/lib/background');
background.show();