Durchsuchbare Dokumentation aufrufen | Zurück zur Dokumentationsübersicht
Navigation: Dokumentationen agorum core > agorum core JavaScript-API
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.
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:
Mit dieser Funktion legen Sie einen neuen Datensatz an.
let ret = handler.create([ query, ] parameters);
Parameter | Beschreibung | Beispiel |
---|---|---|
query |
Hinweis: Verwenden Sie den query-Parameter bei create, update und del nicht mehr, er ist nur noch aus Kompatibilitätsgründen aufgeführt.
|
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);
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 } ]
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" }
Ä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.
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.
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.
let data = require('common/data');
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');
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}
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' });
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
/* 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') ]);