140 likes | 262 Views
Consuming SharePoint data using WCF Data Services. Paul Schaeflein. Steve Smith, MVP, MCSE, MTV, certified loony Company name Company web site E-mail address Short bio optional, such as books/articles written, hobbies, details that will enhance your standing with the audience.
E N D
Consuming SharePoint data using WCF Data Services Paul Schaeflein
Steve Smith, MVP, MCSE, MTV, certified loony • Company name • Company web site • E-mail address • Short bio optional, such as books/articles written, hobbies, details that will enhance your standing with the audience
SharePoint API • https://[site]/_api • Used by both CSOM and REST • Returns single objects (Web, List) and collections (ListItems)
Service Metadata • In OData, this is known as the CSDL(Common Schema Definition Language) • Accessed via a GET request to <serviceRoot>/$metadata • SharePoint 2013 did not support until April 2013 CU
WCF Data Services • ...enables the creation and consumption of OData services for the web (formerly known as ADO.NET Data Services). • Patterns & Practices has SP2010 write-up on REST. WCF portion still relevant • Available as NuGet package • Be sure to get “client” package
Using WCF Data Services • Add Service Reference • Create proxy classes for context and data • ListData context • List items • ApiData context • Everything else
Using WCF Data Services • Data Classes • SharePoint objects as documented in CSOM <EntityContainerName="ApiData"> <EntitySetName="Lists"EntityType="SP.List" /> <EntitySetName="Sites"EntityType="SP.Site" /> <EntitySetName="Webs"EntityType="SP.Web" /> <EntitySetName="Groups"EntityType="SP.Group" /> <EntitySetName="ListItems"EntityType="SP.ListItem" /> <FunctionImportName="contextinfo"IsComposable="true"ReturnType="SP.ContextWebInformation"/> <FunctionImportName="lists"IsComposable="true"EntitySet="Lists"ReturnType="Collection(SP.List)"/> <FunctionImportName="site"IsComposable="true"EntitySet="Sites"ReturnType="SP.Site"/> <FunctionImportName="web"IsComposable="true"EntitySet="Webs"ReturnType="SP.Web"/>
Using WCF Data Services • Data Classes • List data modeled after content type <EntityContainerName="ListData"> <EntitySetName="UserInfoItems"EntityType="SP.Data.UserInfoItem" /> <EntitySetName="ContosoProductsListItems"EntityType="SP.Data.ContosoProductsListItem" /> <EntitySetName="TaxonomyHiddenListListItems"EntityType="SP.Data.TaxonomyHiddenListListItem" /> <EntitySetName="DocumentsItems"EntityType="SP.Data.DocumentsItem" /> <EntitySetName="PublishingImagesItems"EntityType="SP.Data.PublishingImagesItem" /> <EntitySetName="PagesItems"EntityType="SP.Data.PagesItem" /> <EntitySetName="SiteCollectionDocumentsItems"EntityType="SP.Data.SiteCollectionDocumentsItem"/>
Reading SharePoint data using WCF Contoso Products MVC
DataService Context operations • REST methods invoke via Execute method on the context objecthttp://<sitecollection>/<site>/_api/web/lists/getById(id)
DataService Context operations • FunctionImport element <FunctionImportName="GetById"ReturnType="SP.List"IsComposable="true"IsBindable="true"EntitySet="Lists"> <ParameterName="this"Type="Collection(SP.List)" /> <ParameterName="id"Type="Edm.Guid"Nullable="false" /> </FunctionImport> http://<...>/_api/Web/Lists(guid'deef02d2-444b-...1cbb2777')
Updating data • Requires POST tunneling • Sending PUT or MERGE in a POST operation • HTTP Header X-HTTP-Method: PUT • Modify pipeline to send only changed data • Need to include the digest
References • http://www.schaeflein.net/blog/presentations • HTML version of this talk • WCF Data Services • Using the REST Interface (p&p)