aoRestServer/ODATA
August 24th, 2023
07 Datenabfragen für Tabellen
aoRestServer/ODATA für ABES/Objects - Hinweise für Frontend-Entwickler
- Datenabfragen für Tabellen
- Auswahl der Spalten mit $select
- Auswahl der Assoziationen bzw. Kollektionen mit $expand
- Einschränkung der Sätze mit $filter
- Sortierung der Sätze mit $orderby
- Anfordern der Satzanzahl mit $count
- Einschränkung der Sätze mit $skip und $top
1. Datenabfragen für Tabellen
Tabellen werden abgefragt, indem der Tabellenname (case-sensitiv) an den OData-Pfad angehängt wird.
Die Entität “Person” wird also mittels eines Get-Requests folgendermaßen abgefragt:
Request |
|
GET |
http://test.server.de/odata/Person |
Die Grundeinstellung im OData-Protokoll sieht vor, bei einfachen Abfragen wie im obigen Beispiel auf die Tabelle Person, alle Datensätze mit allen einfachen Feldern (aber keine Assoziationen und keine Kollektionen) zurückzugeben.
Achtung: Diese Abfrage kann datenabhängig sehr lange dauern!
Die Namen der Tabellen (Entitäten) können aus dem Metadaten-Dokument entnommen werden und müssen in genau dieser Schreibweise in der URL angegeben werden.
Für alle Datenabfragen auf die ABES/Objects-OData-Schnittstelle muss immer ein gültiges Autorisierungs-Token mitgegeben werden.
Um die Tabellenabfragen spalten- und zeilenmäßig einzuschränken, zu filtern und zu sortieren, werden die in den nachfolgenden Abschnitten beschriebenen Query-Optionen $select, $expand, $filter, $skip, $top, $count sowie $orderby verwendet und an die Abfrage-URL angehängt.
2. Auswahl der Spalten mit $select
Per Protokoll werden alle vorhandenen einfachen Felder in das Abfrageergebnis mit aufgenommen.
Um dieses Verhalten zu ändern, können die auszuwählenden Spalten mittels der Query-Option $select vorgegeben werden.
Achtung:
Die Spalte _OID hat in ABES/Objects eine besondere Bedeutung als Primary Key für jede Tabelle.
Diese Spalte wird daher bei jeder Abfrage mit ausgelesen.
Um also bspw. nur die Namen und Orte aller Personen zu ermitteln kann der folgende Get-Request gesendet werden.
Die korrekte Schreibweise der Feldnamen (case-sensitiv) ist wiederum dem Metadaten-Dokument zu entnehmen.
Request |
|
GET |
http://test.server.de/odata/Person?$select=Name,Ort |
Als Ergebnis erhält man ein JSON-Objekt im Body des Responses, das dem folgenden Aufbau entspricht.
Es ist zu beachten, dass das Feld _OID in den Personen-Objekten enthalten ist, obwohl es in der $select-Anforderung nicht aufgeführt wurde.
Response (Status=200) |
{ “value”: [ { “_OID”: “47756E6B396B6154684869375275384578596F475356”, “Name”: “Link”, “Ort”: “Hamburg” }, { “_OID”: “4770502B33757748524C7A4A4A37524E755556376E6F”, “Name”: “Hausmann”, “Ort”: “Hamburg” }, { “_OID”: “48734C6164467064684D61622B745847367832704645”, “Name”: “Hausburg”, “Ort”: “Hannover” }, … { “_OID”: “45435032326E6132354B464439414F783361507A3642”, “Name”: “Sonnenfeld”, “Ort”: null }, { “_OID”: “466B70616E627173394F50364E4A614467685A7A4D2F”, “Name”: “Leonhardt”, “Ort”: null }, { “_OID”: “477167524F722B793545453746634932716D50793446”, “Name”: “Bottke”, “Ort”: null } ] } |
Auch hier ist wie nach jeder Abfrage der Http-Statuscode auf 200 zu prüfen und im Fehlerfall ist das zurückgelieferte Fehler-Objekt für weitere Informationen auszulesen.
3. Auswahl der Assoziationen bzw. Kollektionen mit $expand
Um zusätzlich zu den einfachen Feldern auch Assoziationen oder Kollektionen mit abzufragen, ist die Query-Option $expand zu benutzen.
Assoziationen werden als Unterobjekte und Kollektionen als Array von Unterobjekten in das zurückgegebene JSON-Objekt gerendert.
Request |
|
GET |
http://test.server.de/odata/Person?$select=Name,Ort& $expand=assAdresse,collAdresse |
Hinweis:
Bei der Abfrage von Rollen (Dozenten, Teilnehmer etc.) sind alle vom Akteur geerbten Eigenschaften eingeschlossen.
Diese müssen in diesem Fall nicht über das Abfragen einer Assoziation (s.u.) aufgelöst werden.
Im erstellten JSON-Objekt gelten für die Unterobjekte die gleichen Feld-Auswahl-Regeln wie für die Hauptobjekte, so dass wiederum alle Felder der Assoziations- und Kollektions-Objekte mit aufgenommen werden.
Response (Status=200) |
{ “value”: [ { “_OID”: “47756E6B396B6154684869375275384578596F475356”, “Name”: “Link”, “Ort”: “Hamburg”, “assAdresse”: { “_OID”: “47794A50302F3178314C437054614C63743253437347”, “EXTOID_POSESSOR_DB”: “47794A50302F3178314C437054614C63743253437347”, “EXTOID_CREATOR_DB”: “47794A50302F3178314C437054614C63743253437347”, “RESTRICTEDFOR_TYP”: 0, “EXTOID_RESTRICTEDFOR_OID”: “47794A50302F3178314C437054614C63743253437347”, “EXTOID_READONLYFOR_OID”: “47794A50302F3178314C437054614C63743253437347”, “_Restricted”: false, “_RestrictionInherited”: false, “_ReadOnly”: false, “_Generation”: 621241541, “Bez”: “Standardadresse: , 22527 Hamburg”, “OWNER_TYP”: 28, “_OWNER_OID”: “47794A50302F3178314C437054614C63743253437347”, “_ObjectOwnerOID”: “47794A50302F3178314C437054614C63743253437347”, “_ObjektKopie”: false, “Typ”: “Standardadresse”, “BesitzerName”: “Link, Manfred”, “BesitzerTyp”: “Person”, “OID_ABESITEM”: “47794A50302F3178314C437054614C63743253437347”, “TYP_ABESITEM”: 28, “Tel1”: “040-123 456 78”, “Tel2”: null, “Fax1”: null, “Fax2”: null, “TelMobil”: “team@rackow-software.de”, “TelMobilFirma”: “0171-123 456 78”, “TelefonNummern”: “04012345678,017112345678”, “EmailInAktive”: null, “EmailCurrent”: null, “EMailPrimaer”: null, “EMail1”: “jemand@web.de”, “EMail2”: “ich@t-online.de”, “EMail3”: null, “HomePage”: null, “EmailAdresseVorhanden”: true, “TelefonNrVorhanden”: true, “AdressKopf”: “Herrn\r\nManfred Link\r\n\r\n22527 Hamburg\r\n”, “Anfahrt”: null, “WegBeschreibung”: null, “CO”: null, “Strasse”: null, “StrasseOhneHausNr”: null, “HausNummer”: null, “Ort”: “Hamburg”, “PLZ”: “22527”, “PostfachPLZ”: null, “PostFach”: null, “Land”: “Deutschland”, “Bundesland”: “Hamburg”, “Landkreis”: null, “Kanton”: null, “KantonKuerzel”: null, “AdresseInternational”: false, “AdresseVerifiziert”: true, “GeoVerifyOff”: false, “AdresseStatus”: 1118719, “ZipCityState”: null, “AnschriftVollstaendig”: false, “Stadtteil”: null, “geocodeData”: null, “geocodePraezision”: null, “geocodeLaenge”: null, “geocodeBreite”: null, “geocodeRegionalSchluessel”: null }, “collAdresse”: [ { “_OID”: “47794A50302F3178314C437054614C63743253437347”, “EXTOID_POSESSOR_DB”: “47794A50302F3178314C437054614C63743253437347”, “EXTOID_CREATOR_DB”: “47794A50302F3178314C437054614C63743253437347”, “RESTRICTEDFOR_TYP”: 0, “EXTOID_RESTRICTEDFOR_OID”: “47794A50302F3178314C437054614C63743253437347”, “EXTOID_READONLYFOR_OID”: “47794A50302F3178314C437054614C63743253437347”, “_Restricted”: false, “_RestrictionInherited”: false, “_ReadOnly”: false, “_Generation”: 621241541, “Bez”: “Standardadresse: , 22527 Hamburg”, “OWNER_TYP”: 28, “_OWNER_OID”: “47794A50302F3178314C437054614C63743253437347”, “_ObjectOwnerOID”: “47794A50302F3178314C437054614C63743253437347”, “_ObjektKopie”: false, “Typ”: “Standardadresse”, “BesitzerName”: “Link, Manfred”, “BesitzerTyp”: “Person”, “OID_ABESITEM”: “47794A50302F3178314C437054614C63743253437347”, “TYP_ABESITEM”: 28, “Tel1”: “040-123 456 78”, “Tel2”: null, “Fax1”: null, “Fax2”: null, “TelMobil”: “team@rackow-software.de”, “TelMobilFirma”: “0171-123 456 78”, “TelefonNummern”: “04012345678,017112345678”, “EmailInAktive”: null, “EmailCurrent”: null, “EMailPrimaer”: null, “EMail1”: “jemand@web.de”, “EMail2”: “ich@t-online.de”, “EMail3”: null, “HomePage”: null, “EmailAdresseVorhanden”: true, “TelefonNrVorhanden”: true, “AdressKopf”: “Herrn\r\nManfred Link\r\n22527 Hamburg\r\n”, “Anfahrt”: null, “WegBeschreibung”: null, “CO”: null, “Strasse”: null, “StrasseOhneHausNr”: null, “HausNummer”: null, “Ort”: “Hamburg”, “PLZ”: “22527”, “PostfachPLZ”: null, “PostFach”: null, “Land”: “Deutschland”, “Bundesland”: “Hamburg”, “Landkreis”: null, “Kanton”: null, “KantonKuerzel”: null, “AdresseInternational”: false, “AdresseVerifiziert”: true, “GeoVerifyOff”: false, “AdresseStatus”: 1118719, “ZipCityState”: null, “AnschriftVollstaendig”: false, “Stadtteil”: null, “geocodeData”: null, “geocodePraezision”: null, “geocodeLaenge”: null, “geocodeBreite”: null, “geocodeRegionalSchluessel”: null } ] }, … |
Da dies in den wenigsten Fällen gewünscht ist, muß die $select- (und ggf. auch die $expand-) Option rekursive angewendet werden.
Im nachfolgenden Beispiel sollen von den Adress-Unterobjekten nur noch das Bundesland ausgewählt werden (sowohl in den Assoziationen als auch in den Kollektionen):
Request |
|
GET |
http://test.server.de/odata/Person?$select=Name,Ort& $expand=assAdresse($select=Bundesland), collAdresse($select=Bundesland) |
Jetzt werden nur noch die angeforderten Felder der Unterobjekte gerendert:
Response (Status=200) |
{ “value”: [ { “_OID”: “47756E6B396B6154684869375275384578596F475356”, “Name”: “Link”, “Ort”: “Hamburg”, “assAdresse”: { “_OID”: “47794A50302F3178314C437054614C63743253437347”, “Bundesland”: “Hamburg” }, “collAdresse”: [ { “_OID”: “47794A50302F3178314C437054614C63743253437347”, “Bundesland”: “Hamburg” } ] }, … |
An diesem Beispiel wird auch noch einmal der Unterschied sichtbar, wie Assoziationen (einzelne Unterobjekte) und Kollektionen (Arrays von Unterobjekten) in die Ausgabe übernommen werden.
4. Einschränkung der Sätze mit $filter
Eine Möglichkeit, die Anzahl der zurückzugebenden Sätze zu beeinflussen, besteht in der Anwendung einer Filterbedingung (ähnlich einer Where-Bedingung bei SQL-Abfragen).
Dazu wird die Query-Option $filter verwendet.
Da die Filter teilweise sehr komplexe Schreibweisen erfordern können, muß immer darauf geachtet werden, das alle erforderlichen Sonderzeichen oder Leerzeichen korrekt URL-encodiert werden.
Beispielsweise wird für Leerzeichen entweder %20 oder + benutzt.
Im folgenden Beispiel sollen alle Personen ausgelesen werden, deren Ort Hamburg ist. zur Kontrolle wird der Ort noch mit ausgegeben:
Request |
|
GET |
http://test.server.de/odata/Person?$select=Name,Ort& $filter=Ort+eq+’Hamburg’ |
Mit den Beispieldaten ergibt sich folgendes Response-Objekt:
Response (Status=200) |
{ “value”: [ { “_OID”: “47756E6B396B6154684869375275384578596F475356”, “Name”: “Link”, “Ort”: “Hamburg” }, { “_OID”: “4770502B33757748524C7A4A4A37524E755556376E6F”, “Name”: “Hausmann”, “Ort”: “Hamburg” }, { “_OID”: “4654556848745346564E6C705255657444466D543063”, “Name”: “Garz”, “Ort”: “Hamburg” }, … { “_OID”: “484F2F327048596A394B76365750502F6B437A753947”, “Name”: “Bärtig”, “Ort”: “Hamburg” }, { “_OID”: “4669616D6E49766C5A4F4F3764382F33657352657343”, “Name”: “Kleiner”, “Ort”: “Hamburg” }, { “_OID”: “477A50323875436D4244486A387A49756C7731796833”, “Name”: “Waldmann”, “Ort”: “Hamburg” } ] } |
Die Filterbedingungen können auf alle einfachen Felder gesetzt werden.
Dabei können die Feldwerte auf vorzugebende Werte oder auf null/leer geprüft werden.
Mehrere Filterbedingungen können mit Klammern gruppiert und mit logischen Operatoren kombiniert werden.
Die in den nachfolgenden Tabellen angegebenen Beschreibungen werden zur besseren Lesbarkeit mit Leerzeichen geschrieben.
Bei der konkreten Anwendung in einer URL müssen diese Leerzeichen encodiert werden, um eine gültige Http-Anfrage zu erstellen.
Beispiel:
Aus Feld eq <Wert> würde dann bspw. Name+eq+’Meier’
Die folgende Tabelle gibt die Vergleichsoperatoren an, die zur Prüfung von Feldern gegen Feldwerte benutzt werden können:
Vergleichsoperator |
Bedeutung |
Feld eq <Wert> |
gleich |
Feld lt <Wert> |
kleiner als |
Feld gt <Wert> |
größer als |
Feld le <Wert> |
kleiner als oder gleich |
Feld ge <Wert> |
größer als oder gleich |
Feld ne <Wert> |
ungleich |
Zur Prüfung, ob ein Feld gefüllt ist, kann das null-Literal verwendet werden.
Es sind nur Vergleiche auf Gleichheit/Ungleichheit möglich:
Vergleichsoperator |
Bedeutung |
Feld eq null |
Feld ist leer |
Feld ne null |
Feld ist nicht leer |
Zur Prüfung, ob Felder einen bestimmten Wert enthalten oder damit beginnen sind einige Filterfunktionen vorhanden.
Der not-Operator ist ausschließlich mit diesen Funktionen zulässig.
Funktion |
Bedeutung |
contains(Feld,<Wert>) |
Feld enthält Wert |
not contains(Feld,<Wert>) |
Feld enthält Wert nicht |
startswith(Feld,<Wert>) |
Feld beginnt mit Wert |
not startswith(Feld,<Wert>) |
Feld beginnt nicht mit Wert |
Die bisher beschriebenen Vergleichsausdrücke können mit den Verknüpfungsoperatoren or und and kombiniert werden.
Dabei können beliebige Klammerebenen mit runden Klammernpaaren () benutzt werden.
Hier ein Beispiel für eine komplexe Filterbedingung:
Alle Personen auslesen, deren Ort ‘Berlin’ ist oder mit ‘Ha’ beginnt, aber nicht ‘Hannover’:
Request |
|
GET |
http://test.server.de/odata/Person?$select=Name,Ort& $filter=(Ort+eq+’Berlin’+or+startswith(Ort,’Ha’))+ and+Ort+ne+’Hannover’ |
Die Beispieldaten liefern dann diesen Response zurück:
Response (Status=200) |
{ “value”: [ { “_OID”: “47756E6B396B6154684869375275384578596F475356”, “Name”: “Link”, “Ort”: “Hamburg” }, { “_OID”: “4770502B33757748524C7A4A4A37524E755556376E6F”, “Name”: “Hausmann”, “Ort”: “Hamburg” }, { “_OID”: “4654556848745346564E6C705255657444466D543063”, “Name”: “Garz”, “Ort”: “Hamburg” }, … { “_OID”: “453270764D575346424B334A344234384A444A77757A”, “Name”: “Tolle”, “Ort”: “Berlin” }, { “_OID”: “476F4B41674A4658354261345435632F5A4E64466A65”, “Name”: “Andree”, “Ort”: “Berlin” }, { “_OID”: “472F6F4F7238582F42477672532F7935493069426465”, “Name”: “Hohmann”, “Ort”: “Berlin” } ] } |
Achtung:
Alle Vergleichsoperatoren, Filterfunktionen und logische Verknüfungsoperatoren sind case-sensitiv.
Sie müssen genau wie hier beschreiben verwendet werden.
Es ist immer darauf zu achten, dass die erstellte/generierte URL korrekt enkodiert wird.
5. Sortierung der Sätze mit $orderby
Die abgefragten Datensätze können mittels der $orderby Query-Option vom Server sortiert werden, bevor sie zurückgegeben werden.
Die Sortierung erfolgt, indem das Feld und die Sortierrichtung angegeben wird.
Es können ein oder mehrere Felder zum Sortieren angegeben werden.
Die Sortierreihenfolge wird angegeben, indem das Schlüsselwort asc (aufsteigende Reihenfolge) oder desc (absteigende Reihenfolge) hinter den Feldnamen geschrieben wird.
Für den Fall, dass keine Sortierreihenfolge spezifiziert wird, gilt asc (aufsteigenden Reihenfolge) als der Default.
Falls mehrere Felder zum Sortieren angegeben werden, so werden sie mit Kommas voneinander getrennt.
Beispiel:
Es sollen alle Personen sortiert nach Ort und Name ausgelesen werden.
Die Sortierung soll nach Ort erfolgen und innerhalb eines Ortes nach Namen in umgekehrter Reihenfolge.
Es werden nur Personen ausgelesen, deren Ort und Name gefüllt sind:
Request |
|
GET |
http://test.server.de/odata/Person?$select=Name,Ort& $filter=Name+ne+null+and+Ort+ne+null& $orderby=Ort,Name+desc |
Es ergibt sich die folgende Antwortliste:
Response (Status=200) |
{ “value”: [ { “_OID”: “455948523777506A4A463571316A3666377657304775”, “Name”: “Paulus”, “Ort”: “Adlkofen” }, { “_OID”: “476B423146345A664A4F556F58327562757358436158”, “Name”: “Wald”, “Ort”: “Ahrensburg” }, { “_OID”: “46726366496D677064504E6F5A617953795266726C4E”, “Name”: “Rochowiec”, “Ort”: “Barsinghausen” }, { “_OID”: “486E5A683469636C424E74496B4C673549417553626D”, “Name”: “Bauer”, “Ort”: “Barsinghausen” }, { “_OID”: “47316F34453859444E44305A346D4845452B66454972”, “Name”: “Zeckert”, “Ort”: “Berlin” }, … { “_OID”: “484973556278697142476B61544A7842562F4557546C”, “Name”: “Engel”, “Ort”: “Wunstorf” } ] } |
Auch hier ist wie immer auf eine korrekte Enkodierung der Abfrage-URL zu achten.
Die beiden genannten Schlüsselwörter asc und desc müssen in genau dieser Schreibweise angewendet werden.
6. Anfordern der Satzanzahl mit $count
Die Query-Option $count fordert die Anzahl der Datensätze für die Tabellenabfrage oder auch für die mit $expand ausgewählten Kollektionen an.
Die jeweilige Anzahl wird nach Anwendung der Filterbedingung, aber nicht unter Beachtung von $skip und $top berechnet.
Die ermittelte Satzanzahl wird als Annotation zusätzlich in das JSON-Objekt aufgenommen.
Beispiel:
Auslesen des ersten Satzes aus Person (nur die _OID).
Es soll aber die Gesamtanzahl (siehe Response “@odata.count”: 698) der Sätze in der Personen-Tabelle mit zurückgegeben werden:
Request |
|
GET |
http://test.server.de/odata/Person?$select=_OID& $top=1& $count=true |
Response (Status=200) |
{ “@odata.count”: 698, “value”: [ { “_OID”: “47756E6B396B6154684869375275384578596F475356” } ] } |
Die Gesamtanzahl der in der Personen-Tabelle vorhandenen Sätze wird als Annotationsfeld in das Ergebnis-JSON-Objekt mit aufgenommen.
Die Abfrage ist auch auf Unter-Kollektionen möglich, so wie die folgende Beispielabfrage zeigt:
Request |
|
GET |
http://test.server.de/odata/Person?$select=Name& $expand=collAdresse($select=EMail1;$count=true)& $count=true& $top=3 |
In dem zurückgegebenen JSON-Objekt ist jetzt nicht nur die Gesamtanzahl der Personensätze vermerkt, sondern auch für jedes abgefragte Personen-Objekt (im Beispiel 3 Stück) wird die Anzahl (“@odata.count”: 698 -> “collAdresse@odata.count”: 1) der in der Adress-Kollektion befindlichen Adress-Sätze mit ausgegeben:
Response (Status=200) |
{ “@odata.count”: 698, “value”: [ { “_OID”: “47756E6B396B6154684869375275384578596F475356”, “Name”: “Link”, “collAdresse@odata.count”: 1, “collAdresse”: [ { “_OID”: “47794A50302F3178314C437054614C63743253437347”, “EMail1”: “a.jemand@web.de” } ] }, { “_OID”: “4770502B33757748524C7A4A4A37524E755556376E6F”, “Name”: “Hausmann”, “collAdresse@odata.count”: 1, “collAdresse”: [ { “_OID”: “4536656C583856516450657159754B49304E4F617444”, “EMail1”: “b.jemand@web.de” } ] }, { “_OID”: “4651357175446F5431447437514737746C6F47754E75”, “Name”: “Urban”, “collAdresse@odata.count”: 1, “collAdresse”: [ { “_OID”: “484C4E73324A5A3052476F356159306F4E756A446379”, “EMail1”: “c.jemand@web.de” } ] } ] } |
Das Fehlen der Query-Option $count oder die Angabe von $count=false bedeutet, das keine Annotationen zur Anzahl ausgegeben werden soll.
7. Einschränkung der Sätze mit $skip und $top
Eine weitere Möglichkeit, die Anzahl der zurückzugebenden Datensätze zu verringern, besteht im sog. Paging.
Dabei werden die Ergebnisdatensätze “portionsweise” in mehreren Abfragen nacheinander geholt.
So ist es zum Beispiel möglich, die entsprechenden Daten für das Vor- und Zurückblättern in einer Listendarstellung seitenweise abzufragen.
Die Query-Parameter werden in der folgenden Reihenfolge angewendet:
- $filter
- $orderby
- $count
- $skip
- $top
Aus der angegebenen Reihenfolge wird ersichtlich, das $skip und $top erst angewendet werden, nachdem gefiltert und sortiert wurde.
$skip bedeutet, dass die ersten n Sätze des Ergebnisses übersprungen werden sollen und nicht in die Ausgabe übernommen werden sollen. Falls $skip nicht angegeben wurde, wird ein Wert von 0 angenommen.
$top bedeutet, dass nachdem $skip ausgeführt wurde, nur die nächsten n Sätze ausgegeben werden sollen. Falls $top nicht angegeben wurde, werden alle Sätze bis zum Ende der Ergebnismenge übernommen.
$skip und $top können kombiniert werden oder auch jeweils einzeln angewendet werden.
Beispiel:
Auslesen der Personen-Sätze 6 – 10.
Request |
|
Header |
Accept: application/json;odata.metadata=minimal |
GET |
http://test.server.de/odata/Person?$select=Name&$skip=5&$top=5 |
Response (Status=200) |
{ “@odata.context”: “http://test.server.de/odata/$metadata#Person”, “@odata.nextLink”: “http://test.server.de/odata/Person?$select=Name&$skip=10&$top=5”, “value”: [ { “_OID”: “47382B497A695A34354E7A72545172615236334B6F38”, “Name”: “Nöpel” }, { “_OID”: “45375378355236476C4E483770322F754267444E4D59”, “Name”: “Jasper” },
{ “_OID”: “486D6253353761306C434670464E732F6578575A6B44”, “Name”: “Steude” }, { “_OID”: “45714264533773684E507835474F336A596A31744937”, “Name”: “Aurin” }, { “_OID”: “47366632554D742F6C474A4C6561426F504179414333”, “Name”: “Hünerbein” } ] } |
Da in diesem Beispiel das odata.metadata-Level auf minimal gestellt ist, wird bei Verwendung von $top/$skip automatisch eine Annotation @odata.nextLink ( “@odata.nextLink”: “http://test.server.de/odata/Person?$select=Name&$skip=10&$top=5”) generiert, die die Abfrage für die nächste nachfolgende Seite beim Paging darstellt.
Die Bildschirmfotos können in aktuellen Programmversionen visuell abweichen.
Sie haben Fragen oder Anregungen? Schreiben Sie uns gerne an support@rackow-software.de