Open Source Dokumentenmanagement
Dokumentation

Durchsuchbare Dokumentation aufrufen | Zurück zur Dokumentationsübersicht

Navigation: Dokumentationen agorum core > agorum core information center entwickeln


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 that is executed
// for the list of parameters see the table below 
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 that is executed
//  for the list of parameters see the table below 
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 und erscheint in den Hintergrundaktivitäten in der rechten Spalte. Der angegebene Wert muss eine Prozentangabe, einen berechneten Integer zwischen 0 und 100 ergeben.
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 returns true, if the user clicks "Abbrechen/Cancel"
  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');

// The following call returns a process object with the transferred ID.
// If the process object already exists, it is returned, otherwise a new one is created.
// For each unique ID one line is created in the list of background activities.
let process = background.get('eine-eindeutige-ID');

// let process = background.get('eine-eindeutige-ID', objects.find('user:demo'));

// If the process object has been used before and has already been closed, it can be reset to its original state.
​​​​​​// (This is only necessary if the same ID is used.)
if (process.isDone() || process.isCanceled()) {
  process.restart();

​​​​​​  process.name = 'Bearbeite xyz';
  process.cancelable = true;
}

// Now something can be set.
process.status = 'Bearbeite Schritt 123...';
process.progress = 60; // progress is optional and only possible if a percentage progress can be calculated.

// When the process is finished, it can be completed manually with
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';

  // create local copy of process.data
  let processData = {
    total: countTo,
    currentDuration: 0,
    startTime: Date.now(),
  };

  try {
    for (let progress = 0; progress <= countTo && !process.isCanceled(); ++progress) {
      let currentTime = Date.now();
      processData.currentDuration = currentTime - processData.startTime;

      if (process.isCanceled()) {
        progress = countTo;
      }

      process.progress = (progress / countTo) * 100;

      process.status =
        'cancelable:' +
        cancelable +
        ' canceled:' +
        process.isCanceled() +
        ' (' +
        processData.currentDuration +
        ' ms elapsed)';

      java.lang.Thread.sleep(1);
    }

    // set the updated data
    process.data = processData;
    process.status = 'finished - cancelable: ' + cancelable + ' canceled: ' + process.isCanceled();
  } finally {
    process.done();
  }
});

 

Illustration der Hintergrundaktivitäten zum lauffähigen Beispiel

 

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 und erscheint in den Hintergrundaktivitäten in der rechten Spalte. Der angegebene Wert muss eine Prozentangabe, einen berechneten Integer zwischen 0 und 100 ergeben.
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();