Durchsuchbare Dokumentation aufrufen | Zurück zur Dokumentationsübersicht
Navigation: Dokumentationen agorum core > agorum core workflow 3.0 > ACLs/Berechtigungen im Workflow setzen > DATEV XML-Schnittstelle online > Übersicht vorhandener Knoten > Skript
Diese Dokumentation enthält Bibliotheken, die zum 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.
// Ü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);
Ü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);
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);
// 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);
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.
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);
ist optional. Wird dieser nicht angegeben, wird für Berechtigungen der Standardparameter Privileges geladen.Hinweis: Wenn Sie die Bibliotheken einzeln verwenden, müssen Sie den NODE_NAME manuell auflösen.
Diese Bibliothek enthält keine eigenen Funktionen.
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 |
Eigenschaft | Beschreibung | Beispiel |
---|---|---|
sc | Liefert den übergebenen oder aufgelösten session controller zurück.
|
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.
|
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; |
Validiert Parameter nach deren Typ. Sie können unterscheiden, ob Parameter optional sind oder nicht und folgende Datentypen angeben:
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);
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); |
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);
Unterstützt Knoten im Umgang mit Parameter.
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();
Funktion | Beschreibung | Beispiel |
---|---|---|
get | Holt Parameter aus einem bestimmten Namen (oder Pfad). key optional
|
workflow.parameters.get('ac_status', false); |
find | Holt ein oder mehrere Objekte aus dem Parameter.
|
workflow.parameters.find('ac_object'); |
privileged | Holt den sessionController (sc) aufgrund des angegebenen Parameters, im Hintergrund wird dafür der Standardparameter privileges aufgelöst. | 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);
Erleichtert das Holen und Setzen von Variablen. Sie können auch tiefere Strukturen 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);
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.
|
// 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'); |
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);
Behandelt das Arbeiten mit Anhängen (attachments) oder anderen Objekten im Workflow.
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();
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. optional true/false |
sc wird meistens nicht benötigt (aktuell nur für die Funktion object): // 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 Objekt aus agorum core |
|
select | Löst den übergebenen Parameter selectors auf, um alle Objekte nach dem Selektor zu sortieren. Zurückgegeben wird im Ergebnis:
optional true/false Hinweis: Dieser Parameter verhält sich wie bei get |
|
fork | Klont das Workflow-Token.
name objects |
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:
|
// 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:
|
// 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; }); |
Dient zum programmatischen Lesen und Setzen von UI-Zuweisungen von Bearbeitern in Workflow-Knoten. Mit der assignment-Bibliothek können Sie
Wenn ein Workflow nach einem Speichervorgang nicht mehr direkt dem aktuellen Bearbeiter zugewiesen ist, navigiert die UI zu einem anderen Eintrag. Mit dem assign-Knoten wird die Zuweisung für den nächsten Schritt durchgeführt. Mit dem Skript-Knoten wird die aktuelle Token-Zuweisung, token.variables.sys_acw_assignee, gelöscht.
let assignment = require('/agorum/roi/customers/acworkflow/js/common/assignment');
Funktion | Beschreibung | Beispiel |
---|---|---|
assign | Weist Berechtigungen für ein Token zu. token Definiert das Token-Objekt, dem eine Benutzergruppe von Bearbeitern, Vertretern oder Betrachtern zugewiesen wird. assignees substitutes viewers |
assignment.assign(token, { assignees: [ 'group:GRP_Demo', { attachmentPermission: 'write', id: 'group:d4wdr' } ], substitutes: [], viewers: [], }); |
getAssignment | Fragt Berechtigungen für ein Token ab und gibt eine Antwort nach folgendem Muster zurück: {"viewers":[],"substitutes":[],"assignees":[{"attachmentPermission":"read","id":"group:GRP_Demo"},{"attachmentPermission":"write","id":"group:d4wdr"}]}
|
assignment.getAssignment(token) |
/* global sc, sca, token, instance, outlets, inlet, parameters */ // Laden der assignment-Bibliothek let assignment = require('/agorum/roi/customers/acworkflow/js/common/assignment'); // Laden weiterer Bibliotheken let objects = require('common/objects'); assignment.assign(token, { assignees: [ // assignees: [{ attachmentPermission: 'read', id: 'group:GRP_Demo' }] 'group:GRP_Demo', { attachmentPermission: 'write', id: 'group:d4wdr' } ], // substitutes werden zurückgesetzt substitutes: [], // viewers bleiben erhalten //viewers: [], }); console.log(assignment.getAssignment(token)); // {"viewers":[],"substitutes":[],"assignees":[{"attachmentPermission":"read","id":"group:GRP_Demo"},{"attachmentPermission":"write","id":"group:d4wdr"}]} // direkt einem Benutzer zuweisen token.variables.sys_acw_assignee = objects.find('user:demo').UUID; // Zuweisung zu Benutzer entfernen //delete token.variables.sys_acw_assignee; // Sendet das Token über das Standard-Outlet token.leave('');
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);
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);