Durchsuchbare Dokumentation aufrufen

Zurück zur Dokumentationsübersicht

JavaScript-Bibliothek common/data

Diese Bibliothek bietet Funktionen, um mit Datenquellen-Einträgen Folgendes zu machen:

lesen (read)
Standard für alle DataHandler

erstellen (create)
Wird derzeit vom JsDataHandler und JdbcDataHandler unterstützt

aktualisieren (update)
Wird derzeit vom JsDataHandler und JdbcDataHandler unterstützt

holen (get)
Wird derzeit nur vom UserDataHandler und UserGroupDataHandler unterstützt

löschen (del)
Wird derzeit vom JsDataHandler und JdbcDataHandler unterstützt

Eine Datenquelle wird in der MetaDb definiert. Nicht alle Datenquellen können geändert werden.

Verwendung


let data = require('common/data');
//Jetzt den gewünschten Händler setzen über die Übergabe des MetaDB-Schlüssels
let handler = data.handler('MAIN_MODULE_MANAGEMENT/customers/DocFormDemoVerify/Data/verify-lieferanten');

Der handler selbst besitzt folgende Funktionen:

Funktionen


create

Mit dieser Funktion legen Sie einen neuen Datensatz an.

let ret = handler.create([ query, ] parameters);


Parameter

Parameter Beschreibung Beispiel
query

Hinweis: Verwenden Sie den query-Parameter bei createupdate und del nicht mehr, er ist nur noch aus Kompatibilitätsgründen aufgeführt.

Definiert den String, der übergeben werden kann.
  • Der String repräsentiert in der MetaDb-Definition für CreateQuery immer die Ersetzung ${query}.
  • Beim CSV-Handler repräsentiert dieser Parameter immer das, was in der MetaDB-Definition QueryColumn steht, also in welcher Spalte nach query gesucht wird.
  • Der Parameter ist optional.
handler.create('Hier steht ein Text', parameters);
parameters Enthält eine Struktur mit den Parametern, die übergeben werden sollen.

Diese Struktur muss immer mindestens die Daten enthalten, die Ihr DataHandler für den getätigten Aufruf benötigt.
let parameters = {
  LieferscheinNr: 'LI00001',
  BestellNr: '100000',
  Artikelnummer: 'ANR100001',
  LieferMenge: 100.5
};

handler.create(parameters);  // ohne den ersten Parameter

In der MetaDb können Sie jetzt auf die Keys der Struktur zugreifen:

select * from verify_lieferschein where  LieferscheinNr = '${LieferscheinNr}' and BestellNr = '${BestellNr}' and Artikelnummer = '${Artikelnummer}'

Zugriff durch ein inneres JavaScript:

select * from verify_lieferschein ${{js:
  let where = '';
  let query = [];
  if (global.LieferscheinNr || global.BestellNr || global.Artikelnummer) {
    ...
    ...
  }
  ...
}}


Return

Zurückgegeben wird die Anzahl an Datensätzen, die angelegt wurden.

Verwenden Sie diesen Aufruf nur mit der Übergabe des Wertes parameters:

handler.create(parameters);

read

Liest Datensätze aus.

Es werden die Datensätze gelesen, die in der Übergabe definiert werden.

let data = handler.read([ query, ] parameters);


Parameter

siehe create


Return

Zurückgegeben werden die gelesenen Daten:

[ 
  { 
    LieferscheinNr : 'LI00001', 
    BestellNr      : '100000', 
    Artikelnummer  : 'ANR100001', 
    LieferMenge    : 100.5 
  } 
]

get

Ruft einen bestimmten Datensatz der Datenquelle ab.

Funktioniert nur bei den folgenden Handlern, die den Abruf unterstützen:

let data = handler.get('id');


Parameter

Parameter Beschreibung
id Definiert die id oder UUID aus agorum core.

Auch Schreibweisen wie group:name-der-gruppe sind möglich.


Return

Zurückgegeben wird ein Objekt mit value und text:

{
  value: "123456",
  text: "Name/Text des Elements"
}

update

Ändert Datensätze.

Es werden die Datensätze geändert, die in der Übergabe definiert werden.

let count = handler.update([ query, ] parameters);


Parameter

siehe create


Return

Zurückgegeben wird die Anzahl der geänderten Datensätze als Zahl.

parameters muss dem Eintrag DeleteQuery in der MetaDb entsprechen.

del

Löscht Datensätze.

Es werden die Datensätze gelöscht, die in der Übergabe definiert werden.

let count = handler.del([ query, ] parameters);


Parameter

siehe create


Return

Zurückgegeben wird die Anzahl gelöschter Datensätze als Zahl.

parameters muss dem Eintrag DeleteQuery in der MetaDb entsprechen.

Allgemeine Information zu allen DataHandlern


Die in der MetaDB verwendete Schreibweise mit ${<Name Metadatum>} wird über die JavaScript-Bibliothek common-templates ersetzt.


Beispiel

Query=[ 'acbasicarchive_aktesection_cs:${acbasicarchive_aktesection}', 'acbasicarchive_aktearea_cs:${acbasicarchive_aktearea}', 'inpath:9999', 'acbasicarchive_aktescope:${query}', 'acbasicarchive_aktescope:*' ] 

Dies bedeutet, dass alles möglich ist, was diese Bibliothek kann.

Verwendung


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

handler

Als Parameter geben Sie den MetaDb-Schlüssel zur gewünschten Datenquellen-Definition an:

let handler = data.handler('MAIN_MODULE_MANAGEMENT/customers/demo/data/NAME-DES-DATAHANDLERS');

Einträge lesen

let parameters = {};
let data = handler.read('beispiel-query', parameters);

data.forEach(entry => {
  let text = entry.text;
  let value = entry.value;
});

In diesem Beispiel kann parameters eine Map mit Name-Werte paaren, welche an den DataHandler weitergereicht wird und dort als Parameter verwendet werden kann.


Beispiel

let parameters = {
  testFeld: 'testWert'
};

// in der MetaDb, bei beispielsweise einem JDBC Handler kann nun testFeld verwendet werden als Kriterium in der Query, Beispiel: select name, value from testtable where test=${testFeld}

Einträge anlegen / ändern / löschen (nur JDBC oder JS-Handler)

let data = require('common/data');
let handler = data.handler('MAIN_MODULE_MANAGEMENT/customers/demo/data/test_jdbc');

// Allgemein im Beispiel dient "beispiel-name-123" als das Feld, das als ${query} ersetzt wird in dem JdbcHandler in der MetaDb

// create
handler.create('beispiel-name-123', { value: 'beispiel-value-123' );

// update
handler.update('beispiel-name-123', { oldValue: 'beispiel-value-123', newValue: 'beispiel-newvalue-123' });

// delete
handler().del('beispiel-name-123', { value: 'beispiel-value-123' });

Beispiel einer Tabelle mit mehr Spalten

Es wird eine Lieferscheintabelle benötigt, in die die Daten von Lieferscheinen hineingeschrieben werden. Diese Daten sind:

Die Tabelle für eine MySQL-DB sieht folgendermaßen aus:

CREATE TABLE `verify_lieferschein` (
    `LieferscheinNr` VARCHAR(200) NOT NULL,
    `BestellNr` VARCHAR(200) NOT NULL,
    `Artikelnummer` VARCHAR(200) NOT NULL,
    `LieferMenge` DOUBLE NOT NULL,
    PRIMARY KEY (`LieferscheinNr`, `BestellNr`, `Artikelnummer` )
)
ENGINE=InnoDB;

Es wird jetzt ein DataHandler definiert, der in dieser Tabelle Datensätze anlegen, ändern, lesen und löschen kann. Dazu wird der DataHandler in der MetaDb definiert.


Schlüssel in der MetaDb

MAIN_MODULE_MANAGEMENT/customers/DocFormDemoVerify/Data/ verify-lieferanten

Dort werden folgende Einträge angelegt:

Class=agorum.api.object.data.JdbcDataHandler

CreateQuery=insert into verify_lieferschein (LieferscheinNr, BestellNr, Artikelnummer, LieferMenge) values ('${LieferscheinNr}', '${BestellNr}', '${Artikelnummer}',  ${LieferMenge})

DeleteQuery=delete from verify_lieferschein where LieferscheinNr = '${LieferscheinNr}' and BestellNr = '${BestellNr}' and Artikelnummer = '${Artikelnummer}'

Driver=com.mysql.jdbc.Driver

LowerCaseKeys=false

LowerCaseValues=false

// Password wird verschlüsselt eingetragen
Password=******

// Hier wird ein mehrzeileger Eintrag gemacht, damit das JS besser lesbar ist
Query=select * from verify_lieferschein ${{js:
  let where = '';
  let query = [];
  if (global.LieferscheinNr || global.BestellNr || global.Artikelnummer) {
    if (global.LieferscheinNr) {
      query.push(' LieferscheinNr = \'' + global.LieferscheinNr + '\'');
    }
    if (global.BestellNr) {
      query.push(' BestellNr = \'' + global.BestellNr + '\'');
    }
    if (global.Artikelnummer) {
      query.push(' Artikelnummer = \'' + global.Artikelnummer + '\'');
    }
    where = ' where ';
  }
  where + query.join(' and ');
}}

UpdateQuery=update verify_lieferschein set LieferMenge = ${newLieferMenge} where  LieferscheinNr like '${LieferscheinNr}' and BestellNr like '${BestellNr}' and Artikelnummer like '${Artikelnummer}'

URL=jdbc:mysql://localhost:3306/roi?useUnicode=true&characterEncoding=UTF-8


Username=root


Testprogramm zum DataHandler

Mit dem folgenden Testprogramm testen Sie den DataHandler.

Hinweis: Bevor Sie das Testprogramm ausführen können, müssen Sie die Tabelle in der Datenbank anlegen, auf die die Einträge in der MetaDb verweisen.

let data = require('common/data');
let handler = data.handler('MAIN_MODULE_MANAGEMENT/customers/DocFormDemoVerify/Data/verify-lieferanten');

let value = {
  LieferscheinNr: 'LI00001',
  BestellNr: '100000',
  Artikelnummer: 'ANR100001',
  LieferMenge: 100.5
};

// Datensatz anlegen
try {
  handler.create(value);
} catch(e) {
  // Falls es einen Fehler gibt, etwa wenn es den Datensatz schon gibt
}

let keyPK = {
  LieferscheinNr: 'LI00001',
  BestellNr: '100000',
  Artikelnummer: 'ANR100001',
};

// Lesen
data = handler.read(keyPK);
data;
// Date hat folgenden Aufbau:
/**
[ 
  {
    "LieferscheinNr" : "LI00001",
    "BestellNr" : "100000",
    "Artikelnummer" : "ANR100001",
    "LieferMenge" : 100.5
  } 
]
***/
// Hier in diesem Falle kann immer nur ein Datensatz gelesen werden.

/**
Jetzt noch die zu ändernden Werte mit reinnehmen
Hier in diesem falle wird der Wert Liefermenge durch den Namen "newLieferMenge" repräsentiert.
Diese setzten wir jetzt in die Struktur mit rein
**/
keyPK.newLieferMenge = 1234.998;

// Ändern
handler.update(keyPK);
data = handler.read(keyPK);
data;

//Jetzt wird noch gelöscht
handler.del(keyPK);

/**
Wenn hier nichts übergeben wird, werden alle Datensätze aus der Tabelle gelesen. Siehe dazu den Eintrag in der MetaDB mit dem Namen Query
**/
keyPK = {
//  LieferscheinNr: 'LI00001',
//  BestellNr: '100000',
//  Artikelnummer: 'ANR100001',
};

data = handler.read(keyPK);
data;
// Jetzt sollte die Tabelle wieder leer sein

Beispiel für die Verwendung in aguila

/* global sca */

let data = require('common/data');
let aguila = require('common/aguila');

let widget = aguila.create({
  // ...
});

function bind(field, dependencies) {
  let handler;

  field.on('query', query => {
    aguila
    .fork(() => {
      if (!handler) {
        // Handler erst bei Bedarf erzeugen
        handler = data.handler(Packages.agorum.api.metadata.Metadata.getField(sca, field.name).dataSource);
      }

      // Filter setzen, der Abhängigkeiten von anderen Eingabefeldern definiert
      let parameters = {};

      dependencies.forEach(field => parameters[field.name] = field.value);

      // Die ersten 100 Treffer darstellen
      return handler.read(query, parameters).slice(0, 100);
    })
    .then(rows => field.data = rows);
  });
}

// Das Feld acbasicarchive_akte ist abhängig von den Feldern
// acbasicarchive_aktesection und acbasicarchive_aktearea
bind(widget.down('acbasicarchive_akte ist abhängig von '), [
  widget.down('acbasicarchive_aktesection'),
  widget.down('acbasicarchive_aktearea')
]);