Durchsuchbare Dokumentation aufrufen | Zurück zur Dokumentationsübersicht
Navigation: Dokumentationen agorum core > agorum core für Administratoren > Konfigurationen zum Import und Export
Mit dem structure-builder legen Sie Akten und andere Ordnerstrukturen inklusive Metadaten, ACLs, Benutzergruppen und Systemflags per JavaScript an, etwa eine Kundenakte oder eine Projektakte. Die Struktur beschreiben Sie in einer structure-yml-Datei mit Platzhaltern. Beim Aufruf übergeben Sie die Werte für die Platzhalter und optional einen Startordner.
Hinweis: Das Anlegen von Akten mit dem structure-builder ersetzt die bisherige Vorgehensweise, Akten über das Element Anlage im agorum core smart assistant konfigurator anlegen zu lassen. Bestehende Anlage-Konfigurationen funktionieren weiter. Für neue Akten verwenden Sie den structure-builder. Wie Sie bestehende Anlagen umstellen, beschreibt der Abschnitt Vom smart assistant konfigurator umsteigen.
Hinweis: Die Syntax der Datei und die Schlüsselwörter wie acl, generateGroups oder ~~ beschreibt Struktur mit der Datei „structure-basis.yml“ definieren. Diese Dokumentation baut darauf auf und beschreibt den Aufruf mit Werten und Startordner.
Hinweis: Im Beispiel steht agorum.doc.test für den Namen Ihres Konfigurationsprojekts und agorum_doc_test_ für das Präfix Ihrer Metadaten. Ersetzen Sie beides durch Ihre eigenen Namen.
Hinweis: Der structure-builder läuft immer mit sca, dem Hauptadministrator. Das ist nötig, weil die structure-yml mehr bewirken kann, als Ordner anzulegen, etwa ACLs, Benutzergruppen und Systemflags zu setzen.
${projektNummer}.<--.Das folgende Beispiel beschreibt eine Projektakte. Ein Kunde kann mehrere Projektakten haben. Die Projektakte liegt deshalb im Konfigurationsprojekt des Kunden und enthält die Unterordner Angebot, Vertrag und Korrespondenz.
Speicherort: /agorum/roi/customers/<Konfigurationsprojekt>/yml/structure-projektakte.yml
#
# Projektakte: ein Kunde hat mehrere Projektakten
#
# Platzhalter:
# ${kunde} Name des Kunden
# ${projektNummer} Nummer des Projekts, Name der Projektakte
# ${projektName} Name des Projekts
_prefix: agorum_doc_test_
_postfix: Bereich
_aclPrefix: ACL_agorum_doc_test_
_grpPrefix: GRP_agorum_doc_test_
+ ${kunde:f} -- Kunde:
+ ${projektNummer:f} -- Projektakte <--:
~~agorum_doc_test_projektNummer: ${projektNummer}
~~agorum_doc_test_projektName: ${projektName}
+ Angebot:
+ Vertrag:
+ Korrespondenz:
Die wichtigsten Bestandteile:
| Bestandteil | Bedeutung |
|---|---|
${kunde:f} |
Platzhalter. Er wird beim Aufruf durch den Wert ersetzt, den Sie unter diesem Namen übergeben. Platzhalter können in Ordnernamen, ACL-Namen und Metadatenwerten stehen. Der Zusatz :f ersetzt Zeichen, die im Dateisystem nicht erlaubt sind, durch _. Aus Müller/Söhne wird so der Ordner Müller_Söhne. |
-- Kunde |
Legt die Metadaten area und identifier des Ordners fest. Ohne -- verwendet das System den Ordnernamen. |
<-- |
Markiert den Zielordner. Der Aufruf create() gibt diesen Ordner zurück. update() verwendet ihn, um die Akte zu finden. Ohne die Markierung gibt create() nichts zurück. |
~~agorum_doc_test_projektName: ${projektName} |
Setzt ein vererbtes Metadatum am Ordner. Die Unterordner und Dokumente der Akte erben es. |
_prefix: agorum_doc_test_ |
Präfix der Metadaten, die das System aus den Ordnernamen erzeugt. Bei diesem Beispiel setzt es zusätzlich agorum_doc_test_kunde mit dem Namen des Kunden und agorum_doc_test_projektakte mit der Projektnummer. Die Projektakte erbt das Metadatum des Kunden. |
Achtung: Mit systemFlags schränken Sie unter anderem das Löschen, Bearbeiten und Umbenennen ein. Das Beispiel setzt keine systemFlags. Zum Ausprobieren und für Tests lassen Sie sie weg, damit Sie die angelegten Ordner wieder löschen können.
Das folgende JavaScript legt eine Projektakte an. Der Ordner Projektakten ist der Startordner.
let objects = require('common/objects');
let structureBuilder = require('/agorum/roi/customers/Standard/js/structure-builder');
let yaml = objects.find('/agorum/roi/customers/<Konfigurationsprojekt>/yml/structure-projektakte.yml');
let startFolder = objects.find('/agorum/roi/Files/Projektakten');
let akte = structureBuilder(yaml).create(startFolder, {
kunde: 'Muster GmbH',
projektNummer: 'P-2026-001',
projektName: 'Neubau Lagerhalle',
});
console.log('Akte angelegt: ' + akte.anyFolderPath);
Ergebnis: Das System legt den Pfad /agorum/roi/Files/Projektakten/Muster GmbH/P-2026-001 mit den Unterordnern Angebot, Vertrag und Korrespondenz an und setzt die Metadaten. akte ist der Ordner P-2026-001.
Hinweis: Die Datei structure-builder.js wird im Standard-Template mitgeführt. Den Aufruf implementieren Sie pro Konfiguration selbst.
| Aufruf | Beschreibung |
|---|---|
structureBuilder(yaml) |
Erzeugt den Builder. yaml ist die structure-yml als Datei-Objekt oder als Text. |
structureBuilder(yaml, true) |
Setzt alle ACLs und Flags der vorhandenen Ordner neu. Verwenden Sie diesen Aufruf nur zum Testen. |
create(data) |
Legt die Struktur an. data enthält die Werte der Platzhalter. Die Struktur beginnt im Wurzelverzeichnis, in der structure-yml steht deshalb ein absoluter Pfad. |
create(startFolder, data) |
Legt die Struktur unterhalb des Startordners an. |
update(akte, data) |
Ändert eine vorhandene Akte, siehe Eine vorhandene Akte ändern. |
update(startFolder, akte, data) |
Wie oben, mit ausdrücklich angegebenem Startordner. |
metadata() |
Gibt eine metadata.yml für die gesetzten Metadaten als Text zurück. |
result(object) |
Gibt eine Liste der geänderten Objekte zurück (Einträge refresh:<ID>). Als letzten Eintrag hängt es das übergebene Objekt an. |
create() und update() geben den mit <-- markierten Ordner zurück.
Ob Sie einen Startordner angeben, hängt davon ab, wie die structure-yml beginnt. Es gibt zwei Varianten:
| Variante | Beispiel |
|---|---|
| Die structure-yml beginnt mit einem relativen Namen. Sie geben den Startordner beim Aufruf an. | + ${kunde:f} -- Kunde:create(startFolder, data) |
| Die structure-yml beginnt mit einem absoluten Pfad. Sie geben keinen Startordner an. | + /agorum/roi/Files/Projektakten -- Projektakten:create(data) |
Achtung: Kombinieren Sie einen absoluten Pfad in der structure-yml nicht mit einem Startordner. Das System hängt den Pfad dann unterhalb des Startordners an, etwa /agorum/roi/Files/Projektakten/agorum/roi/Files/Projektakten/P-2026-001.
Der Ordner, den Sie in der structure-yml mit <-- markieren, ist das Sprungziel. create() und update() geben ihn zurück. Von diesem Ordner aus erreichen Sie die Ordner, die der structure-builder angelegt hat. Bei der Anlage über den smart assistant konfigurator entspricht das dem Sprungziel und dem Rückgabewert der Anlage.
let akte = structureBuilder(yaml).create(startFolder, data);
// the Sprungziel by its UUID, e.g. to hand it over to another script
let uuid = akte.UUID;
let again = objects.find(uuid);
// the folders below the Akte
akte.items().map(item => item.name); // Angebot, Korrespondenz, Vertrag
let vertrag = akte.getItem('Vertrag');
// the folders above the Akte
let kunde = akte.firstParent;
// by path
let byPath = objects.find(akte.anyFolderPath + '/Vertrag');
// continue working in a created folder
let entwuerfe = akte.getItem('Angebot').createPath('Entwuerfe');
// all Projektakten of a customer
let total = objects
.query('inpath:' + kunde.ID + ' identifier_ci:Projektakte')
.limit(0)
.search().total;
| Aufgabe | Aufruf |
|---|---|
| Sprungziel weitergeben | akte.UUID, später wieder mit objects.find(uuid) laden. Die Beispiel-Bibliothek in undefined>Eingaben vor dem Anlegen einer Akte prüfen und Meldungen anzeigen gibt deshalb die UUID zurück. |
| Unterordner finden | akte.items() liefert alle, akte.getItem('Name') einen bestimmten Unterordner. |
| Übergeordneten Ordner finden | akte.firstParent, im Beispiel der Kunde. Von dort liefert items() alle Projektakten des Kunden. |
| Ordner über den Pfad finden | objects.find(akte.anyFolderPath + '/Vertrag') |
| In einem angelegten Ordner weiterarbeiten | Etwa akte.getItem('Angebot').createPath('Entwuerfe') für einen weiteren Unterordner. |
| Alle Akten eines Bereichs suchen | Suche mit inpath: und identifier_ci:Projektakte. identifier und area setzt der Zusatz -- Projektakte in der structure-yml. |
Hinweis: Die Suche arbeitet mit dem Suchindex. Ein gerade angelegter Ordner erscheint erst in der Suche, wenn das System ihn indiziert hat. Der Rückgabewert von create() und items() sind dagegen sofort verfügbar. Verwenden Sie deshalb nach dem Anlegen den Rückgabewert statt einer Suche.
Markieren Sie in der structure-yml den Ordner, mit dem Sie weiterarbeiten wollen, mit <--. Fehlt die Markierung, gibt create() nichts zurück. Dann müssen Sie die Akte über den Pfad suchen. result(akte) liefert zusätzlich die Liste der geänderten Objekte, siehe die Tabelle der Rückgabewerte.
Der structure-builder verwendet vorhandene Ordner und legt nur an, was fehlt. Rufen Sie create() mit denselben Werten ein zweites Mal auf, erhalten Sie dieselbe Akte zurück und das System legt keine zweite Akte an. Das ist praktisch, bedeutet aber auch: Eine bereits vorhandene Projektnummer fällt beim Anlegen nicht auf. Prüfen Sie deshalb vor dem Aufruf, ob es die Akte schon gibt, siehe undefined>Eingaben vor dem Anlegen einer Akte prüfen und Meldungen anzeigen.
Achtung: Fehlt der Wert für einen Platzhalter im Ordnernamen, meldet der structure-builder keinen Fehler. Er ersetzt den Platzhalter durch einen leeren Text, lässt den Ordner mit dem leeren Namen aus und legt dessen Unterordner direkt im übergeordneten Ordner an. Im Beispiel entstünden ohne Projektnummer Angebot, Vertrag und Korrespondenz direkt im Ordner des Kunden.
Der Rückgabewert von create() ist in diesem Fall nicht die Akte, sondern der übergeordnete Ordner, im Beispiel der Ordner des Kunden. Prüfen Sie deshalb vor dem Aufruf, ob alle Platzhalter im Ordnernamen einen Wert haben.
Mit update() ändern Sie die Metadaten einer vorhandenen Akte. Sie geben die Akte und die neuen Werte an:
let akte = objects.find('/agorum/roi/Files/Projektakten/Muster GmbH/P-2026-001');
structureBuilder(yaml).update(akte, {
kunde: 'Muster GmbH',
projektNummer: 'P-2026-001',
projektName: 'Neubau Lagerhalle, Bauabschnitt 2',
});
Den Startordner ermittelt update() selbst: Es geht von der Akte so viele Ebenen nach oben, wie die structure-yml bis zum Ordner mit <-- verschachtelt ist. Im Beispiel ist das der Ordner Projektakten.
Ändern sich Werte, die im Ordnernamen stehen, benennt das System die Akte um und verschiebt sie. Das Objekt bleibt dabei dasselbe, es behält seine UUID, seine Dokumente und seinen Inhalt. Wird zum Beispiel der Kunde von Kunde A auf Kunde B und die Projektnummer von P-3000 auf P-3001 geändert, liegt die Akte danach unter Kunde B/P-3001. Den Ordner Kunde B legt das System an, falls er fehlt. Der Ordner Kunde A bleibt bestehen.
Achtung: Beginnt die structure-yml mit einem absoluten Pfad, verwenden Sie update(objects.find('/'), akte, data) mit dem Wurzelverzeichnis als Startordner. Bei update(akte, data) ermittelt der structure-builder den Startordner nur über die Verschachtelung der Einträge und nicht über die Segmente des Pfads. Er legt den absoluten Pfad dann ein zweites Mal unterhalb des ermittelten Ordners an.
Achtung: update() arbeitet wie der Aufruf mit true: Das System setzt ACLs und Flags der Ordner nach den Vorgaben der structure-yml neu. Das System muss die betroffenen Objekte erneut indizieren.
Der structure-builder setzt Metadaten, die im System noch nicht definiert sein müssen. Mit metadata() erzeugen Sie nach dem Anlegen den Rohentwurf einer metadata.yml:
let builder = structureBuilder(yaml); builder.create(startFolder, data); console.log(builder.metadata());
Ergebnis:
# https://nodeca.github.io/js-yaml/ # -- global _group: agorum_doc_test _prefix: agorum_doc_test_ _dataPrefix: MAIN_MODULE_MANAGEMENT/customers/agorum_doc_test/Data/ _csvPrefix: /agorum/roi/customers/agorum_doc_test/csv/ _encoding: UTF-8 _default: type: string kind: inherited # -- fields kunde: displayName: kunde data: [ ] projektakte: displayName: projektakte data: [ ] projektNummer: displayName: projektNummer data: [ ] projektName: displayName: projektName data: [ ] projektakteBereich: displayName: projektakteBereich data: [ ]
Achtung: Die Suche findet ein Metadatum erst, wenn Sie es definiert haben, etwa mit einer metadata.yml. Solange das Metadatum nur am Ordner steht, liefert eine Suche wie agorum_doc_test_projektName_ci:Neubau keinen Treffer. Nach dem Namen des Ordners können Sie dagegen immer suchen, etwa mit name_ci:P-2026-001. Wie Sie Metadaten definieren, beschreibt Metadaten mit YML definieren (metadata.yml).
Die folgende Tabelle zeigt, was Sie in der Anlage-Konfiguration des agorum core smart assistant konfigurators eingetragen haben und wo Sie es beim structure-builder finden:
| Anlage im smart assistant konfigurator | structure-builder |
|---|---|
| Ordnerstruktur im Elemente-Baum | structure-yml mit +-Einträgen |
| Platzhalter aus den Metadaten der Anlage | Platzhalter ${name} und die Werte im Objekt data |
| Metadaten der angelegten Ordner | ~~ und ~ in der structure-yml |
| Zielordner der Anlage | Startordner in create(startFolder, data) oder absoluter Pfad in der structure-yml |
| Sprungziel und Rückgabewert | Ordner mit <-- und der Rückgabewert von create() |
| JavaScript (zuvor) und JavaScript (danach) | Ihr JavaScript vor und nach dem Aufruf von create(), ein Beispiel mit Prüfung und Masken beschreibt undefined>Eingaben vor dem Anlegen einer Akte prüfen und Meldungen anzeigen |
| Struktur testen | Aufruf in der JavaScript-Konsole mit Testwerten |
service.create('Name', folder, parameter) |
structureBuilder(yaml).create(folder, data) |
Die Anlage-Konfiguration prüfen Sie im smart assistant konfigurator, siehe Elemente im agorum core smart assistant konfigurator anlegen.