Upload
cwen
View
45
Download
0
Tags:
Embed Size (px)
DESCRIPTION
Michaël Hompus Sander Bosman. Extending SharePoint Online met Windows 8 apps . Voorstellen. Michaël Hompus Principal developer [email protected] @eNeRGy164. Sander Bosman Senior developer [email protected] @ Sander_B. Voorstellen. Onderwijs. Zorg. Goede doelen. - PowerPoint PPT Presentation
Citation preview
Extending SharePoint Online met Windows 8 apps
Michaël HompusSander Bosman
VoorstellenMichaël HompusPrincipal [email protected]@eNeRGy164
Sander BosmanSenior [email protected]@Sander_B
Voorstellen
Innovatieteam
Onderwijs Zorg Goede doelen
Agenda• Voorstellen• Doelstelling• Authenticatie• SharePoint interfaces• Windows 8 and beyond…
Doelstelling• Als bedrijf willen we een centrale plek
om informatie over onze projecten en referenties gemakkelijk bij te kunnen houden• Als een medewerker van het bedrijf wil
ik een Windows 8 app zodat ik onderweg informatie over projecten en referenties kan opzoeken ook als ik geen dataverbinding heb
DEMO
Authenticatie
Authenticatie• Hoe krijg je bedrijfsaccounts in
SharePoint Online?• Hoe kan je authenticeren tegen
SharePoint Online vanuit een Windows 8 app?• Hoe sla je credentials op in een Windows
8 app
AD accounts in SharePoint Online
AD accounts in SharePoint OnlineWens: Medewerker moet met het bedrijfs-account (AD) kunnen inloggen op de app.
Oplossing: DirSyncVerschillende opties:• DirSync AD Accounts• DirSync AD Accounts met Wachtwoord
Same Sign-On
• DirSync AD Accounts i.c.m. ADFSSingle Sign-On
AD accounts in SharePoint Online
AD accounts in SharePoint Online
Authenticatie
Authenticatie - Architectuur
https://login.microsoftonline.com/extSTS.srf
https://<tenant>.sharepoint.com/_forms/default.aspx?wa=wsignin1.0
https://<tenant>.sharepoint.com/_vti_bin/ListData.svc
Authenticatie - Meer informatie• How to do active authentication to
Office 365 and SharePoint Online - Wictor Wilénhttp://www.wictorwilen.se/Post/How-to-do-active-authentication-to-Office-365-and-SharePoint-Online.aspx
DEMO
Authenticatie - Architectuur
https://login.microsoftonline.com/extSTS.srf
Authenticatie – Token Request
https://<tenant>.sharepoint.com
Authenticatie – Token Response
Authenticatie - Architectuur
https://login.microsoftonline.com/extSTS.srf
https://<tenant>.sharepoint.com/_forms/default.aspx?wa=wsignin1.0
Authenticatie – Login Request
Authenticatie – Login Response
Authenticatie - Architectuur
https://login.microsoftonline.com/extSTS.srf
https://<tenant>.sharepoint.com/_forms/default.aspx?wa=wsignin1.0
https://<tenant>.sharepoint.com/_vti_bin/ListData.svc
Authenticatie – Data Request
Authenticatie – Data Response
Credentials opslaan in de app
Password Vault - Store
var passwordVault = new PasswordVault();var passwordCredentials = passwordVault.RetrieveAll(); foreach (var passwordCredential in passwordCredentials){ try { if (passwordCredential.Resource == WinvisionDosyeAccount && passwordCredential.UserName == credentials.Username) {
passwordVault.Remove(passwordCredential); } } catch (COMException) { // No password found }} var credential = new PasswordCredential(WinvisionDosyeAccount, credentials.Username, credentials.Password); passwordVault.Add(credential);
Password Vault - Retrievevar passwordVault = new PasswordVault();var credentials = passwordVault.RetrieveAll();
foreach (var passwordCredential in credentials){ try { if (passwordCredential.Resource != WinvisionDosyeAccount) {
continue; } passwordCredential.RetrievePassword(); return new Credentials
{ Username = passwordCredential.UserName, Password = passwordCredential.Password,
}; } catch (COMException) { // No password found }}
Credential Manager
SharePoint interfaces
SharePoint interfaces• Welke SharePoint interfaces kan ik
gebruiken• Hoe kan ik lijsten, managed metadata
en bestanden opvragen• Welke voor- en nadelen hebben de
verschillende interfaces
SharePoint interfaces• Server object model• Silverlight client object model• JavaScript client object model• .NET Framework client object model• Mobile client object model• REST/OData endpoints• Web Services• Remote Procedure Call
SharePoint lijsten
SharePoint lijstenWCF Data Services• LINQ queries tegen databron• …/_vti_bin/listdata.svc• WCF Data Services Tools for Windows
Store Appshttp://www.microsoft.com/en-us/download/details.aspx?id=30714
Standaard niet awaitable• Async extension methods for
DataServiceContexthttps://gist.github.com/Phanatic/3427256
var context = new InnovatieDataContext(new Uri(string.Format("{0}/_vti_bin/listdata.svc", this.settingsService.GetSharePointUri())));context.SendingRequest += this.ContextOnSendingRequest;
var result = new List<Customer>();
var query = (DataServiceQuery<Customer>)context.Klanten.Select(c => new Customer { Id = c.Id, Name = c.Titel, AccountManagerId = c.AccountManagerId, ServiceManagerId = c.ServiceManagerId, VerticalId = c.VerticalId, LogoPath = c.Logo, Telephone = c.Telefoonnummer, Website = c.Website, Email = c.Email });
var customers = await query.ExecuteAsync();
result.AddRange(customers);
SharePoint lijstenCookie moet meegegeven worden
private void ContextOnSendingRequest(object sender, SendingRequestEventArgs sendingRequestEventArgs){
sendingRequestEventArgs.RequestHeaders["Cookie"] = this.settingsService.GetCookieContainer();}
SharePoint lijstenIssue:• Veldnamen in queries zijn taalafhankelijk• Na enige inactiviteit regeert SharePoint
Online op het eerste request altijd in het Engels!• DataServiceClientException
Managed metadata
Managed metadataKan je niet ophalen met listdata.svc
REST API• …/_api/• HttpClient
/_api/web/lists/getbytitle('Referenties')/Items?$select=Id,Microsoft_x0020_technieken
Managed metadata• Cookie moet meegegeven worden• JSON.NET om resultaten te verwerken
var cookieContainer = new CookieContainer();cookieContainer.SetCookies(new Uri(this.settingsService.GetSharePointUri()), cookieHeader);
var client = new HttpClient(new HttpClientHandler { CookieContainer = cookieContainer });client.DefaultRequestHeaders.Add("Cookie", cookieHeader);client.DefaultRequestHeaders.Accept.ParseAdd("application/json;odata=verbose");
var response = await client.GetStringAsync( string.Format("{0}/_api/web/lists/getbytitle('Referenties')/Items? $select=Id,Microsoft_x0020_technieken", this.settingsService.GetSharePointUri()));
var json = JObject.Parse(response);
var managedMetadata = from i in json["d"]["results"].Children().Where(g => g["Microsoft_x0020_technieken"]["results"].Any()) select new { Id = (int)i["Id"], Labels = i["Microsoft_x0020_technieken"]["results"].Values<string>("Label").ToArray() };
var microsoftTechnologies = managedMetadata.ToDictionary(m => m.Id, m => m.Labels);
Bestanden
Bestanden
Bestanden
Attachments = c.Bijlagen.Select(b => new Attachment { Title = b.Name, SharePointPath = string.Format("{0}/Lists/{1}/Attachments/{2}/{3}",
this.settingsService.GetSharePointUri(), b.EntitySet, b.ItemId, b.Name)
}),
Bestanden
var cookieContainer = new CookieContainer();cookieContainer.SetCookies(new Uri(this.settingsService.GetSharePointUri()), cookieHeader);
var buffer = new byte[] { }
using (var client = new HttpClient(new HttpClientHandler { CookieContainer = cookieContainer })){ buffer = await client.GetByteArrayAsync(uri);}
var images = await ApplicationData.Current.LocalFolder.CreateFolderAsync(folder, CreationCollisionOption.OpenIfExists);var file = await images.CreateFileAsync(cacheKey, CreationCollisionOption.ReplaceExisting);
await FileIO.WriteBytesAsync(file, buffer);
“run-with-cookies”
UitdagingenAlles in Windows 8 Async• Wat doe je als je nog geen cookie hebt• Wat doe je als je cookie is verlopen• Met meerdere requests tegelijk• Met meerdere technieken
− DataContext− HttpClient
• En met mogelijke fouten die optreden
“run-with-cookies”Start
Lees cookie uit opgeslagen settings
Is er een cookie?
Remote Request
Is er een fout opgestreden?
Done
Wordt er al een cookie opgehaald
J a
J a
Nee
Haal cookie op en sla op in settingsNee Nee
Is het de Office 365 bug?
Is het cookie verlopen?
J a
J a Nee
J a
Nee
Exception
Windows 8 and beyond
Andere devicesUniversal apps• Windows 8.1 update• Windows Phone 8.1• Xbox One
DEMO
Windows 8.1 app
Make universal
Windows Phone 8.1
Andere devicesXamarin• Android• iOS
DEMO
Android
Vragen?
THANK YOU