sharepoint, linq, odata
DESCRIPTION
Презентация с семинара "LINQ'остроительство и SharePoint"TRANSCRIPT
SharePoint, LINQ иOpen Data Protocol
Vitaly BaumSenior SharePoint Developer @ Conteq Активный участник групп разработчиков в Санкт-Петербурге и Москве, подкастер и блоггерhttp://butaji.ru
План выступления
LINQ to SharePoint 2010Open Data Protocol
LINQ to SharePoint
Преимущества LINQ
Строгая типизацияЗапросы к реляционным данным в строго-типизированной формеКомпилятор проверит ошибки в запросахIntelliSense
Унифицированный путь получения данных из любого источника
LINQ to SharePoint
SPMetalГенерирует DataContextSPMetal /web:http://ContosoServer/Marketing /code:MarketingSite.cs
LINQ to SharePoint
НедостаткиПреобразуется в CAMLНе все операторы реализованыДвухэтапные запросыАггрегирующие запросыSPSiteDataQuery
Mapping
internal partial class OrganisationSiteDataContext : Microsoft.SharePoint.Linq.DataContext{}
[ContentType(Name = "Employee")]public partial class Employee{
[Column(Name="ID", IsId=true, ReadOnly=true, FieldType="Counter")] public int Id {get; set;}
}
ICostumMapping
public partial class Project : ICustomMapping{
[CustomMapping(Columns = new String[] { «Due_x0020_Date», «IsCancelled» })] public void MapFrom(object listItem) {
this.DueDate = ((SPListItem)listItem)[“Due_x0020_Date”]; this.IsCancelled = ((SPListItem)listItem)[“IsCancelled”];
} public void MapTo(object listItem) {
((SPListItem)listItem)[“Due_x0020_Date”] = this.DueDate; ((SPListItem)listItem)[“IsCancelled”] = this.IsCancelled;
} public void Resolve(RefreshMode mode, object originalListItem, object databaseObject){ }
}
SPMetal
Imtech SPMetal Definition Extension
LINQ to SharePoint
Демо
Open Data Protocol
Открытый доступ к даннымОткрытые форматы данныхУнифицированная форма запросов
Open Data Protocol
Открытый доступ к даннымHTTP
Открытые форматы данныхAtomPub, JSON
Унифицированная форма запросовLINQ
Open Data Protocol
Уровень абстракцииШирокого доступаУнифицированного доступаПростого доступа
Open Data Protocol
ПотребителиБраузерыOData ExplorerExcel 2010 (PowerPivot)LinQPadVisual Studio…
Open Data Protocol
http://services.odata.org/OData/OData.svc/<service xml:base="http://services.odata.org/OData/OData.svc/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" xmlns="http://www.w3.org/2007/app"> <workspace> <atom:title>Default</atom:title> <collection href="Products"> <atom:title>Products</atom:title> </collection> <collection href="Categories"> <atom:title>Categories</atom:title> </collection> <collection href="Suppliers"> <atom:title>Suppliers</atom:title> </collection> </workspace> </service>
Open Data Protocol
http://services.odata.org/OData/OData.svc/Products<?xml version="1.0" encoding="windows-1251" standalone="yes"?><feed xml:base="http://services.odata.org/OData/OData.svc/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom"> <title type="text">Products</title> <id>http://services.odata.org/OData/OData.svc/Products</id> <updated>2010-07-01T20:01:57Z</updated> <link rel="self" title="Products" href="Products" /> <entry> <id>http://services.odata.org/OData/OData.svc/Products(0)</id> <title type="text">Bread</title> <summary type="text">Whole grain bread</summary> <updated>2010-07-01T20:01:57Z</updated> <author> <name /> </author>…
Open Data Protocol
http://services.odata.org/OData/OData.svc/Products(4)<?xml version="1.0" encoding="windows-1251" standalone="yes"?><entry xml:base="http://services.odata.org/OData/OData.svc/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom"> <id>http://services.odata.org/OData/OData.svc/Products(4)</id> <title type="text">Fruit Punch</title> <summary type="text">Mango flavor, 8.3 Ounce Cans (Pack of 24)</summary> <updated>2010-07-01T20:03:37Z</updated> <author> <name /> </author> <link rel="edit" title="Product" href="Products(4)" /> <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Category" type="application/atom+xml;type=entry" title="Category" href="Products(4)/Category" /> <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Supplier" type="application/atom+xml;type=entry" title="Supplier" href="Products(4)/Supplier" /> <category term="ODataDemo.Product" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /> <content type="application/xml"> <m:properties> <d:ID m:type="Edm.Int32">4</d:ID> <d:ReleaseDate m:type="Edm.DateTime">2003-01-05T00:00:00</d:ReleaseDate> <d:DiscontinuedDate m:type="Edm.DateTime" m:null="true" /> <d:Rating m:type="Edm.Int32">3</d:Rating> <d:Price m:type="Edm.Decimal">22.99</d:Price> </m:properties> </content></entry>
Open Data Protocol
Типы данныхNullBinaryBooleanByteDateTimeDecimalDouble
SingleGuidInt16, Int32, Int64SbyteStringTimeDateTimeOffset
Open Data Protocol
http://localhost:8080/owind.svc/Categories(2)/Products<feed xml:base="http://localhost:8080/owind.svc/" ...> ... <entry> ... <link rel="edit" title="Product" href="Products(3)" /> <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Category" type="application/atom+xml;type=entry" title="Category" href="Products(3)/Category" /> <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Order_Details" type="application/atom+xml;type=feed" title="Order_Details" href="Products(3)/Order_Details" /> <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Supplier" type="application/atom+xml;type=entry" title="Supplier" href="Products(3)/Supplier" /> ... <content type="application/xml"> <m:properties> <d:ProductID m:type="Edm.Int32">3</d:ProductID> <d:ProductName>Aniseed Syrup</d:ProductName> ... </m:properties> </content> </entry> ...</feed>
Open Data Protocol
http://localhost:8080/owind.svc/Categories(2)/Products<feed xml:base="http://localhost:8080/owind.svc/" ...> ... <entry> ... <link rel="edit" title="Product" href="Products(3)" /> <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Category" type="application/atom+xml;type=entry" title="Category" href="Products(3)/Category" /> <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Order_Details" type="application/atom+xml;type=feed" title="Order_Details" href="Products(3)/Order_Details" /> <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Supplier" type="application/atom+xml;type=entry" title="Supplier" href="Products(3)/Supplier" /> ... <content type="application/xml"> <m:properties> <d:ProductID m:type="Edm.Int32">3</d:ProductID> <d:ProductName>Aniseed Syrup</d:ProductName> ... </m:properties> </content> </entry> ...</feed>
Open Data Protocol
http://localhost:8080/owind.svc/Categories(2)/Description<Description xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices">
Sweet and savory sauces, relishes, spreads, and seasonings</Description>
Open Data Protocol
http://localhost:8080/owind.svc/Categories(2)/Description/$value
Sweet and savory sauces, relishes, spreads, and seasonings
Open Data Protocol
http://localhost:8080/owind.svc/Categories/$count
8
Open Data Protocol
http://localhost:53211/owind.svc/Categories(4)/$links/Products<links xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices"> <uri>http://localhost:53211/owind.svc/Products(11)</uri> <uri>http://localhost:53211/owind.svc/Products(12)</uri> <uri>http://localhost:53211/owind.svc/Products(31)</uri> <uri>http://localhost:53211/owind.svc/Products(32)</uri> <uri>http://localhost:53211/owind.svc/Products(33)</uri> <uri>http://localhost:53211/owind.svc/Products(59)</uri> <uri>http://localhost:53211/owind.svc/Products(60)</uri> <uri>http://localhost:53211/owind.svc/Products(69)</uri> <uri>http://localhost:53211/owind.svc/Products(71)</uri> <uri>http://localhost:53211/owind.svc/Products(72)</uri> </links>
Open Data Protocol
http://localhost:8080/owind.svc/Categories?$orderby=CategoryName desc&$top=4
http://localhost:53211/owind.svc/Categories?$filter=(CategoryID add 4) eq 8
http://localhost:53211/owind.svc/Categories?$filter=startswith(CategoryName, 'Sea')
Open Data Protocol
<html><head> <title>OData JSON Test</title> <script src="/Scripts/jquery-1.3.2.js" type="text/javascript"></script></head><body> <script type="text/javascript"> $(document).ready(function () { $("#foo").text("fetching..."); var url = "http://localhost:8080/owind.svc/Categories/"; $.getJSON(url, function (result) { $("#foo").text(result.d[0].CategoryName); }); }); </script> <p id="foo">loading page...</p></body></html>
Open Data Protocol
Объявлять функцииВыдавать данные в JSONНаслаждаться жизнью
Open Data Protocol
ПоставщикиSharePoint 2010IBM WebSphereSQL AzureAzure Table StorageSQL Reporting Services…
Open Data Protocol
ПоставщикиFacebookNetflixPluralsightStack OverflowCodename Dallas…
Browser, Visual Studio, Python
Демо
Готовим OData
Готовим OData
Парочка IQueryable<T>ADO.NET Data Services v1.5Немного желания
Готовим ODataEntity Framework, LINQ to SQL
public class ProductService : DataService<ProductEntities>{
public static void InitializeService(DataServiceConfiguration config){ // Give readonly access to all of the entities config.SetEntitySetAccessRule("*", EntitySetRights.AllRead); // Pagesize will change the max number of rows returned config.SetEntitySetPageSize("*", 25);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;}
}
Готовим ODataReflection Provider
public class MyDataSource { public IQueryable<Product> Products { get {…} } public IQueryable<Categories> Categories { get {…} } }
public class MyDataSourceService : DataService<MyDataSource>{
…}
Готовим OData
Демо
OData в SharePoint
SharePoint OData
Client Application
Content databaseSharePoint Data
LINQ to SharePoint
ListData.svc
AtomJSON Post, Put, Get
Любая платформа .NET, Java,Flash, Silverlight
SharePoint
SharePoint OData
Операции и HTTP действияПолучение данных GETСоздание записи POSTИзменение записи PUT или MERGEУдаление записи DELETEИ всё это действует на ссылки
Все политики SharePoint работаютВалидация, Контроль доступа и т.д.
OData в SharePoint
Демо
Vitaly Baumhttp://[email protected]
Ресурсы
http://sharepoint.microsoft.com/http://odata.orghttp://msdn.microsoft.com/en-us/library/ff478141.aspxhttp://blogs.msdn.com/b/alexj/archive/2010/01/07/data-service-providers-getting-started.aspx