generator-syncodatav2
v0.1.13
Published
Synchroner Zugriff auf ODataV2 Model (await read(...);)
Downloads
20
Maintainers
Readme
Diese Beschreibung ist noch in Arbeit und enthält nur eine grobe Übersicht der Funktionalität von SyncODataV2.
Eine Überarbeitete und englische Version wird es in nächster Zeit geben (voraussichtlich noch 2024).
SyncODataV2
Präsentiert von: SUPORTIS AG - https://suportis.com
Ist ein SAPUI5 Modul für einfachen und synchronen Zugriff auf ODataV2 Models.
Es unterstützt
- Create (normal, Batch und simuliertes Batch (mehrere normale Create hintereinander))
- Read (Inkl. Angabe von Parameters wie $count)
- Update
- Delete
Installation / Vorbereitung
In den webapp
Ordner der SAPUI5 App wechseln und dort yo syncodatav2
ausführen.
Nach dem yo
fertig ist, wurde ein Ordner erstellt in dem sich die SyncODataV2.js
befindet.
Diese kann nun im Controller beim sap.ui.define
angegeben und als Parameter in der function
hinzugefügt werden.
Danach kann SyncODataV2 verwendet werden.
Verwendung
Zum einen können alle CRUD Methoden direkt als statische Methode aufgerufen werden:
SyncODataV2.create(model, path, odata[, simBatch])
SyncODataV2.read(model, path[, parameters])
SyncOdataV2.update(model, path, odata)
SyncODataV2.delete(model, path)
Jedoch stehen alle Funktionalitäten wie Filter und Batch nur in den jeweiligen Manager-Klasseninstanzen zur Verfügung.
Erstellen der Manager-Instanz
const mng = SyncODataV2.createManager(model);
Erstellt eine Manager-Instanz für den Zugriff auf das übergebene ODataV2 Model.
const mngBatch = SyncODataV2.createBatch(model, groupID);
Erstellt eine Manager-Instanz für den Batch Zugriff (nur Create).
Create
Syntax: create(path, odata[, simBatch])
path
: Pfad zur Entity
odata
: OData Objekt mit den Felder/Werten. Oder ein Array aus OData Objekten (dann wird ein Batch ausgeführt)
simBatch
: Optional, wenn true
wird das Batch nur simuliert (d.h. es werden für jeden Eintrag im odata-Array ein normales Create ausgeführt).
Wird kein Batch simuliert, wird das Batch direkt submitted. Es besteht keine Möglichkeit das submitChanges
manuell auszuführen. Hierzu wird die Manager Instanz für Batch createBatch(model)
benötigt.
Rückgabe Objekt oder Array von Objekte, die erstellt wurden.
await mng.create("/EntityName", odata);
Erstellt in der Entität EntityName
ein oder mehrere Einträge (je nach dem ob odata
ein Objekt oder Array ist).
await mng.create("/EntityName", odata, true);
Erstellt in der Entität EntityName
mehrere Einträge, es wird jedoch kein Batch-Request ausgeführt sondern entsprechend viele normale Create-Requests.
Read
Syntax: read(path[, parameters])
:
path
: Pfad zur Entity
parameters
: optional, JSON-Objekt mit Property/Value.
Propertyname : z.B: "$count"
Propertyvalue: string, z.B. "true"
Liest die Einträge der angegebenen Entität unter berücksichtigung der Parameter und evtl. hinzugefügte Filter (siehe unten)
var result = await mng.read("/EntityName");
Liest alle Einträge aus der Entität EntityName
mng.addFilter_GreaterThan( "level", 10 );
var result = await mng.read("/EntityName");
Liest alle Einträge wenn der Level größer als 10 ist.
var result = await mng.read("/EntityName", { "$count" = "true" });
Gibt die Anzahl der Einträge in der Entität zurück.
Update
Syntax: update(path, odata)
path
: Pfad zur Entität und Item (Key-Angabe, lt. ODataV2 URI Spezifikation)
odata
: Einträge, die sich ändern
Ändert einen Datensatz gemäß den im OData definierten Properties.
var odata = { Name: "Neuer Name" };
await mng.update( "/EntitName(1)", odata );
Ändert das Feld "Name" des Datensatzes mit der ID 1.
Delete
Syntax: delete(path)
path
: Pfad zur Entität und Item (Key-Angabe, lt. ODataV2 URI Spezifikation)
Löscht den angegebenen Datensatz.
await mng.delete("/EntitName(1)");
Löscht den Datensatz mit der ID 1
Filter
Beim lesen (read()
) können vorher Filter definiert werden. Diese können mit den folgenden Funktionen hinzugefügt werden:
addFilterList(filterOperator)
Erstellt eine neue Filter-Liste die mit FILTER_OPERATORS.AND
oder FILTER_OPERATOR.OR
logisch mit anderen Filter-Listen verknüpft werden kann. Ohne Angabe der filterOperator
wird OR
verwendet.
addFilter_Between(fieldName, start, end)
(Alias addFilter_BT()
)
Fügt einen Zwischen
Filter hinzu. Der Filter trifft zu, wenn der Wert des angegebenen Feldes zwischen start
und end
liegt.
addFilter_NotBetween(fieldName, start, end)
(Alias addFilter_NB()
)
Gegenteil zu Between
addFilter_Contains(fieldName, value)
Trifft zu wenn das Feld value
enthält
addFilter_NotContains(fieldName, value)
Gegenteil zu Contains
addFilter_EndsWith(fieldName, value)
addFilter_StartsWith(fieldName, value)
Trifft zu wenn der Wert des angegeben Feldes mit value
endet oder beginnt.
addFilter_NotEndsWith(fieldName, value)
addFilter_NotStartsWith(fieldName, value)
Gegenteil zu EndsWith, StartsWith
addFilter_Equals(fieldName, value)
(Alias addFilter_EQ()
)
Trifft zu, wenn der Wert des Feldes mit value
übereinstimmt.
addFilter_NotEquals(fieldName, value)
(Alias addFilter_NE()
)
Gegenteil zu Equals
addFilter_GreaterEquals(fieldName, value)
(Alias addFilter_GE()
)
addFilter_GreaterThan(fieldName, value)
(Alias addFilter_GT()
)
addFilter_LowerEquals(fieldName, value)
(Alias addFilter_LE()
)
addFilter_LowerThan(fieldName, value)
(Alias addFilterLT()
)
Trifft zu wenn der Wert des Feldes >= value
, > value
, <= value
oder < value
ist.
makeFilter(fieldName, operator, value1, value2)
Zum manuellen erstellen eines Filters. operator
ist der Operator wie in der SAPUI5/OData Dokumentation angegeben.
clearFilter()
Löscht alle erstellten Filter.
Sortierung
Mit der Methode addSorter(fieldName, descending, group, comparator)
können Sortierer hinzugefügt werden. Genaueres in der SAPUI5/ODataV2 Dokumentation.
clearSorters()
löscht alle Sortierer.
Sonstiges Methoden
updateBindings()
Aktualsiert die Bindings (entspricht model.updateBindings()
)
refresh([sleepMS])
Aktualsiert das Model, wartet davor noch die angegeben Zeit in ms. Entspricht model.refresh()
Rückgabe
Ist ein Result
Objekt in dem die gelesen/geschrieben Daten enthalten und der Status des Requests enthalten sind.
data
Objekt mit den Daten die erstellt oder gelesen wurden.
additionalData
Zusätzlich Daten
status
True wenn der Request erfolgreich war.
count
Anzahl der Datensätze (funktioniert auch mit dem $count=true
Parameter)
toOData(exclude, include, withMetadata)
Wandelt das Data-Objekt in OData um.
exclude
Feldnamen, die nicht im OData Objekt enthalten sein sollen.
include
Nur die angegeben Feldnamen sollen im OData Objet enthalten sein
withMetadata
auch die Metadaten sollen im Objekt enthalten sein (Default false)
Zusätzlich werden alle Werte direkt in das Result-Objekt kopiert (außer data, additionalData, status und count).
var result = mng.read("/entityName");
var name = result.data.name;
name = result.name; // funktioniert auch
// bei vorhandensein eines Feldes mit dem Name ID oder UUID ist result implizit das ID Feld
if (result == "8016914b-7a39-4cf2-9e94-2b8c1a11d783") { ... }
result = mng.read("/entityName", { "$count", "true" } );
var count = result.count;
// Bei nur einer Rückgabe (ein Element oder ein Feld) ist result automatisch dieses. z.B. `count`
if (result > 5) { ... }
// Umwandlung als String wenn nur ein Feld enthalten ist result dieser Wert als String
var erg = "" + result;
// Andernfalls wird das Data-Objekt in JSON als String zurückgegeben
var json = "" + result;
// Odata Objekt aus dem Result generieren (Metadaten werden weg gelassen)
var odata = result.toOData();
Batch-Manager
Kann mit
var mng = SyncODataV2.createBatch(model, groupID);
erstellt werden.
Der Batch-Manager wird ausschließlich für das Erstellen von Datensätzen als Batch-Request verwendet. Folgende Methoden sind enthalten:
create()
Syntax: create(path, odata)
path
: Pfad zur Entity
odata
: OData Objekt mit den Felder/Werten.
Fügt einen Eintrag in die Liste der zu erstellenden Datensätze hinzu. Dieser wird nicht direkt erstellt sondern benötigt noch ein submitChanges()
submitChanges()
Syntax: submitChanges()
Fügt alle Einträge die mit create()
der Liste hinzugefügt wurde als Batch-Request der Entität hinzu.
hasPendingChanges()``
Gibt
truezurück wenn es noch Änderungen gibt, die mit
submitChanges()` durchgeführt werden können.
getPendingChanges()
Gibt die Änderungen die noch aussstehen zurück.
getResults()
Gibt die Änderungen (erstellte Datensätze) zurück. Wobei dies auch als Rückgabe von submitChanges()
geschieht.
Versions-History
0.1.0 read Methode implementiert
0.1.1 CRUD vervollständig
0.1.2 read Methode mit 2. Parameter: parameter
Map of Parameters
var p = {
"$select", "firstName,lastName"
}
var daten = mng.read("/Daten", p);
0.1.3 create anstelle von createManager() funktioniert, gibt aber Hinweise im Log aus
createManager() mit Promise gibt Hinweis als error aus
0.1.4 Batchverbeitung hinzugefügt
0.1.5 Parameter für read() werden auf Syntax geprüft (beginnen mit $)
0.1.6 Result Objekt hat nun AdditionalData (Batch=Results, Normale Request=Header)
0.1.7 Result Objekt hat nun eine Count-Eigenschaft (Anzahl der Elemente in results oder bei $count die Rückgabe)
0.1.8 delete() gab kein Result (promise), daher immer async!!!
Neue Methode Sleep(ms) für Wartezeiten in den Managern und Batches hinzugefügt
Konstruktor von Manager und Batch kann nun auch ein Objekt mit den Properties model, groupID und sleepMS entgegennehmen (z.B. createManager({model: model, groupID: "batch1", sleepMS: 1000}) )
Sleep-Zeit ({ sleepMS } Parameter im Konstruktor) wird nun in Delete, Remove, Update und Create berücksichtigt
.refresh hat nun einen optionalen Parameter sleepMS und wartet die angegebene Zeit in ms vor dem Refresh
0.1.9 NPM / Yeoman Version
0.1.10 Readme hinzugefügt
0.1.11 Readme angepasst
0.1.12 Readme um Vorbereitung/Installation erweitert
0.1.13 Package.json erweitert