ABES/Objects

Bedienungsanleitungen, Dokumentationen, Lern-Videos

07 Datenabfragen für Tabellen

aoRestServer/ODATA für ABES/Objects - Hinweise für Frontend-Entwickler

  1. Datenabfragen für Tabellen
  2. Auswahl der Spalten mit $select
  3. Auswahl der Assoziationen bzw. Kollektionen mit $expand
  4. Einschränkung der Sätze mit $filter
  5. Sortierung der Sätze mit $orderby
  6. Anfordern der Satzanzahl mit $count
  7. 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.