Developing Solutions for Microsoft SharePoint Server 2010 Using the Client Object Model

Preview:

DESCRIPTION

PR07. Developing Solutions for Microsoft SharePoint Server 2010 Using the Client Object Model. Mike Ammerlaan Program Manager Microsoft Corporation. Overview of Data Technologies. Strongly-typed lists. Methods, MOSS. Weakly-typed lists. Client OM. Web Services. REST APIs. Client-side. - PowerPoint PPT Presentation

Citation preview

Developing Solutions for Microsoft SharePoint Server 2010 Using the Client Object Model Mike AmmerlaanProgram ManagerMicrosoft Corporation

PR07

Overview of Data Technologies

LINQ

Farm

Site

List Data

External Lists

Data Platform

Client-side

Server-side

Strongly-typed listsWeakly-typed lists

Strongly-typed lists

Weakly-typed listsServer OM

Client OM REST APIs

New in 2010Improved

Web Services

Methods, MOSS

Agenda

>Client Object Model>The Basics>Queries>Exception Scopes>Conditional Load>Silverlight Cross-site Data

Access

Client Object Model: The Basics> Client-side library for remotely calling

SharePoint> Mirrors (a subset) of objects on the server> Usable in JavaScript, .net CLR, Silverlight

CLR

> Requests are batched for over-the-wire performance

> Used by SharePoint UI for operations like batch deletion

Starting with the client OM.NET CLR: 14\ISAPI

Silverlight: 14\TEMPLATE\LAYOUTS\ClientBin

> Packaged .XAP coming post-betaJavaScript:

> Use <ScriptLink>/SP.SOD.execute to add JS files

Microsoft.SharePoint.Client 281kbMicrosoft.SharePoint.Client.Runtime

145kb

SP.js 380kbSP.Core.js 13kbSP.Runtime.js 68kb

Getting Started: 3 things to know1. ClientContext is the central object

2. Before you read a property, you have to ask for it

3. All requests must be committed in a batch

clientContext.Load(list);

clientContext.ExecuteQuery();

clientContext = new ClientContext(“http://mysite”);

Hello World, Client Object Model

C#private ClientContext context;private Web web;

private void TestButton_Click(object sender, RoutedEventArgs e){

context = ClientContext.Current;web = context.Web;context.Load(web);context.ExecuteQueryAsync(TitleRetrievedContinue, null);

}

private void TitleRetrievedContinue(object sender, ClientRequestSucceededEventArgs args){

web.Title = web.Title + " + Silverlight";web.Update();context.ExecuteQueryAsync(SayDone, null);

}

JavaScriptvar context;var web;

function testButtonClick(){

context = new SP.ClientContext();web = context.get_web();context.load(web)context.executeQueryAsync(titleRetrievedContinue);

}

function titleRetrievedContinue(){

web.set_title(web.get_title() + " + JavaScript");web.update();context.executeQueryAsync(sayDone);

}

Accessing Data with Client OM

Client Application

Client Application

Client OM

JSONExecuteQuery()

XML

WPF/WinForm/OfficeSilverlightJavaScript

SharePoint Data

SharePoint API

Web Service

ServerApplication

Client.svc

clientserver

Site

Web

ListItem

Field

View

Form

Folder

List

NavigationNode

Navigation

UserCustomAction

ContentType

RoleDefinition

WorkflowAssociationWorkflowTemplate

RoleAssignment

Change

WebPart

File

User Interface

Data and Schema

Security

Logic

Major Objects in Client Object Model

Items not covered by CSOM

> User Profiles> People> Search> Enterprise

Metadata

> Excel REST web services

> Publishing> Administration

Client Object Model Limitations> Client object model cannot be used on

server to talk to same-server> You still need to handle synch/update

semantics (change log could help)> No elevation of privilege capabilities> Requests are throttled> .net CLR has sync method;

Silverlight CLR and Jscript are async

Retrieval Queries> By default, .Load will fetch most*

simple properties of an object> Explicitly need to retrieve client objects or

child collections> You can use Linq to further define the

shape of your queries> What properties to include> What sub-objects to retrieve> (List items still need to use CAML queries)

Web Properties: Default Operationsbool AllowRssFeeds

DateTime CreatedContentTypeCollection ContentTypes

Guid IdFieldCollection Fields

Group AssociatedMemberGroup

User CurrentUser String Description

List Lists

Folder RootFolder String Title

bool RecycleBinEnabled

clientContext.Load(web);

bool AllowRssFeeds

DateTime Created

Guid Id

String Description

String Title

bool RecycleBinEnabled

bool AllowRssFeeds

DateTime Created

Guid Id

String Description

String Title

bool RecycleBinEnabled

clientContext.Load(web.RootFolder);clientContext.Load(web.Lists);

List Lists

Folder RootFolder

Advanced queries using Linq

Query Syntax

var query = from list in clientContext.Web.Lists         where list.Title != null         select list; var result = clientContext.LoadQuery(query);

clientContext.ExecuteQuery();

Method Syntax

clientContext.Load(oList,list => list.Fields .Where(field => field.Hidden == false && field.Filterable == true));

clientContext.ExecuteQuery();

Query Modes: Fill vs. Query> “Fill”:

context.Load(object, params LinqExpression)> Fills out the objects in the context: in-

place> ‘method syntax’ linq

> “Query”:context.LoadQuery(IQueryable)> Use linq query to return custom objects> Not filled into the context> ‘query syntax’ and ‘method syntax’ linq

Method Query Syntax Basics> Use .Where method to:

> Filter down items retrieved in a collection

> Use .Include method to:> Explicitly select properties or child objects

to retrieve> You own specifying what you want!

> (use .IncludeWithDefaultProperties for default + custom properties)

> Use .Take method to:> Restrict overall number of items retrieved

Queries and Filtering

Client Object Model Advanced Topics

> Exception Handling> Use to react to exceptions within a batch

> Conditional Scope + Retrieves> Use to check conditions before doing loads,

on the server within a batch

> Uses scopes and using statements (IDisposable) to signify how methods are filtered

Exception Handling & Conditional Load

Silverlight Cross-Site Data Accessusing the Client Object Model

> The Problem:> You want to host powerful apps on

SharePoint that use data on another server

> You want to minimize impact to SharePoint deployments

> Silverlight is (generally) limited to calls on one domain

> One solution: host XAP on external server & delegate user token

clientserver

Browser Page (http://sharepoint/page.aspx)

http://sharepoint

Silverlight XAP(http://scrum/myscrum.xap)

1. Web Part is added to page with application markup that

indicates host server is http://scrum

2. Page is instantiated with special

token 3. XAP calls back to custom web service on host server, with

token

http://scrum4. App server can forwards

client OM request on

behalf of user

Cross-site data access: core conceptsApplication Principal

> SPUser that represents the incoming request account

> Effective permissions of Silverlight w/ client OM = Permissions of App Principal & Initiating User

Application XML> Contains hosting server information

External Application Provider> Can be deployed to host server to provide

customized application-add experience

Request Forwarder> Code deployed to remote server to forward

requests

Cross-Site Data Access

Getting Started: 3 things to know1. ClientContext is the central object

2. Before you read a property, you have to ask for it

3. All requests must be committed in a batch

clientContext.Load(list);

clientContext.ExecuteQuery();

clientContext = new ClientContext(“http://mysite”);

Overview of Data Technologies

LINQ

Farm

Site

List Data

External Lists

Data Platform

Client-side

Server-side

Strongly-typed listsWeakly-typed lists

Strongly-typed lists

Weakly-typed listsServer OM

Client OM REST APIs

New in 2010Improved

Web Services

Methods, MOSS

YOUR FEEDBACK IS IMPORTANT TO US! Please fill out session evaluation

forms online atMicrosoftPDC.com

Learn More On Channel 9> Expand your PDC experience through

Channel 9

> Explore videos, hands-on labs, sample code and demos through the new Channel 9 training courses

channel9.msdn.com/learnBuilt by Developers for Developers….

© 2009 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

Recommended