Tìm hiểu mô hình đối tượng phía Client trên SharePoint
2010
Tìm hiểu các cách thao tác dữ liệu SharePoint từ phía
client sử dụng thư viện được cung cấp bởi SharePoint
2010
Nắm bắt các thủ tục để thao tác dữ liệu SharePoint từ
phía Client
Tìm hiểu mô hình đối tượng phía Client trên SharePoint
2010
Tìm hiểu các cách thao tác dữ liệu SharePoint từ phía
client sử dụng thư viện được cung cấp bởi SharePoint
2010
Nắm bắt các thủ tục để thao tác dữ liệu SharePoint từ
phía Client
2. Hệ thống bài cũ
Tìm hiểu về Web Part trên SharePoint 2010
Các giải pháp phát triển Web Part sử dụng Visual Studio
2010
Web Par chuẩn
Web Part trực quan
Tìm hiểu các trang trên SharePoint
Tìm hiểu về Web Part trên SharePoint 2010
Các giải pháp phát triển Web Part sử dụng Visual Studio
2010
Web Par chuẩn
Web Part trực quan
Tìm hiểu các trang trên SharePoint
Thao tác dữ liệu SharePoint từ phía Client 2
3. Mục tiêu bài học
Tìm hiểu mô hình đối tượng phía Client trên SharePoint
2010
Tìm hiểu các cách thao tác dữ liệu SharePoint từ phía
client sử dụng thư viện được cung cấp bởi SharePoint
2010
Nắm bắt các thủ tục để thao tác dữ liệu SharePoint từ
phía Client
Tìm hiểu mô hình đối tượng phía Client trên SharePoint
2010
Tìm hiểu các cách thao tác dữ liệu SharePoint từ phía
client sử dụng thư viện được cung cấp bởi SharePoint
2010
Nắm bắt các thủ tục để thao tác dữ liệu SharePoint từ
phía Client
Thao tác dữ liệu SharePoint từ phía Client 3
4. Lý do cần đến mô hình đối tượng
phía Client
Mô hình đối tượng SharePoint (Server OM) đòi hỏi các
ứng dụng phải được triển khai trên môi trường cài đặt
SharePoint
Mô hình đối tượng Client (Client OM) cho phép ứng dụng
từ xa (không chạy trên môi trường cài đặt SharePoint)
có thể thao tác dữ liệu trên các đối tượng SharePoint.
Mô hình đối tượng SharePoint (Server OM) đòi hỏi các
ứng dụng phải được triển khai trên môi trường cài đặt
SharePoint
Mô hình đối tượng Client (Client OM) cho phép ứng dụng
từ xa (không chạy trên môi trường cài đặt SharePoint)
có thể thao tác dữ liệu trên các đối tượng SharePoint.
Thao tác dữ liệu SharePoint từ phía Client 4
5. Các loại ứng dụng Client hỗ trợ
Các loại hình ứng dụng Client có thể thao tác dữ liệu
SharePoint
Windows
Console
ASP.NET
Silverlight trên môi trường có trình duyệt
Silverlight ngoài môi trường trình duyệt
…
Các loại hình ứng dụng Client có thể thao tác dữ liệu
SharePoint
Windows
Console
ASP.NET
Silverlight trên môi trường có trình duyệt
Silverlight ngoài môi trường trình duyệt
…
Thao tác dữ liệu SharePoint từ phía Client 5
6. Mô hình đối tượng phía client
Client Object Model
NhNhấấtt quánquán HiHiệệuu ququảả
Thao tác dữ liệu SharePoint từ phía Client 6
ClientClient ApplicationApplication
NhNhấấtt quánquán HiHiệệuu ququảả
7. Mô hình đối tượng phía client
Client Object Model
Nhằm đơn giản hóa và dễ dàng hơn trong việc sử dụng
các giao diện lập trình ứng dụng (API) để thêm (Add),
đọc (Retrieve), cập nhật (Update), xóa (Delete) và quản
lý dữ liệu SharePoint.
Nhằm đơn giản hóa và dễ dàng hơn trong việc sử dụng
các giao diện lập trình ứng dụng (API) để thêm (Add),
đọc (Retrieve), cập nhật (Update), xóa (Delete) và quản
lý dữ liệu SharePoint.
Thao tác dữ liệu SharePoint từ phía Client 7
8. Mô hình đối tượng phía client
Client Object Model
SharePoint Client-Side API
.NET CLR:
Được sử dụng cho các ứng dụng phía client sử dụng .NET
framework (vd: Windows Form, WPF…)
Silverlight:
Được sử dụng cho các ứng dụng phía client sử dụng
Silverlight
JavaScript (ECMAScript):
Được sử dụng cho các ứng dụng web với JavaScript
SharePoint Client-Side API
.NET CLR:
Được sử dụng cho các ứng dụng phía client sử dụng .NET
framework (vd: Windows Form, WPF…)
Silverlight:
Được sử dụng cho các ứng dụng phía client sử dụng
Silverlight
JavaScript (ECMAScript):
Được sử dụng cho các ứng dụng web với JavaScript
Thao tác dữ liệu SharePoint từ phía Client 8
9. So sánh các API phía client
với phía Server
Server .NET Managed và
Silverlight
ECMAScript
Microsoft.SharePoint.
SPContext
Microsoft.SharePoint.Client
.ClientContext
SP.ClientContext
Microsoft.SharePoint.
SPSite
Microsoft.SharePoint.Client
.Site
SP.Site
Thao tác dữ liệu SharePoint từ phía Client 9
Microsoft.SharePoint.
SPSite
Microsoft.SharePoint.Client
.Site
Microsoft.SharePoint.
SPWeb
Microsoft.SharePoint.Client
.Web
SP.Web
Microsoft.SharePoint.
SPList
Microsoft.SharePoint.Client
.List
SP.List
Microsoft.SharePoint.
SPListItem
Microsoft.SharePoint.Client
.ListItem
SP.ListItem
10. Client OM: .NET CLR API
Cung cấp khả năng thao tác dữ liệu SharePoint từ xa
thông qua các ứng dụng nền Microsoft .NET
Thư viện lập trình (API): Thuộc thư mục 14ISAPI
Microsoft.SharePoint.Client.dll (281kb)
Microsoft.SharePoint.Client.Runtime.dll (145kb)
Thao tác dữ liệu SharePoint từ phía Client 10
11. Client OM: .NET CLR API
ClientContext
Là đối tượng khởi nguồn cho quá trình thao tác dữ liệu
SharePoint từ xa thông qua các ứng dụng .NET
Cần phải khởi tạo đối tượng này trước khi truy vấn, cập
nhật dữ liệu SharePoint
Thao tác dữ liệu SharePoint từ phía Client 11
string siteUrl = "http://sp2010";
using (ClientContext myContext = new ClientContext(siteUrl))
{
myContext.Load(myContext.Site);
myContext.ExecuteQuery();
Console.WriteLine(myContext.Site.Url);
}
12. ClientContext
ClientContext:
Được coi như đối tượng trung tâm để thao tác các đối
tượng SharePoint từ phía Client
ClientContext():
Phương thức khởi tạo cho một Web site hoặc Site
Collection nhất định.
ClientContext.Load()
Chỉ ra đối tượng sẽ được gọi bởi Client
ClientContext:
Được coi như đối tượng trung tâm để thao tác các đối
tượng SharePoint từ phía Client
ClientContext():
Phương thức khởi tạo cho một Web site hoặc Site
Collection nhất định.
ClientContext.Load()
Chỉ ra đối tượng sẽ được gọi bởi Client
Thao tác dữ liệu SharePoint từ phía Client 12
13. ClientContext
ClientContext.LoadQuery()
Chỉ ra câu truy vấn sẽ được gọi bởi Client
ClientContext.ExecuteQuery()
Thực hiện việc tải các đối tượng trả về từ các yêu cầu
trong Load hoặc LoadQuery
ClientContext.Web.Update()
Thông báo cập nhật dữ liệu từ phía Client
ClientContext.LoadQuery()
Chỉ ra câu truy vấn sẽ được gọi bởi Client
ClientContext.ExecuteQuery()
Thực hiện việc tải các đối tượng trả về từ các yêu cầu
trong Load hoặc LoadQuery
ClientContext.Web.Update()
Thông báo cập nhật dữ liệu từ phía Client
Thao tác dữ liệu SharePoint từ phía Client 13
14. Cú pháp Query và cú pháp Method
.NET API có thể sử dụng 2 loại cú pháp (Query và
Method) để tải một đối tượng độc lập, các thuộc tính của
đối tượng hoặc một tập các enumerable object.
Thao tác dữ liệu SharePoint từ phía Client 14
15. Cú pháp Query và cú pháp Method
Cú pháp Query
Chỉ sử dụng trong
phương thức LoadQuery
Được sử dụng thông qua
hai bước
Khai báo biểu thức truy vấn
Nhận kết quả truy vấn
Cú pháp Method
Có thể được sử dụng ở cả
hai phương thức Load và
LoadQuery
Sử dụng biểu thức
Lambda để truy vấn
Chỉ sử dụng trong
phương thức LoadQuery
Được sử dụng thông qua
hai bước
Khai báo biểu thức truy vấn
Nhận kết quả truy vấn
Có thể được sử dụng ở cả
hai phương thức Load và
LoadQuery
Sử dụng biểu thức
Lambda để truy vấn
Thao tác dữ liệu SharePoint từ phía Client 15
16. Cú pháp Query
//Khởi tạo câu truy vấn LINQ
var query = from list
in clientContext.Web.Lists
where list.Title != null
select list;
//Truyền truy vấn vào phướng thức LoadQuery
var result = clientContext.LoadQuery(query);
//Thực hiện truy vấn
clientContext.ExecuteQuery();
//Khởi tạo câu truy vấn LINQ
var query = from list
in clientContext.Web.Lists
where list.Title != null
select list;
//Truyền truy vấn vào phướng thức LoadQuery
var result = clientContext.LoadQuery(query);
//Thực hiện truy vấn
clientContext.ExecuteQuery();
Thao tác dữ liệu SharePoint từ phía Client 16
17. Cú pháp Method
//Thực hiện tải truy vấn trực tiếp theo kiểu Lambda
clientContext.Load(clientContext.Web,
website => website.Lists
.Include(list => list.Title)
.Where(list => list.Title != null));
//Thực thi ngay truy vấn này
clientContext.ExecuteQuery();
//Thực hiện tải truy vấn trực tiếp theo kiểu Lambda
clientContext.Load(clientContext.Web,
website => website.Lists
.Include(list => list.Title)
.Where(list => list.Title != null));
//Thực thi ngay truy vấn này
clientContext.ExecuteQuery();
Thao tác dữ liệu SharePoint từ phía Client 17
18. Xác thực trong .NET Client OM
Mặc định .NET Client OM sử dụng cơ chế xác thực
Windows (Windows credentials) DefaultCredentials
Do đó các ứng dụng Client sử dụng .NET Client OM cần
phải được thực thi trên máy có cùng Domain với máy
chủ SharePoint.
Thao tác dữ liệu SharePoint từ phía Client 18
Tham khảo: http://msdn.microsoft.com/en-us/library/ee535729.aspx
19. Xác thực trong .NET Client OM
Có thể thay đổi chế độ xác thực trên đối tượng
ClientContext khi SharePoint được cấu hình cơ chế xác
thực Form Authentication.
//chọn kiểu xác thực FormAuthentication cho ClientContext
clientContext.AuthenticationMode
= ClientAuthenticationMode.FormsAuthentication;
Thao tác dữ liệu SharePoint từ phía Client 19
//chọn kiểu xác thực FormAuthentication cho ClientContext
clientContext.AuthenticationMode
= ClientAuthenticationMode.FormsAuthentication;
//Truyền UserName và Password trong kiểu xác thực Form
FormsAuthenticationLoginInfo formsAuthInfo
= new FormsAuthenticationLoginInfo( "MyUser",
"MyPassword");
clientContext.FormsAuthenticationLoginInfo = formsAuthInfo;
20. Demo
Demo:
Ứng dụng Console sử dụng .NET Client Object Model để
thao tác dữ liệu SharePoint
Thao tác dữ liệu SharePoint từ phía Client 20
21. Client OM: Silverlight API
Silverlight Client OM cho phép ứng dụng Silverlight trong
các trang ASPX hoặc Web Part thao tác với dữ liệu
SharePoint
Thư mục chứa thư viện lập trình SharePoint phía client
cho các ứng dụng Silverlight
C:Program FilesCommon FilesMicrosoft SharedWeb
Server Extensions 14TEMPLATELAYOUTSClientBin
Microsoft.SharePoint.Client.Silverlight
– 262KB
Microsoft.SharePoint.Client.Silverlight.Runtime
– 138KB
Silverlight Client OM cho phép ứng dụng Silverlight trong
các trang ASPX hoặc Web Part thao tác với dữ liệu
SharePoint
Thư mục chứa thư viện lập trình SharePoint phía client
cho các ứng dụng Silverlight
C:Program FilesCommon FilesMicrosoft SharedWeb
Server Extensions 14TEMPLATELAYOUTSClientBin
Microsoft.SharePoint.Client.Silverlight
– 262KB
Microsoft.SharePoint.Client.Silverlight.Runtime
– 138KB
Thao tác dữ liệu SharePoint từ phía Client 21
22. Demo
Demo:
Viết một Silverlight
Nhúng Silverlight vào Silverlight Web Part trên SharePoint
để thao tác với dữ liệu SharePoint
Thao tác dữ liệu SharePoint từ phía Client 22
23. Client OM: JavaScript API
JavaScript OM cho phép làm việc với các đối tượng trên
SharePoint mà không cần phải triển khai code lên Server.
Chỉ làm việc với các đối tượng trong ngữ cảnh
SharePoint hiện thời (current context): các đối tượng
trên site SharePoint mà JavaScript được triển khai.
Thư viện JavaScript API có thể dễ dàng được tham chiếu
trong các trang SharePoint thông qua
_layouts/sp.js
Sử dụng thẻ <SharePoint:ScriptLink>
JavaScript OM cho phép làm việc với các đối tượng trên
SharePoint mà không cần phải triển khai code lên Server.
Chỉ làm việc với các đối tượng trong ngữ cảnh
SharePoint hiện thời (current context): các đối tượng
trên site SharePoint mà JavaScript được triển khai.
Thư viện JavaScript API có thể dễ dàng được tham chiếu
trong các trang SharePoint thông qua
_layouts/sp.js
Sử dụng thẻ <SharePoint:ScriptLink>
Thao tác dữ liệu SharePoint từ phía Client 23
24. Client OM: JavaScript API
Các thư viện lập trình SharePoint phía client, JavaScript
API nằm tại thư mục
C:Program FilesCommon FilesMicrosoft SharedWeb
Server Extensions14TEMPLATELAYOUTS
SP.js (SP.debug.js):
– 380KB (559KB)
SP.Core.js (SP.Core.debug.js):
– 13KB (20KB)
SP.Runtime.js (SP.Runtime.debug.js):
– 68KB (108KB)
Các thư viện lập trình SharePoint phía client, JavaScript
API nằm tại thư mục
C:Program FilesCommon FilesMicrosoft SharedWeb
Server Extensions14TEMPLATELAYOUTS
SP.js (SP.debug.js):
– 380KB (559KB)
SP.Core.js (SP.Core.debug.js):
– 13KB (20KB)
SP.Runtime.js (SP.Runtime.debug.js):
– 68KB (108KB)
Thao tác dữ liệu SharePoint từ phía Client 24
25. Thủ tục nhận dữ liệu từ phía Client
Khởi tạo đối tượng ClientContext
Sử dụng mô hình đối tượng để chỉ ra đối tượng hoặc dữ
liệu cần thao tác
//Truyền vào tham số URL của site để khởi tạo
var clientContext = new SP.ClientContext(siteUrl);
Khởi tạo đối tượng ClientContext
Sử dụng mô hình đối tượng để chỉ ra đối tượng hoặc dữ
liệu cần thao tác
Thao tác dữ liệu SharePoint từ phía Client 25
//Lấy ra đối tượng web của site
var oWebsite = clientContext.get_web();
//Lấy ra tất cả các lists của web đó
this.collList = oWebsite.get_lists();
26. Thủ tục nhận dữ liệu từ phía Client
Tải tại chỗ sử dụng Load() để trả về đối tượng, tập đối
tượng hay dữ liệu
Tải qua truy vấn sử dụng LoadQuery() để trả về một
enumerable collection của các đối tượng
this.collList = oWebsite.get_lists();
//Thực hiện tải lists về
clientContext.load(collList);
Tải tại chỗ sử dụng Load() để trả về đối tượng, tập đối
tượng hay dữ liệu
Tải qua truy vấn sử dụng LoadQuery() để trả về một
enumerable collection của các đối tượng
Thao tác dữ liệu SharePoint từ phía Client 26
var collList = oWebsite.get_lists();
//Thực hiện tải lists về trong đó có lọc thuộc tính lấy về
this.listInfoCollection =
clientContext.loadQuery(collList,
'Include(Title, Id)');
27. Thủ tục nhận dữ liệu từ phía Client
Thực thi truy vấn bằng việc gọi phương thức
ExecuteQuery: trong .NET API hay Silverlight API
Thực thi truy vấn bằng việc gọi phương thức
ExecuteQueryAsync: trong JavaScrip API hoặc Silverlight
API
clientContext.Load(oWebsite);
//Thực thi truy vấn
clientContext.ExecuteQuery();
Thực thi truy vấn bằng việc gọi phương thức
ExecuteQuery: trong .NET API hay Silverlight API
Thực thi truy vấn bằng việc gọi phương thức
ExecuteQueryAsync: trong JavaScrip API hoặc Silverlight
API
Thao tác dữ liệu SharePoint từ phía Client 27
clientContext.executeQueryAsync(
Function.createDelegate(this, this.onQuerySucceeded),
Function.createDelegate(this, this.onQueryFailed)); }
function onQuerySucceeded(sender, args) {…}
function onQueryFailed(sender, args) {…}
28. Nhận các đối tượng từ phía Client
JavaScript API
function retrieveWebSite() {
var clientContext
= new SP.ClientContext('/sites/MySiteCollection');
var oWebsite = clientContext.get_web();
var collList = oWebsite.get_lists();
this.oList = collList.getByTitle('Announcements');
clientContext.load(oList);
clientContext.executeQueryAsync(
Function.createDelegate(this, this.onQuerySucceeded),
Function.createDelegate(this, this.onQueryFailed));
}
Thao tác dữ liệu SharePoint từ phía Client 28
function retrieveWebSite() {
var clientContext
= new SP.ClientContext('/sites/MySiteCollection');
var oWebsite = clientContext.get_web();
var collList = oWebsite.get_lists();
this.oList = collList.getByTitle('Announcements');
clientContext.load(oList);
clientContext.executeQueryAsync(
Function.createDelegate(this, this.onQuerySucceeded),
Function.createDelegate(this, this.onQueryFailed));
}
29. Nhận các đối tượng từ phía Client
.NET API
ClientContext clientContext
= new ClientContext("http://MyServer/");
Web oWebsite = clientContext.Web;
ListCollection collList = oWebsite.Lists;
List oList = collList.GetByTitle("Announcements");
clientContext.Load(oList);
clientContext.ExecuteQuery();
Console.WriteLine("Title: {0} Created: {1}",
oList.Title, oList.Created);
Thao tác dữ liệu SharePoint từ phía Client 29
ClientContext clientContext
= new ClientContext("http://MyServer/");
Web oWebsite = clientContext.Web;
ListCollection collList = oWebsite.Lists;
List oList = collList.GetByTitle("Announcements");
clientContext.Load(oList);
clientContext.ExecuteQuery();
Console.WriteLine("Title: {0} Created: {1}",
oList.Title, oList.Created);
30. Chuỗi truy vấn trong JavaScript OM
JavaScript Client OM không hỗ trợ truy vấn LINQ
JavaScript sử dụng biểu thức chuỗi (string expression)
để truy vấn
Cú pháp đối với một list:
Cú pháp đối với list collection:
clientContext.load(oList, 'Title' ,'Id');
JavaScript Client OM không hỗ trợ truy vấn LINQ
JavaScript sử dụng biểu thức chuỗi (string expression)
để truy vấn
Cú pháp đối với một list:
Cú pháp đối với list collection:
Thao tác dữ liệu SharePoint từ phía Client 30
myListArray = clientContext.loadQuery(collList,
'Include(Title,Fields.Include(Title,Description))');
Tham khảo: http://msdn.microsoft.com/en-us/library/ee539350.aspx
31. Cập nhật đối tượng
Để cập nhận đối tượng sử dụng Client OM, gọi phương
thức Update cho cả .NET và JavaScript OM.
.NET Client OM
JavaScript Client OM
List oList = collList.GetByTitle("My List");
oList.Description = "Changed description...";
oList.Update();
Để cập nhận đối tượng sử dụng Client OM, gọi phương
thức Update cho cả .NET và JavaScript OM.
.NET Client OM
JavaScript Client OM
Thao tác dữ liệu SharePoint từ phía Client 31
Tham khảo: http://msdn.microsoft.com/en-us/library/ee539350.aspx
List oList = collList.GetByTitle("My List");
oList.Description = "Changed description...";
oList.Update();
this.oList = collList.getByTitle('My List');
oList.set_title('Changed description...');
oList.update();
32. Thủ tục nhận một List Items
Để nhận về danh sách các Item trong một List, thông
thường chúng ta sử dụng CAML để chỉ ra các Item nào
sẽ nằm trong giá trị trả về
Việc lấy về danh sách các Item trong list được thực hiện
thông qua hai bước
Khi báo truy vấn CAML
Gửi truy vấn này vào phương thức GetItems
Để nhận về danh sách các Item trong một List, thông
thường chúng ta sử dụng CAML để chỉ ra các Item nào
sẽ nằm trong giá trị trả về
Việc lấy về danh sách các Item trong list được thực hiện
thông qua hai bước
Khi báo truy vấn CAML
Gửi truy vấn này vào phương thức GetItems
Thao tác dữ liệu SharePoint từ phía Client 32
Truy vấn CAML: http://msdn.microsoft.com/en-us/library/ms462365.aspx
33. VD: Thủ tục nhận một List Item
.NET Client OM
JavaScript Client OM
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = "<View><Query><Where><Leq>"
+ "<FieldRef Name='ID'/><Value Type='Number'>100</Value>"
+ "</Leq></Where></Query><RowLimit>50</RowLimit></View>";
ListItemCollection collListItem = oList.GetItems(camlQuery);
.NET Client OM
JavaScript Client OM
Thao tác dữ liệu SharePoint từ phía Client 33
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml('<View><Query><Where><Leq>'
+ '<FieldRef Name='ID'/><Value Type='Number'>100</Value>'
+ '</Leq></Where></Query><RowLimit>50</RowLimit></View>');
this.collListItem = oList.getItems(camlQuery);
35. Liên kết thực hành
Công việc thông thường
How to: Work with Websites
How to: Retrieve Lists
How to: Create, Update, and Delete Lists
How to: Retrieve List Items
How to: Create, Update, and Delete List Items
How to: Work with Users and Groups
How to: Work with Roles
How to: Break Role Assignment Inheritance
How to: Work with User Custom Actions
How to: Work with Web Parts on a Page
Công việc nâng cao
How to: Use Conditional Scope
How to: Use Exception Handling Scope
Code Sample: Silverlight List Viewer
Công việc thông thường
How to: Work with Websites
How to: Retrieve Lists
How to: Create, Update, and Delete Lists
How to: Retrieve List Items
How to: Create, Update, and Delete List Items
How to: Work with Users and Groups
How to: Work with Roles
How to: Break Role Assignment Inheritance
How to: Work with User Custom Actions
How to: Work with Web Parts on a Page
Công việc nâng cao
How to: Use Conditional Scope
How to: Use Exception Handling Scope
Code Sample: Silverlight List Viewer
Thao tác dữ liệu SharePoint từ phía Client 35
36. Tổng kết bài học
SharePoint cung cấp các thư viện để làm việc với dữ liệu
từ phía clients
Các thư viện này phù hợp với từng loại ứng dụng khác
nhau
.NET CLR: các ứng dụng desktop,…
Silverligth: các ứng dụng nền Silverlight
ECMAScript: các ứng dụng web, với JavaScript
SharePoint cung cấp các thư viện để làm việc với dữ liệu
từ phía clients
Các thư viện này phù hợp với từng loại ứng dụng khác
nhau
.NET CLR: các ứng dụng desktop,…
Silverligth: các ứng dụng nền Silverlight
ECMAScript: các ứng dụng web, với JavaScript
Thao tác dữ liệu SharePoint từ phía Client 36
37. Danh sách tham khảo
http://msdn.microsoft.com/en-us/library/ee539350.aspx
http://msdn.microsoft.com/en-us/library/hh185009.aspx
http://msdn.microsoft.com/en-us/library/ee539350.aspx
Thao tác dữ liệu SharePoint từ phía Client 37