Durchsuchbare Dokumentation aufrufen | Zurück zur Dokumentationsübersicht

Navigation: Dokumentationen agorum core > agorum core für Entwickler > agorum core workflow 3.0


Automation l Workflow-Bibliothek

Diese Dokumentation enthält Bibliotheken, die zu Automation | Workflow (agorum core workflow 3.0) gehören und hauptsächlich zum Entwickeln von Subworkflows und Knoten genutzt werden.

Sie erfahren, wie Sie die Workflow-Anhänge sowie Variablen validieren, laden und speichern können. 

Verwendung

Allgemeine Bibliothek laden

// Übergabe des eindeutigen Namens eines Knotens
let NODE_NAME = 'agorum_office_fill';
let workflow = require('/agorum/roi/customers/acworkflow/js/workflow')(token, NODE_NAME);

// Beispiel mit explizitem Setzen des sessionControllers
let workflow = require('/agorum/roi/customers/acworkflow/js/workflow')(token, NODE_NAME, sc);

// Siehe unten: Laden mit bereits vorhandenen Parametern
/* global sc, sca, token, instance, outlets, inlet, parameters */
let workflow = require('/agorum/roi/customers/acworkflow/js/workflow')(token, parameters);

Funktionen und Bibliotheken verwenden

Über das Einbinden der Bibliothek workflow können Sie diverse Bibliotheken und Funktionen verwenden, in dem folgenden Beispiel die Funktion validate.

In folgendem Beispiel wird geprüft, ob der Parameter path vom Datentyp string ist und zwingend vorhanden ist. Falls nein, erscheint eine Fehlermeldung. 

let workflow = require('/agorum/roi/customers/acworkflow/js/workflow')(token, parameters);
workflow.validate.string('path', false);

Eine einzelne Bibliothek laden

Wenn Sie nur einzelne Funktionen verwenden möchten, können Sie diese als separate Bibliothek laden. Sie müssen dann nicht die Bibliothek workflow laden.

let wfValidate = require('/agorum/roi/customers/acworkflow/js/workflow/validate')(parameters);
wfValidate.string('path', false);

Alle Bibliotheken laden

// Entweder alle gesammelt laden ...
let workflow = require('/agorum/roi/customers/acworkflow/js/workflow')(token, parameters);

// ... oder die Bibliotheken einzeln laden
let wfValidate = require('/agorum/roi/customers/acworkflow/js/workflow/validate')(nodeParameters);
let wfParameters = require('/agorum/roi/customers/acworkflow/js/workflow/parameters')(nodeParameters);
let wfVariables = require('/agorum/roi/customers/acworkflow/js/workflow/variables')(token, nodeParameters);
let wfObjects = require('/agorum/roi/customers/acworkflow/js/workflow/objects')(token, nodeParameters);

Parameter laden (per NODE_NAME)

Die Workflow 3.0-Bibliothek verwendet intern die Parameter des Subworkflows. Diese müssen Sie beim Laden der Bibliothek angeben.

Wird in dem erstellten Subworkflow der Knoten, der diese Bibliothek verwendet, nicht an erster Stelle verwendet, speichern Sie die Parameter in einem internen Bereich für den Knoten zwischen. Diese Funktion übernimmt der Knoten agorum.basic.initialize, der dann an erster Stelle steht.

Im Knoten initzialize geben Sie einen internen Namen an, dieser wird hier in dem Beispiel als NODE_NAME verwendet. Dort speichern und übergeben Sie den internen Namen des Subworkflows.

Die Workflow-Bibliothek arbeitet stark mit diesem Knoten zusammen. Wenn die Bibliothek einen Namen erhält, versucht sie, genau deren Parameter aus dem internen Bereich auszulesen.

let NODE_NAME = 'agorum_office_fill';
let workflow = require('/agorum/roi/customers/acworkflow/js/workflow')(token, NODE_NAME);

// Zugriff auf interne Daten des Knotens
let nodeScope = workflow.nodeScope;
let nodeParameters = nodeScope.parameters;

Dieses Beispiel orientiert sich am Knoten agorum.office.fill. Als erster Knoten wird der Knoten initialize verwendet und erhält den technischen Namen agorum_office_fill.

Beim Laden der Workflow-Bibliothek übergeben Sie diesen Namen, damit die Parameter dort ausgelesen werden. Das Arbeiten über diesen Weg mit dem Parameter NODE_NAME stellt den empfohlenen Weg dar und wird daher in allen zukünftigen Beispielen verwendet.

Übergabe vorhandener Parameter

Neben dem Laden der Parameter können Sie diese direkt übergeben.

Hinweis: Das Übergeben der Parameter funktioniert nur, wenn der Knoten auch als Startknoten im Subworkflow eingetragen ist und wird nur empfohlen, wenn die Parameter im Subworkflow nicht erneut verwendet werden müssen.

Bei Subworkflows bekommt nur der Startknoten (der erste Knoten, der ausgeführt wird) die Parameter übergeben. Diese sind im Header des Skripts zu finden:

/* global sc, sca, token, instance, outlets, inlet, parameters */


Ohne „agorum.basic.initialize“ laden

/* global sc, sca, token, instance, outlets, inlet, parameters */

// Übergabe der Parameter
let workflow = require('/agorum/roi/customers/acworkflow/js/workflow')(token, parameters);

// Beispiel mit explizitem setzen des sessionControllers
let workflow = require('/agorum/roi/customers/acworkflow/js/workflow')(token, parameters, sc);

workflow (workflow/index.js)

Hinweis: Wenn Sie die Bibliotheken einzeln verwenden, müssen Sie den NODE_NAME manuell auflösen.

Beim Laden über den NODE_NAME legt die Bibliothek den internen Bereich des Knotens an, falls er noch nicht existiert. Wurde der Knoten agorum.basic.initialize nicht ausgeführt, sind die Parameter daher leer, ohne dass die Bibliothek einen Fehler meldet. Erst eine Prüfung wie validate meldet dann fehlende Parameter. Existiert in den Token-Variablen der Bereich sys_acw_internal überhaupt nicht, bricht das Laden mit einem Fehler ab.

Funktionen

Diese Bibliothek enthält keine eigenen Funktionen.

Parameter

Folgende Parameter können übergeben werden:

Parameter Beschreibung Pflicht
token das Token des Subworkflows ja
parameters die parameters des Subworkflows

Hinweis: Hier können Sie auch den Namen der parameter angeben, etwa über die Variable NODE_NAME.

ja
sc Definiert den session controller. nein

Enthaltene Bibliotheken

Eigenschaften

Eigenschaft Beschreibung Beispiel
sc Liefert den übergebenen oder aufgelösten session controller zurück.
  • Über die Parameter wird versucht, anhand des privileged-Parameters den session controller aufzulösen.
  • Hat der Knoten einen Parameter, um die Rechte festzulegen (privileges), kann per parameters.privileged() der scPrivileged geladen werden. Dies wird von dieser Funktion übernommen.
let workflow = require('/agorum/roi/customers/acworkflow/js/workflow')(token, NODE_NAME);
let objects = require('common/objects')(workflow.sc);
nodeScope

Liefert die internen Daten der Knoten zurück.

  • Technisch wird unter dem Knotenname im internen Bereich des Workflows unter token.variables.sys_acw_internal[parametername] nachgeschaut.
  • Über den Scope können etwa auch die Parameter geladen werden.
let workflow = require('/agorum/roi/customers/acworkflow/js/workflow')(token, NODE_NAME);
let internalData = workflow.nodeScope;

// Zugriff auf interne Daten des Knotens
let test = internalData.outputTarget;

// Zugriff auf die parameter des Knotens
let param = internalData.parameters;

validate

Validiert Parameter nach deren Typ. Sie können unterscheiden, ob Parameter optional sind oder nicht und folgende Datentypen angeben:

Prüfung mit validate

Die Funktionen von validate prüfen Parameter nach folgenden Regeln:

Funktion Gültig ist
array ein Array
boolean ein Wert vom Typ boolean
date ein Objekt mit der Funktion getTime, etwa ein Date
float eine Zahl, auch als Text (etwa '1.5')
long eine ganze Zahl, auch als Text (etwa '5')
object eine ID oder ein Pfad, den der session controller findet. Findet er das Objekt nicht, lautet der Fehler object not found with ID. Ohne angegebenen session controller verwendet die Funktion sca.
string, variable ein Text. variable prüft wie string, nennt im Fehlertext aber den Typ variable.

Die Bibliothek laden


Direktes Laden über die Bibliothek „workflow“

workflow.validate.string('path', false);


Eigenständiges Laden der Bibliothek

Das Folgende muss nur mitgegeben werden, wenn die Bibliothek manuell, d. h. nicht über workflow.validate geladen wird:

let wfValidate = require('/agorum/roi/customers/acworkflow/js/workflow/validate')(parameters, sc); ​​​​
wfValidate.string('path', false);

Funktionen

Für jeden Typ muss nur der Name und der Hinweis optional / nicht optional angegeben werden. Parameter und sc werden am Anfang beim Laden der Bibliothek mitgegeben.

Funktion Beschreibung Beispiel
object Prüft auf den Datentyp object.

Kann auch einen session controller entgegennehmen.
workflow.validate.object('content', false, sc);
boolean Prüft auf den Datentyp boolean.
workflow.validate.boolean('content', false);
array Prüft auf den Datentyp array.
workflow.validate.array('content', false);
string Prüft auf den Datentyp string.
workflow.validate.string('content', false);
variable Prüft auf den Datentyp variable.
workflow.validate.variable('content', false);
date Prüft auf den Datentyp date.
workflow.validate.date('content', false);
long Prüft auf den Datentyp long.
workflow.validate.long('content', false);
float Prüft auf den Datentyp float.
workflow.validate.float('content', false);

Aufruf

Folgende Eigenschaften können angegeben werden:

Eigenschaft Beschreibung Pflicht
parameter name Definiert den Namen des zu prüfenden Parameters. ja
optional Definiert, ob der Parameter optional ist oder nicht. nein
session controller Definiert den session controller. nur nötig für die Funktion object


Beispiel

In diesem Beispiel existiert der Parameter perObject, der vom Typ boolean sein soll, sofern der Parameter angegeben ist. Der Parameter ist hier jedoch optional, d. h. es kommt zu keiner Fehlermeldung, wenn er nicht angegeben ist.

Der Parameter abc ist eine Pflichtangabe.

let wfValidate = require('/agorum/roi/customers/acworkflow/js/workflow/validate')(parameters);

// Optionaler Parameter
wfValidate.boolean('perObject', true);

// Pflicht Parameter
wfValidate.object('abc', false);

// Übergabe eines session controllers
wfValidate.object('abc', false, sca);

parameters

Unterstützt Knoten im Umgang mit Parameter.

Die Bibliothek laden


Direktes Laden über die Bibliothek „workflow“

workflow.​​​​​parameters.privileged();


Eigenständiges Laden der Bibliothek

Das Folgende muss nur mitgegeben werden, wenn die Bibliothek manuell, d. h. nicht über workflow.parameters geladen wird:

let wfParameters = require('/agorum/roi/customers/acworkflow/js/workflow/parameters')(parameters, sc); ​​​​
​​​​​wfParameters.privileged();

Funktionen

Funktion Beschreibung Beispiel
get

Holt Parameter aus einem bestimmten Namen (oder Pfad).

key
Definiert den Namen des zu holenden Parameters.

optional
Definiert, ob die Variable zwingend einen Wert haben muss.

  • Angabe per true / false
  • Der Parameter ist optional.
  • Ist der Parameter nicht gesetzt, ist der Standard optional = false und es werden Fehler geworfen, wenn der Wert des Keys keinen Wert hat.
workflow.parameters.get('ac_status', false);
find Holt ein oder mehrere Objekte aus dem Parameter.
  • Übergeben werden eine ID oder Pfad zur Datei.
  • Ist der Wert ein Array, liefert die Funktion ein Array von Objekten.
  • Beachtet den sc.
  • Fehlt der Parameter oder ist er leer, wirft die Funktion den Fehler Parameter "key" expected. Findet sie ein Objekt nicht, lautet der Fehler Object referenced by parameter "key" not found.
workflow.parameters.find('ac_object');
privileged Holt den sessionController (sc) aufgrund des angegebenen Parameters. Im Hintergrund wird dafür der Standardparameter privileges aufgelöst.
Der Parameter privileges kann folgende Werte haben:
  • null, undefined, ein leerer Text oder default: Aktive Benutzersitzung
  • elevated: Aktiver Benutzer mit Administratorrechten (sc.asAdmin())
  • administrator: Administrativer session controller (sca)
  • Jeder andere Wert führt zu einem Fehler. Der Fehler tritt bereits beim Laden der Bibliothek auf, nicht erst beim Aufruf von privileged.
workflow.parameters.privileged();


Beispiel für die Funktion „find“

Es wird angenommen, dass der Benutzer in den Parametern /agorum/roi/Files/Demo als Pfadname eingetragen hat. Der Name des Parameters heißt im Subworkflow baseFolder. Um die ID des Ordners zu ermitteln, kann workflow.parameters.find() verwendet werden.

workflow.parameters.find('baseFolder');

In dem Beispiel würde die ID des Ordners Demo zurückgeliefert werden.


Beispiele für die Funktion „privileged“

sc wird automatisch durch den übergebenen Parameter erkannt, wenn dort der Parameter privileges vorhanden ist:

​​​​​​ let parameters = require('/agorum/roi/customers/acworkflow/js/workflow/parameters')(parameters);

sc wird übergeben und explizit angegeben. Der Knoten hat somit keinen Parameter privileges oder verwendet ihn nicht:

​​​​​​ let workflowParameters = require('/agorum/roi/customers/acworkflow/js/workflow/parameters')(parameters, sc);

variables

Erleichtert das Holen und Setzen von Variablen. Sie können auch tiefere Strukturen laden. 

Die Funktionen get, set und merge unterstützen Dot-Notation, um auf verschachtelte Strukturen zuzugreifen.

Beispiel: workflow.variables.get('config.timeout', true) greift auf token.variables.config.timeout zu.

Nicht vorhandene Zwischensegmente werden bei set und merge automatisch als leere Objekte angelegt.

Beim Lesen mit get gilt: Fehlt der Wert (nicht vorhanden oder null) und ist optional nicht gesetzt, wirft die Funktion den Fehler Variable "key" not found. Mit optional = true liefert sie stattdessen undefined. Das gilt auch, wenn eine Zwischenebene fehlt. Ein leerer Schlüssel liefert alle Variablen des Tokens.

Die Bibliothek laden


Direktes Laden über die Bibliothek „workflow“

let sys_acw_processName = workflow.variables.get('sys_acw_processName', false);


Eigenständiges Laden der Bibliothek

Das Folgende muss nur mitgegeben werden, wenn die Bibliothek manuell, d. h. nicht über workflow.variables geladen wird:

let wfVariables = require('/agorum/roi/customers/acworkflow/js/workflow/variables')(token, parameters);
let sys_acw_processName = wfVariables.get('sys_acw_processName', true);

Funktionen

Funktion Beschreibung Beispiel
get Holt Daten aus den Workflow-Variablen.

key
Definiert den Namen der zu holenden Variable.

optional
Definiert, ob die Variable zwingend einen Wert haben muss.
  • Angabe per true / false
  • Der Parameter ist optional.
  • Ist der Parameter nicht gesetzt, ist der Standard optional = false und es werden Fehler geworfen, wenn der Wert des Keys keinen Wert hat.
// Holen des optionalen parameters path
let path = workflow.variables.get('path', true);
set Setzt Daten in die Workflow-Variablen.

key
Definiert den Namen der zu setzenden Variable.

value
Definiert den zu setzenden Wert.
// Setzen eines Status ag_status auf den Wert "in Bearbeitung"
workflow.variables.set('ag_status', 'in Bearbeitung');
merge Führt ein flaches Merge (Object.assign) eines Werts in eine bestehende Variable durch, anstatt sie komplett zu überschreiben. Existiert der Zielwert bereits, werden die Eigenschaften des übergebenen Objekts in das bestehende Objekt zusammengeführt. Existiert der Zielwert noch nicht, wird er mit dem übergebenen Wert angelegt. Verschachtelte Objekte führt die Funktion dabei nicht zusammen, sondern ersetzt sie durch das übergebene Objekt. Mit einem leeren Schlüssel mischt sie in die obersten Variablen des Tokens.

key
Definiert den Namen (oder Pfad per Dot-Notation) der zu mergenden Variable.

value
Definiert das Objekt, dessen Eigenschaften zusammengeführt werden sollen.
// Bestehende Konfiguration erweitern, ohne andere Eigenschaften zu verlieren
workflow.variables.merge('config', {
  timeout: 5000,
  retries: 3
});

// Vorher: config = { host: 'server1', timeout: 3000 }
// Nachher: config = { host: 'server1', timeout: 5000, retries: 3 }


Beispiel für die Funktion „get“

Es wird angenommen, dass der Workflow einen Parameter mit dem Namen resultVariable besitzt. Dieser Parameter wird bei Nutzung des Workflows mit einem Variablennamen befüllt. Um diesen Variablennamen zu erhalten, benötigen Sie workflow.parameters.get, wobei Sie anschließend den Inhalt mit workflow.variables.get aus der eingegebenen Variable holen können.

workflow.variables.get(workflow.parameters.get('resultVariable', false), false);

objects

Behandelt das Arbeiten mit Anhängen (attachments) oder anderen Objekten im Workflow.

Die Bibliothek wertet folgende Parameter aus. Alle sind optional. Fehlen inputVariable oder outputVariable, trägt die Bibliothek sys_acw_attachments in das übergebene Parameter-Objekt ein.

Parameter Typ Beschreibung
inputVariable Text Name der Variable, aus der get die Objekte liest. Standard: sys_acw_attachments
outputVariable Text Name der Variable, in die set und fork die Objekte schreiben. Standard: sys_acw_attachments
perObject boolean Legt fest, ob load, save, getScope und setScope die Daten je Objekt (unter dessen UUID) verwalten.
scopeVariable Text Name der Variable, in der die Daten liegen. Fehlt sie, sind die Token-Variablen selbst der Scope.
selectors Array Selektoren für select

Die Bibliothek laden


Direktes Laden über die Bibliothek „workflow“

let attachments = workflow.objects.get();


Eigenständiges Laden der Bibliothek

Das Folgende muss nur mitgegeben werden, wenn die Bibliothek manuell, d. h. nicht über workflow.objects geladen wird:

let wfObjects = require('/agorum/roi/customers/acworkflow/js/workflow/objects')(token, parameters, sc);
let attachments = wfObjects.get();

Funktionen

Funktion Beschreibung Beispiel
get Holt die Objekte aus dem Namen des Parameters inputVariable. 

Wird der Parameter nicht übergeben, wird stattdessen die interne Variable sys_acw_attachments verwendet. Das Ergebnis ist ein Array mit agorum core Objekten (die gespeicherten IDs löst die Funktion auf). Fehlt die Variable, wirft die Funktion einen Fehler. Mit optional = true liefert sie ein leeres Array.

optional
true/false

Die Bibliothek lädt die Objekte mit dem sc der Bibliothek. Die Funktion get liefert agorum core Objekte, keine IDs:

// Laden der aktuellen Anhänge
let attachments = workflow.objects.get();

// update attachments
let newAttachments = [];
// ...

// Überschreiben der Anhänge und setzen der neuen
workflow.objects.set(newAttachments);
set Setzt die übergebenen Objekte in diejenige Variable, die über die outputVariable angegeben wurde.

Ist der Parameter leer, wird stattdessen die interne Variable sys_acw_attachments verwendet.

attachments
Array mit agorum core Objekten oder deren IDs. Die Funktion speichert die UUIDs.
select Löst den übergebenen Parameter selectors auf, um alle Objekte nach dem Selektor zu sortieren.

Zurückgegeben wird im Ergebnis:
  • ein selected (diese Objekte entsprechen den Selektoren)
  • ein unselected

optional
true/false

Hinweis: Dieser Parameter verhält sich wie bei get (Objekte holen).

fork

Klont das Workflow-Token.

forks
Definiert ein Array an forks, die erstellt werden sollen.

  • In jedem Element wird ein objects und ein name erwartet.
  • Für jeden Eintrag außer dem letzten klont die Funktion das Token und kopiert dabei die Variablen. Der letzte Eintrag verwendet das ursprüngliche Token.
  • Jedes Token erhält seine Objekte in der Variable outputVariable und verlässt den Knoten über das Outlet name.

name
Definiert den Ausgang (outlet) des neuen Tokens.

objects
Definiert die Anhänge des neuen Tokens.

Werden in dem Beispiel die Parameter inputVariable und outputVariable nicht gesetzt, werden jeweils die sys_acw_attachments geladen und gesetzt.

workflow.objects.fork([
  {
    name: 'left',
    objects: attachments.slice(0, parameters.index)
  },
  {
    name: 'right',
    objects: attachments.slice(parameters.index)
  }
]);
load Lädt Dateien mit dem Parameter perObject und speichert das Ergebnis in die Variable, die unter scopeVariable angegeben wurde.

Beachtet das load-Interface:
  • Die Parameter perObject und scopeVariable sind optional. Sind sie angegeben, prüft die Funktion ihren Typ (boolean bzw. Text).
  • Lädt aus diesen beiden Parametern die Objekte (intern wird getPerObject() verwendet).
  • Setzt das Ergebnis als scopeVariable.
  • Ist perObject angehakt, wird die UUID der Objekte verwendet, um die Daten zu verwalten.
  • Ist perObject nicht angehakt, wird nur das erste Objekt betrachtet. Sind in diesem Fall keine Anhänge vorhanden, wirft die Funktion den Fehler Attachment is required. Ist perObject angehakt und gibt es keine Anhänge, passiert nichts.
// Iteriere über die perObject Anhänge und führe für jedes Objekt die Funktion aus
workflow.objects.load(obj => {
  // Liefere Daten für dieses Objekt zurück
  return {
    ag_status: 'Test',
    name: obj.name
  };
});
save Speichert Dateien mit dem Parameter perObject und das Ergebnis in die Variable, die unter scopeVariable angegeben wurde.

Beachtet das save-Interface:
  • Die Parameter perObject und scopeVariable sind optional. Sind sie angegeben, prüft die Funktion ihren Typ (boolean bzw. Text).
  • Speichert aus diesen beiden Parametern die Objekte.
  • Lädt Daten pro Objekt (oder für das erste Objekt) aus der scopeVariable.
  • Ist perObject angehakt, wird die UUID der Objekte verwendet, um die Daten zu verwalten.
  • Ist perObject nicht angehakt, wird nur das erste Objekt betrachtet. Sind in diesem Fall keine Anhänge vorhanden, wirft die Funktion den Fehler Attachment is required. Ist perObject angehakt und gibt es keine Anhänge, passiert nichts.
// Hole den ag_status der Objekte. Hier wird nur der letzte Wert gespeichert. 

let fileStatus;

// Iteriere über die perObject Anhänge und führe für jeden die Funktion saveResult aus
workflow.objects.save((obj, dataToSave) => {
  fileStatus = dataToSave.ag_status;
});
getScope Liest die Scope-Daten für die übergebenen Objekte aus der scopeVariable und ruft für jedes Objekt eine Callback-Funktion auf.

Ist perObject aktiviert, werden die Scope-Daten pro Objekt (anhand der UUID) geladen. Ist perObject nicht aktiviert, erhalten alle Objekte dieselben Scope-Daten. Ist perObject aktiviert und fehlt die scopeVariable in den Token-Variablen, bricht die Funktion mit einem Fehler ab. Ohne scopeVariable sind die Token-Variablen selbst der Scope.

objs
Array von agorum core Objekten.

fn(object, scope)
Callback-Funktion, die für jedes Objekt mit dem Objekt und den zugehörigen Scope-Daten aufgerufen wird.
// Scope-Daten für Objekte auslesen
let attachments = workflow.objects.get();
workflow.objects.getScope(attachments, (obj, scope) => {
  console.log(obj.name, scope);
});
setScope Setzt Scope-Daten für die übergebenen Objekte in die scopeVariable. Für jedes Objekt wird eine Callback-Funktion aufgerufen, deren Rückgabewert als Scope-Daten gespeichert wird.

Ist perObject aktiviert, werden die Daten pro Objekt (anhand der UUID) gespeichert. Intern wird variables.merge verwendet, sodass bestehende Daten nicht überschrieben, sondern flach zusammengeführt werden (siehe variables.merge). Die Callback-Funktion sollte ein Objekt zurückgeben. Ohne scopeVariable schreibt die Funktion die Daten in die obersten Token-Variablen.

objs
Array von agorum core Objekten.

fn(object)
Callback-Funktion, die für jedes Objekt aufgerufen wird und die zu speichernden Scope-Daten zurückgibt.
// Scope-Daten für Objekte setzen
let attachments = workflow.objects.get();
workflow.objects.setScope(attachments, obj => {
  return {
    ag_status: 'verarbeitet',
    name: obj.name
  };
});

Weitere Bibliotheken

Für Automation | Workflow stehen zusätzlich zur Bibliothek workflow die Bibliotheken filter und definition bereit. Sie laden Sie einzeln.

filter

Die Bibliothek filter bereitet einen Filter-Parameter auf, damit Sie ihn immer als Array verwenden können. Die Knoten zum Laden und Speichern von Metadaten nutzen sie, siehe die Beispiele am Ende der Seite.

let filterLib = require('/agorum/roi/customers/acworkflow/js/common/filter');
Funktion Beschreibung Beispiel
convert Liefert den Filter als Array zurück.

filter
Ein einzelner Wert oder ein Array. Die Funktion verpackt einen einzelnen Wert in ein Array mit einem Element. Ein Array bleibt unverändert. Einen leeren Wert (undefined, null, leerer Text) gibt die Funktion unverändert zurück, daraus entsteht also kein Array. Prüfen Sie den Filter daher auf einen Wert, bevor Sie ihn weiterverwenden.

Rückgabe: das Array oder der unveränderte leere Wert
filterLib.convert('name');
// ['name']

filterLib.convert(['name', 'size']);
// ['name', 'size']

filterLib.convert(undefined);
// undefined

definition

Die Bibliothek definition findet die Definition eines Workflows. Sie arbeitet mit den Workflows, die im Workflow-Repository (/agorum/roi/workspace/acworkflow/repository) bereitgestellt sind. Ein Workflow liegt dort in einem Ordner je Version, der Ordnername ist die Versionsnummer. Die Definition ist die Datei definition.acwd in diesem Ordner.

let definitionLib = require('/agorum/roi/customers/acworkflow/js/common/definition');
Funktion Beschreibung Beispiel
getWorkflowDefinition Lädt die Definition eines Workflows und liefert die Datei definition.acwd als agorum core Objekt.

workflow
Eine der folgenden Angaben:
  • die ID, die UUID oder der Pfad der Datei definition.acwd. Damit laden Sie eine bestimmte Version.
  • der Name des Workflows, etwa projekt.workflow.name. Die Punkte stehen für Unterordner im Workflow-Repository. Damit laden Sie die höchste Version.
Fehler
  • Zeigt die Angabe auf ein Objekt, das nicht definition.acwd heißt, etwa den Ordner einer Version, wirft die Funktion einen Fehler. Geben Sie für eine bestimmte Version den Pfad der Datei definition.acwd an.
  • Findet die Funktion keinen Workflow mit diesem Namen oder keine Version mit einer Definition, wirft sie ebenfalls einen Fehler.
Die Funktion findet nur bereitgestellte Workflows. Ein Workflow, der nur im Projekt gespeichert, aber nicht bereitgestellt ist, ist über den Namen nicht auffindbar.
// latest version by name
let latest = definitionLib.getWorkflowDefinition('projekt.workflow.name');

// specific version by path
let version = definitionLib.getWorkflowDefinition(
  '/agorum/roi/workspace/acworkflow/repository/projekt/workflow/name/3/definition.acwd'
);
getRegisteredWorkflows Liefert die Definitionen aller bereitgestellten Workflows, jeweils in der höchsten Version.

Rückgabe: ein Array mit den UUIDs der Dateien definition.acwd. Gibt es das Workflow-Repository nicht, ist das Array leer. Ordner, deren Name keine Zahl ist, zählen nicht als Version.
let uuids = definitionLib.getRegisteredWorkflows();
let objects = require('common/objects');

// log the name of each workflow folder
uuids.forEach(uuid => console.log(objects.find(uuid).firstParent.firstParent.name));

Komplette Beispiele

Knoten „agorum.object.metadata.load“

Das folgende Beispiel orientiert sich am Knoten agorum.object.metadata.load:

/* global sc, sca, token, instance, outlets, inlet, parameters */
// Laden der Bibliothek mit direkten parametern
let workflow = require('/agorum/roi/customers/acworkflow/js/workflow')(token, parameters);

// Laden weiterer Bibliotheken
let metadata = require('common/metadata');
let filterLib = require('/agorum/roi/customers/acworkflow/js/common/filter');

// Validierung des Filter Parameters, dieser ist optional und vom Typ ein array
workflow.validate.array('filter', true);

// Funktion, um die Daten zu Laden
let loadData = obj => {
  let m = metadata();

  if (parameters.filter) {
    // load filtered metadata
    m.load.apply(m, [ obj ].concat(filterLib.convert(parameters.filter)));
  }
  else {
    // load all metadata
    m.load(obj);
  }

  return m.data();
};

// Iteriere über die perObject Anhänge und führe für jeden die Funktion loadData aus
workflow.objects.load(loadData);

Knoten „agorum.object.metadata.save“

Das folgende Beispiel orientiert sich am Knoten agorum.object.metadata.save:

/* global sc, sca, token, instance, outlets, inlet, parameters */
// Laden der Bibliothek mit direkten parametern
let workflow = require('/agorum/roi/customers/acworkflow/js/workflow')(token, parameters);

// Laden weiterer Bibliotheken
let metadata = require('common/metadata');
let filterLib = require('/agorum/roi/customers/acworkflow/js/common/filter');

// Validierung des Filter Parameters, dieser ist optional und vom Typ ein array
workflow.validate.array('filter', true);
let filter = parameters.filter;

// Funktion, um die Daten zu Speichern
let saveResult = (obj, dataToSave) => {
  if (dataToSave) {
    let m = metadata(dataToSave);

    if (filter) {
      // load filtered metadata
      m.save.apply(m, [ obj ].concat(filterLib.convert(filter)));
    }
    else {
      // load all metadata
      m.save(obj);
    }
  }
};

// Iteriere über die perObject Anhänge und führe für jeden die Funktion saveResult aus
workflow.objects.save(saveResult);