Durchsuchbare Dokumentation aufrufen

Zurück zur Dokumentationsübersicht

JavaScript-Bibliothek common/metadata

Diese Bibliothek bietet Funktionen zum Laden oder Speichern von Objekt-Metadaten.

Verwendung


Binden Sie die Bibliothek stets am Anfang eines Skripts ein:

let metadata = require('common/metadata');

Funktionen


load

Lädt entweder alle oder bestimmte Metadaten eines Objekts.

Das System lädt alle Metadaten, inklusiver interner, die direkt auf dem Objekt sitzen. Falls Sie dies nicht wünschen, verwenden Sie stattdessen folgenden Aufruf. Dadurch werden die internen Metadaten nicht ausgegeben:

metadata.load(object, '~') 

Hinweise:

  • Im Gegensatz zu filingassistant/metadata.load() werden von load() nur die Metadaten geladen, die direkt auf dem Objekt gesetzt sind.

  • Die oben stehende Funktion kann nur auf ein einzelnes Objekt angewendet werden.


Beispiel

// alle Metadaten
let all = metadata().load(object [,filter1 [, filter2][,..]]]).data();
// filter siehe unten
// Zugriff auf diese Daten, etwa:
// all.name
// all.description


// ausgewählte Metadaten
let some = metadata().load(object, 'name', 'acmf_kundenName').data();
// Zugriff auf diese Daten, etwa:
// some.name
// some.acmf_kundenName

// gefilterte Metadaten
let acmf = metadata().load(object, /^acmf_/).data();
// Zugriff auf diese Daten, etwa:
// acmf.acmf_kundenName
// acmf.acmf_kundenNummer

all

Lädt alle benutzerdefinierten (keine eingebauten) Metadaten, die entweder auf dem Objekt selbst definiert sind oder darauf vererbt wurden, oder Metadaten vom Typ list.

Im Gegensatz zu merge() werden bei vererbten Metadaten alle Werte als Array zurückgegeben.

Achtung: Beeinträchtigung der Systemleistung durch Benutzung der Funktion. Wenn sehr viele Metadaten im System vorhanden sind, kann eine Abfrage durch diese Funktion das System verlangsamen. Filtern Sie stets nach Metadaten, wie im nachfolgenden Skript angegeben, um eine Verlangsamung des Systems zu vermeiden.


Beispiel
let data = metadata.all(object, /^acmf_/);

// Filtern nach Metadaten
// Sie können auch mehrere Filter angeben,
// deren Daten dann gesammelt zurückgegeben werden:
let dataMulti = metadata.all(object, /^acmf_/, 'identifier', '~', '~~', ...);
// Laden der direkten und vererbten Metadaten
metadata.load(object, '~', '~~')


Beispiel Metadatum vom Typ „list“

// Laden von nicht vererbten Listenmetadaten:
metadata.all(object, '~');

// Ergebnis:
{
  "agorum_accounting_document_item_list" : [ {
    "number" : "123"
  } ]
}

Das System gibt vererbte Metadaten immer als verschachteltes Array aus:

// Laden von vererbten Listenmetadaten:
metadata.all(object, '~~');

// Ergebnis:
{
  "agorum_accounting_document_item_listx" : [ [ {
    "number" : "456"
  } ] ]
}

merge

Lädt die Metadaten des Objekts selbst als auch Werte, die nur darauf vererbt wurden.


Beispiel

// Kundeninfos der zu document gehörigen Akte abrufen
let kunde = metadata().merge(document, /^acmf_kunde/).data();

save

Schreibt Metadaten auf ein Objekt.


Beispiel

let data = {
  name: 'Name xy',
  acmf_kundenName: 'Name AG'
};

// einzelnes Objekt
metadata(data).save(object [,filter1 [, filter2][,..]]]);
// filter siehe unten

// mehrere Objekte
let m = metadata(data);

objects.forEach(object => m.save(object));


Beispiel zum Entfernen von Metadaten

let data = {
  name: null, // metadata "name" wird vom Objekt entfernt
  acmf_kundenName: '' // metadata "acmf_kundenName" bleibt erhalten und hat den Wert ''
};

metadata(data).save(object);

Vorhandene filter bei load, save und merge


Die folgenden Filter können Sie bei load, save und merge übergeben.

Filtermöglichkeiten


Möglichkeit 1

Ein Filter kann der Name eines Metadatums sein:

// ausgewählte Metadaten 
let some = metadata().load(object, 'name', 'acmf_kundenName').data();

In diesem Beispiel wird nur das Metadatum name und acmf_kundenName geladen.


Möglichkeit 2

Ein Filter kann ein regulärer Ausdruck sein:

// ausgewählte Metadaten 
let some = metadata().load(object, /^acmf_kunde/).data();

In diesem Beispiel werden alle Metadaten geladen, die mit acmf_kunde beginnen.


Möglichkeit 3

Ein Filter kann ein '~' sein. Diese Schreibweise definiert Metadaten, die nicht vererbt werden:

// ausgewählte Metadaten 
let some = metadata().load(object, '~').data();

In diesem Beispiel werden alle Metadaten geladen, die nicht vererbt werden.


Möglichkeit 4

Ein Filter kann ein '~~' sein. Diese Schreibweise definiert Metadaten, die vererbt werden:

// ausgewählte Metadaten 
let some = metadata().load(object, '~~').data();

In diesem Beispiel werden alle Metadaten geladen, die vererbt werden.

Beispiele mit Filter

// ausgewählte Metadaten 
let some = metadata().load(object, 'name', 'description', '~', '~~').data();

Hier werden alle (vererbte und nicht vererbte) Metadaten geladen.

Ferner werden die Attribute name und description des Objekts geladen.

Benutzer-Metadaten

Bestimmte Benutzer-Metadaten, etwa user_ag_tags, kann nur der jeweilige Benutzer setzen oder lesen.

Hierbei ist die Session des Benutzers entscheidend, für welchen Benutzer dieses Metadatum gesetzt wird:

/* global sc */
let objects = require('common/objects');
let metadata = require('common/metadata');

// holen eines agorum core Objektes
let obj = objectsUser.find('ID-des-Objektes');

metadata({
  user_ag_tags: ['Test'],
}).save(obj);

In dem obigen Beispiel wird Test als User-Tag auf das Objekt gesetzt. Dabei ist entscheidend, mit welchem Benutzer die Session (sc) verbunden ist.

Im folgenden Beispiel wird demonstriert, wie mit einer Admin-Session ein Benutzer-Metadatum für einen anderen Benutzer gesetzt werden kann:

/* global sc */
let objects = require('common/objects');
let metadata = require('common/metadata');

// session als user holen
let scUser = sc.asUser(objects.find('user:demo'));

// objects library als mit user-session initialisieren
let objectsUser = objects(scUser);

// Objekt mit der objects lib des Users holen
let obj = objectsUser.find('ID-des-Objektes');

// metadaten auf die mail setze, die zuvor über objectsUser geholt wurde.
metadata({
  user_ag_tags: ['Test'],
}).save(obj);