Sharepoint 2010 und Windows 8 Store App

Ich weis noch immer nicht, wie die Windows METRO Anwendungen nun heißen. Kein gutes Zeichen fürs Marketing. In Visual Studio heißt das Template Windows Store, was nicht ganz richtig ist, weil man wohl auch Desktop Anwendungen … lassen wir das.

Im Rahmen einer Machbarkeitsstudie werden Interfaces von SharePoint evaluiert um sie in WinRT zu verwenden. Aktuell wird auf die SharePoint REST Services programmiert. Weil ich faul bin über einen Proxy in Visual Studio 2012.

Entsprechend der Odata Query Language wartet dort ein WCF Service, der sich an den ADO.NET Dataservices anlehnt. URL ist https://server/_vti_bin/ListData.svc/

sharepointservice

In meinem Fall musste ich drei mal meine Domain Account eingeben um die Referenz erstellt zu bekommen.

Mit Hilfe des Proxy lässt sich dann der Data Service instanziieren. Der Name IntranetDataContext ergibt sich in diesem Fall aus dem verwendeten SharePoint.

 Dim dc As IntranetDataContext = 
New IntranetDataContext(New Uri("https://server/_vti_bin/ListData.svc"))

Wenn die Namen unklar sind einfach im Class View von Visual Studio nach DataContext suchen.

Als nächstes geht es um die Authentifizierung am Sharepoint

 Dim cr = New System.Net.NetworkCredential("usr", "pwd", "domain")
 dc.Credentials = cr

Dann wird der Service aufgerufen. Weil dieser den ASYNC Pattern aus .NET 4.5 nicht implementiert auf die gute alte Beginexecute und Endexcute Methode um asynchron zu bleiben. Die Liste heist Mitarbeiter und kann auch direkt im Browser per https://server/_vti_bin/ListData.svc/Mitarbeiter so abgerufen werden.

 dc.BeginExecute(Of MitarbeiterItem)(New Uri("Mitarbeiter", UriKind.Relative), AddressOf fertig, dc)

Am Schluss dann noch die Rückrufmethode die den Aufruf abschließt und die Daten erhält aber dummerweise in einem anderen Thread aufgerufen wird. Also muss man noch den Dispatcher bemühen.

Public Async Function fertig(ByVal result As IAsyncResult) As Task
        Dim data = dc.EndExecute(Of ServiceReference1.MitarbeiterItem)(result).ToList

        Await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, Sub()
                                                                     listbox1.ItemsSource = data
                                                                 End Sub)
 End Function
Kommentare sind geschlossen