Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
1
OData Selbst gemacht
2
Rafael Dabrowski oh22data AG Application Development
SharePoint, Nintex, Web-Technologien
3
Agenda Warum OData? Was ist OData?
Wie erstelle ich einen OData WebService selbst? OData Query Options Wie kann ich OData konsumieren?
4
Warum OData?
5
Die Welt früher Ein Datenbank Server Eine Client Software
Installiert auf mehreren Endgeräten Nachteile: Endgeräte meist strikt spezifiziert bspw: WindowsXP Keine Schnittstellen nach Außen
6
Die Welt heute Nicht viel anders ;)
Aber die Umwelt hat sich verändert! Arbeiten von Unterwegs, Mobiles und Tablets SelfService BI Wie die neuen Möglichkeiten bedienen?
8
Was ist OData?
9
Was ist OData? Web Service Protokoll Von Microsoft entwickelt
Unterliegt Open Specification Promise (OSP) Zum Lesen und schreiben von Daten OSP: Versprechen von Microsoft dass die Spezifikation frei benutzt werden kann Nicht mit GPL kompatibel: Zukünftige Versionen ausgeschlossen SourceCode fällt nicht unter OSP
10
Was ist OData? HTTP basiert Setzt auf offene Technologien auf REST
AtomPub JSON +X
11
Was ist OData?
12
Was ist OData?
13
Antwort: AtomPub
14
Antwort: JSON
15
Wie erstelle ich ein OData WebService selbst?
16
Voraussetzungen Visual Studio 2010 oder 2012 IIS Express oder höher
WCF Data Services 5.0+ IIS Express oder höher (optional) Datenbank jeglicher Art
17
Demo Steps: Leeres Web Projekt erstellen
EntityFrameWork Model einfügen (ADO.NET Entity Data Model) WCF DataService einfügen WCF DataService CODE: // // <copyright file="WebDataService.svc.cs" company="Microsoft"> // Copyright (c) Microsoft Corporation. All rights reserved. // </copyright> using System; using System.Collections.Generic; using System.Data.Entity.Infrastructure; using System.Data.Objects; using System.Data.Services; using System.Data.Services.Common; using System.Linq; using System.Linq.Expressions; using System.ServiceModel.Web; using System.Web; namespace SqlSaturdayDemoOData { public class AWService : DataService<AdventureWorksLT2012Entities> // This method is called only once to initialize service-wide policies. public static void InitializeService(DataServiceConfiguration config) //Bestimmt die Entitäten und die Zugrifsregeln config.SetEntitySetAccessRule("*", EntitySetRights.AllRead); config.SetEntitySetAccessRule("ProductCategory", EntitySetRights.All); //Bestimmt die eigenen Funktionen config.SetServiceOperationAccessRule("Getproduct", ServiceOperationRights.All); //Bestimmt die OData Version die benutzt wird. config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3; } //Ein QueryInterceptor wird ausgeführt wenn die angegebene Entität abgefragt wird. //Kann für zusätzliches Filtern/Securityzwecke genutzt werden [QueryInterceptor("Product")] public Expression<Func<Product, bool>> OnProductChange() return p => p.SellEndDate == null; //Ein ChangeInterceptor wird ausgeführt wenn versucht wird einen Datensatz zu ändern //Kann für Validierungs und Securityzwecke genutzt werden [ChangeInterceptor("ProductCategory")] public void OnPCChanege(ProductCategory item, UpdateOperations ops) //Wenn Insert if (ops == UpdateOperations.Add) item.rowguid = Guid.NewGuid(); //Wenn Insert oder Update if (ops == UpdateOperations.Add || ops == UpdateOperations.Change) //holen des aktuellen Wertes var oldItem = default(ObjectStateEntry); ((IObjectContextAdapter)this.CurrentDataSource).ObjectContext.ObjectStateManager.TryGetObjectStateEntry(item, out oldItem); item.rowguid = (Guid)oldItem.CurrentValues["rowguid"]; item.ModifiedDate = DateTime.Now; //Eine eigene Funktion die ausgeführt werden sollen. siehe auch: SetServiceOperationAccessRule [WebGet] public Product Getproduct(string name) return CurrentDataSource.Product.First(o => o.Name.StartsWith(name)); Demo
18
OData Query Options
19
$top/ $skip/ $inlinecount
$top: Begrenzt die Anzahl anzuzeigender Objekte $top=5 $skip: Überspringt die die angegebene Anzahl von Objekten $skip=10 $inlinecount: Gibt Anzahl verfügbarer Objekte mit aus $inlinecount=allpages Optimal für Paging
20
$orderby Sortiert die Ausgabe nach den angegebenen Kriterium
$orderby=Name desc Mehrfachnennung durch Komma trennen Sortieren in Joins möglich: Category/Name
21
$expand Bindet verknüpfte Objekte direkt ein $expand=Customer
Komma Separiert Joins möglich
22
$select Bestimmt anzuzeigende Felder Minimiert Request Größe
$select=ID,OrderDate,Customer/ContactName Mehrfachnennung durch Komma möglich Joins möglich, aber nur mit zugehörigem $expand
23
$filter Filtert die Ausgabe nach den angegebenen Kriterien
$filter=LastName eq ‘Gee‘ or startswith(Firstname,‘A‘) Auch durch Joins filterbar Viele Funktionen vorhanden siehe nachfolgende Tabellen
24
$filter
25
$filter
26
Wie kann ich OData konsumieren?
27
Wie kann ich OData konsumieren
28
PowerShell –Simpler OData Request
function getOData($url){ return ((Invoke-WebRequest $url).Content | ConvertFrom-Json).d.results } GetCustomers $url = ' getOData $url | Format-Table ContactName, CompanyName GetCustomerOrders $url = ' getOData $url | Format-Table OrderID, OrderDate getOData $url | Where {$_.Customer.ContactName} -eq 'Mario Pontes' | Format-Table OrderID, OrderDate GetOrdersFromCustomer $url =" Feuer'&`$expand=Product,Order,Order/Customer&`$format=json" getOData $url | UnitPrice, Quantity, expression={[double]$_.UnitPrice * $_.Quantity* (1-[double]$_.Discount)}} -GroupBy OrderID FROM XML: $url = ' ([xml]((Invoke-WebRequest $url).Content)).feed.entry | Select {$_.content.properties.OrderDate.innerText}, {$_.link[1].inline.entry.content.properties.ContactName}
29
PowerShell –Simpler OData Request
30
PowerShell – Mit mehreren Seiten
function getOData($url, $data $res = ((Invoke-WebRequest $url).Content | ConvertFrom-Json) $data += $res.d.results if($res.d.__next -ne $null){ return getOData "$($res.d.__next)&`$format=json" $data }else{ return $data }
31
Excel Ab Excel 2010 Über PowerPivot DatenFeed einbinden
Es werden leider keine Links übernommen – müssen selbst nachgepflegt werden.
32
Resümee Offener Standard Einfach zu implementieren
Selbst auf bestehenden Systemen Überall konsumierbar
33
Links OData Org: http://www.odata.org
Northwind Odata Demo Service: WCF DataServices Blog:
34
Vielen Dank Kontakt: Rafael Dabrowski –
Ähnliche Präsentationen
© 2025 SlidePlayer.org Inc.
All rights reserved.