C#: OData-Operationen mit Parametern aufrufen

OData unterstützt benutzerdefinierte Operationen, sogenannte Aktionen und Funktionen. Eine Funktion muss Daten zurückliefern und hat im Normalfall keine Nebenwirkungen, d.h. eine Funktion sollte keine Daten verändern und lediglich lesend auf Daten zugreifen (GET). Aktionen hingegen können CRUD-Operationen auf Entitäten durchführen, d.h. man kann benutzerdefinierte Aktionen definieren, welche CREATE-, UPDATE- oder DELETE-Operationen auf Entitägen ausführen, wenn die Standard-Aktionen (POST/PUT/DELETE) den gestellten Anforderungen nicht genügen. Ebenso könnte man Aktionen definieren, die Daten aus verschiedenen Entitäten selektieren. Aktionen und Funktionen können an einen Entitätstyp, einen primitiven Datentyp, einen komplexen Datentyp oder an eine Collection gebunden sein.

Genau wie Entitäten werden benutzerdefinierte Operationen über eine URL identifiziert. Eine solche Operation akzeptiert primitive Datentypen als Eingabeparameter und kann natürlich auch entsprechende Daten zurückliefern. Dabei können die folgenden Typen zurückgegeben werden:

  • primitiver Datentyp
  • komplexer Datentyp
  • Liste von primitiven oder komplexen Datentypen
  • einzelne Entität
  • Liste von Entitäten
  • oder auch void

Dabei hat die URL den folgenden Aufbau:

Quelle [1]: Adressing OData Service Operation (Kapitel: 3.2)

Ein solche Operation kann jetzt in C# wie folgt aufgerufen werden:

In Zeile 3 wird zunächst die URL für den Aufruf erzeugt. In den Zeilen 5 – 9 werden die Parameter für die aufzurufende Operation erstellt. Ein Parameter wird dabei durch die Klasse UriOperationParameter repräsentiert. In Zeile 12 erfolgt dann der eigentliche Aufruf der Operation. Der Aufruf selbst erfolgt über die Methode Execute der DataServiceContext-Klasse. Von der Execute-Methode existieren mehrere Überladungen, die in der MSDN-Dokumentation nachgelesen werden können.

Zu beachten: Der hier gezeigte Aufruf erfolgt synchron. In einem nächsten Artikel werde ich zeige wie es möglich ist den Aufruf asynchron aufzurufen.

Literaturverzeichnis und Weblinks

Abk.Quelle
[1]URI Conventions (OData Version 2.0)
http://www.odata.org/documentation/odata-version-2-0/uri-conventions/
[2]DataServiceContext Klasse
https://msdn.microsoft.com/en-us/library/system.data.services.client.dataservicecontext(v=vs.113).aspx

leave your comment

Fork me on GitHub