Durchsuchbare Dokumentation aufrufen | Zurück zur Dokumentationsübersicht
Navigation: Dokumentationen agorum core > agorum core support tool > Einführung in das agorum core support tool
Mit einem Worker suchen und verarbeiten Sie Dateien automatisch. Was der Worker genau mit den Dateien machen soll, können Sie anpassen. Der Worker stimmt sich zeitlich selbst ab und fragt laufend das System ab. Sie können anstelle eines Workers auch einen CronJob oder einen Task zur Automatisierung wiederkehrender Aufgaben verwenden. Für weitere Informationen über die Unterschiede zwischen CronJob, Taks und Worker siehe Unterschied zwischen CronJob, Task und Worker.
Sie müssen folgende Voraussetzungen erfüllen, um Worker verwenden zu können:
Damit die Worker performant laufen, achten Sie auf folgende Punkte:
Das System speichert die erstellten Worker automatisch in der MetaDB unter einem bestimmten Pfad.
So finden Sie die Worker:
/MAIN_MODULE_MANAGEMENT/workers
Hinweis: Die Anzahl an Worker ist abhängig von Ihren Systemressourcen. In der Regel reicht ein Thread pro Worker aus.
Anbei finden Sie drei mögliche Anwendungsfälle für einen Einsatz.
Seit Wochen, Monaten oder auch Jahren werden Dokumente im System abgelegt. Doch wie bei jedem Digitalisierungsprozess werden eines Tages zwei neue Workflows etabliert:
Damit das System unterscheiden kann, für welches Dokument welcher Workflow greifen soll, wird ein neues Metadatum gesetzt.
Dieses neue Metadatum greift für alle neu im System abgelegten Dokumente. Doch die Benutzer wünschen sich, dass sie auch alte Dokumente mit dem neuen Workflow bearbeiten können. Da diesem das notwendige Metadatum fehlt, wird ein temporären Worker erstellt. Dieser sucht nach diesen Frage- und Feedbackbögen und setzt je das dazu passende Metadatum.
Sobald der Worker durchgelaufen ist, können unsere Benutzer die neuen Workflows auf die alten Dokumente anwenden.
Rechnungen sollen für das Finanzamt in einer dazu passenden Ordnerstruktur verlinkt werden. Anstatt Dokumente im Ablageprozess zu verlinken, können Sie auch einen Worker bauen, der nach diesen Rechnungen sucht und diese verlinkt.
Über Tage oder Monate hinweg werden Ordner und Dokumente mit einem falschen Namen oder einem falschen Metadatum abgelegt. Nach diesen fehlerhaften Einträgen kann gesucht und das zutreffende Objekt entsprechend abgeändert werden.
Hier haben Sie die Möglichkeit, zwei verschiedene Worker zu erstellen:
QueryScript-Worker
Ein QueryScript-Worker findet in gut 95 % der Fälle Verwendung. Mit diesem bauen Sie eine Suchfunktion anhand von Metadaten auf. Diese Suche erkennt zu bearbeitende Dateien und reicht diese an ein JavaScript weiter.
So erstellen Sie einen QueryScript-Worker
ScriptWorker
Ein ScriptWorker wird selten verwenden. Bei diesem reicht die Suche nach Metadaten nicht aus, um die zu bearbeitenden Dateien zu finden. Stattdessen verwendet ein ScriptWorker ein JavaScript, um die gewünschten Objekte zu finden. Diese werden wiederum zur Bearbeitung an ein JavaScript weitergereicht.
So erstellen Sie einen ScriptWorker
Öffnen Sie den Bereich SubStatistics, finden Sie in weiteren Untereinträgen Folgendes:
Die mitgelieferten Worker dienen zur allgemeinen Funktion des Systems, etwa der MetadataInheritor, der für die Vererbung von Metadaten benötigt wird.
Achtung: Systemschäden durch Löschen der im Standard mitgelieferten Worker. Entfernen Sie die bereits enthaltenen Worker nicht, da das System ansonsten nicht mehr ordnungsgemäß funktioniert. Erstellen Sie eigene Worker, anstatt die mitgelieferten zu löschen. Zur Unterscheidung können Sie etwa im JavaScript einen Kommentar setzen, aus dem hervorgeht, dass Ihr Unternehmen diesen Worker erstellt hat.
Worker, egal ob QueryScript-Worker oder Script-Worker, suchen in regelmäßigen Zeitabständen nach Ihrem eigenen Arbeitsvorrat. Haben diese Worker viel zu tun, prüfen diese in schnellen Zeiteinheiten nach neuen Objekten, die bearbeitet werden müssen. Fiel dieser Arbeitsvorrat mehrmals leer aus, kann es bis zu 10 Sekunden dauern, ehe der Worker seine Suche erneut startet.
Sie können Worker direkt mit der export.yml exportieren.
Sobald Sie einen eigenen Worker erstellt haben, bekommt dieser wie oben beschrieben einen eigenen Funktionsbereich. Öffnen Sie ihn und scrollen Sie ganz nach unten, sodass Sie sich unterhalb des (letzten) JavaScriptes befinden. Dort finden Sie drei Schaltflächen:
Nehmen Sie Änderungen im Skript oder bei den Einstellungen im agorum core support tool vor, speichern Sie mit dieser Schaltfläche Ihre Änderungen. Das System führt einen Reset des Skripts durch, sodass der Worker mit dem neuen Skript läuft.
Ausgeschlossen ist eine Namensänderung. In diesem Fall erstellen Sie einen neuen Worker und löschen den aktuellen.
Wenn ein JavaScript ausgeführt wird, wird es kompiliert, bevor es startet. Damit der Kompiler nicht jedes Mal ausgeführt wird, wird das kompilierte Skript gecacht und gestartet.
Die Schaltfläche löscht den Cache für dieses Skript, sodass das Skript anschließend neu geladen wird. Damit werden auch require-Verweise auf ein anderes Skript aus dem Cache gelöscht und bei erneutem Ausführen wieder neu kompiliert.
Wird der Worker zurückgesetzt, wird auch der aktuell verwendete JavaScript-Kontext verworfen.
Diese Schaltfläche stoppt den Worker und löscht ihn anschließend.
Dieser Worker führt regelmäßig eine Suche nach Metadaten aus und übergibt das Ergebnis pro gefundenem Objekt an ein JavaScript. Jeder Aufruf des Skripts wird in einer Transaktion abgearbeitet.
Ein Worker kann etwa wie folgt aufgebaut werden:
Einstellung | Beschreibung | Beispiel |
---|---|---|
Name | Definiert den Namen des Workers. | – |
Concurrency | Definiert die Anzahl der verwendeten Threads. Setzen Sie den Wert auf 0, ist dieser Worker inaktiv. |
– |
Hidden Objects | Definiert, dass der Worker auch versteckte Objekte wie die Historie und Versionierung bearbeitet. | – |
Query | Definiert, welche Objekte durch den Worker bearbeitet werden sollen. Die Suche bauen Sie anhand der undefined>agorum core smart search und der Nutzung von etwa Wichtige Metadaten auf. Anhand von Metadaten und ggf. bestimmte Metadatenwerte fangen Sie somit Objekte ab. |
Nach dem Ordner incoming suchen inpath:${ID:/agorum/roi/Files/incoming} Hinweis: Sie können auch Metadaten ausschließen, um einen Endlos-Loop zu vermeiden. Hierfür können Sie eine NOT-Formulierung anlegen, etwa: identifier: kundenakte acmf_kundenname:* NOT acmf_kundennamerl:* Metadaten werden hierbei oft als eine Art Status eingesetzt. Tipp: Kopieren Sie eine Query vorab in das agorum core information center, um zu überprüfen, dass Sie die gewünschten Objekte finden. Schreiben Sie Metadaten stets klein. |
Properties | Definiert, welche Attribute / Metadaten des durch die Query gefundenen Objekts der Worker an das JavaScript übergibt.
|
uuid Erklärung Hier wird die uuid des Objekts an das Workerscript übergeben. In dem JavaScript verwenden Sie diese durch den Aufruf data.uuid. |
JavaScript | Fügt das JavaScript ein. | – |
Save as a new worker | Speichert den Worker. | – |
In dem folgenden Beispiel wird ein JavaScript für einen QueryScriptWorker gezeigt, der ein Objekt aus einem Ordner herausnimmt und in einen anderen Ordner ablegt. Zum Einsatz kommt die JavaScript-Bibliothek common-objects.
/* global sc, data */ let objects = require('common/objects'); // Objekt anhand der UUID finden let object = objects.tryFind(data.uuid); // Ausgabeordner für die Objekte let target = objects.find('/agorum/roi/Files/done'); // Überprüfen, ob das Objekt noch da ist if (object) { // Etwas mit dem Objekt machen... // Objekt aus dem Ordner "incoming" herausnehmen, sodass es nicht mehr in diesem Ordner zu finden ist // remove from all parents objects.remove(object); // Objekt in den Ordner "done" ablegen objects.add(object, [ target ]); }
Beim ScriptWorker wird der Arbeitsvorrat durch ein frei definierbares Skript produziert, dem Producer. Es können daher nicht nur Suchanfragen abgearbeitet werden, sondern etwa auch der Inhalt von Ordnern oder Einträge in einer CSV-Datei.
Einstellung | Beschreibung |
---|---|
Name | Definiert den Namen des Workers. |
Concurrency | Definiert die Anzahl der verwendeten Threads. Setzen Sie den Wert auf 0, ist dieser Worker inaktiv. |
Producer | Beim ScriptWorker wird der Arbeitsvorrat durch ein frei definierbares Skript produziert. Definieren Sie an dieser Stelle, welche Objekte das System wiederfinden soll, bevor diese dem Consumer-Skript überreicht werden.
|
Consumer | Definiert im Consumer-Skript, was Sie mit den gefundenen Objekten umsetzen möchten. Dieses Skript entspricht dem JavaScript-Feld des QueryWorkers. |
JavaScript | Fügt das JavaScript ein. |
Save as a new worker | Speichert den Worker. |
Dem Producer werden vom Worker-Framework zwei Parameter übergeben.
Parameter | Beschreibung |
---|---|
limit (number) | Definiert, wie viele Elemente erzeugt werden.
|
idle (boolean) | Definiert, dass seit dem letzten Aufruf des Producers keine weiteren Elemente verarbeitet wurden. Dieser Parameter kann für Optimierungen, die diese Information benötigen, eingesetzt werden, um etwa gewisse Schritte zu überspringen. |
Die Parameter idle und limit werden nicht eingestellt, sondern vorgegeben. Daran kann sich das Producer-Skript orientieren, wenn es darum geht, wie viele Arbeitseinheiten es erzeugen sollte, damit die Consumer-Threads weiterhin beschäftigt sind.
Producer
Der Producer erzeugt ein Array aus den ersten <limit>-Objekten im Ordner /agorum/roi/Files/Eingang. Das Producer-Skript wird jedes Mal im selben JavaScript-Kontext aufgerufen.
/* global sc, limit, idle */ let objects = require('common/objects'); objects.find('/agorum/roi/Files/Eingang').items().slice(0, limit).map(item => ({ id: item.ID, object: item }));
Consumer
Der Consumer ruft für das übergebene Objekt den Fileworkflow auf.
/* global sc, data */ let workflows = require('common/workflows'); workflows.start('FileWorkflow2', data.object);