Wss Object Model

40 %
60 %
Information about Wss Object Model

Published on July 3, 2008

Author: maddinapudi

Source: slideshare.net

Programming SharePoint Object Model, Web Services, and Events Michael Morton 4/15/03

Summary of .NET support SharePoint will use ASP.NET instead of ISAPI for base page execution Web Part Framework Server Object Model for programmatic access to SharePoint data We offer functionality as XML web services for access from remote machines

SharePoint will use ASP.NET instead of ISAPI for base page execution

Web Part Framework

Server Object Model for programmatic access to SharePoint data

We offer functionality as XML web services for access from remote machines

.NET Object Model Managed code object model on the server Accessible via ASP.NET or any other server process Implemented in C# Exposes almost of all of the data stored in WSS

Managed code object model on the server

Accessible via ASP.NET or any other server process

Implemented in C#

Exposes almost of all of the data stored in WSS

NET Object model Examples of what can be done with the Object Mode: Add, edit, delete, and retrieve data from SharePoint Lists Create new lists and set list metadata (e.g. the fields in a list) Set web properties Work with documents in document libraries. Perform administrative tasks such as creating webs, adding users, creating roles, etc. Pretty much any functionality in the UI can be automated through the OM!

Examples of what can be done with the Object Mode:

Add, edit, delete, and retrieve data from SharePoint Lists

Create new lists and set list metadata (e.g. the fields in a list)

Set web properties

Work with documents in document libraries.

Perform administrative tasks such as creating webs, adding users, creating roles, etc.

Pretty much any functionality in the UI can be automated through the OM!

Example Objects List Data SPField SPFieldCollection SPListCollection SPList SPListItemCollection SPListItem SPView Administration SPGlobalAdmin SPQuota SPVirtualServer Security SPGroup SPGroupCollection SPSite SPUser SPUserCollection Documents SPDocumentLibrary SPFile SPFileCollection SPFolder

List Data

SPField

SPFieldCollection

SPListCollection

SPList

SPListItemCollection

SPListItem

SPView

Administration

SPGlobalAdmin

SPQuota

SPVirtualServer

Security

SPGroup

SPGroupCollection

SPSite

SPUser

SPUserCollection

Documents

SPDocumentLibrary

SPFile

SPFileCollection

SPFolder

ASP.Net Security For content stored in WSS, only registered set of web custom controls will run in pages Inline script in the page will not execute Code behind in pages can be made to work All Executable code (e.g. web custom controls, web parts, and code-behind classes) needs to be installed on physical web server

For content stored in WSS, only registered set of web custom controls will run in pages

Inline script in the page will not execute

Code behind in pages can be made to work

All Executable code (e.g. web custom controls, web parts, and code-behind classes) needs to be installed on physical web server

Getting Started with OM Build a web part This is the best option to write code that functions are part of a WSS site or solution There will be lots of documentation with the beta on how to build a web part. Web Part is reusable and can be managed using all of the web part tools and UI.

Build a web part

This is the best option to write code that functions are part of a WSS site or solution

There will be lots of documentation with the beta on how to build a web part.

Web Part is reusable and can be managed using all of the web part tools and UI.

Getting Started with the OM Build an ASPX page Code cannot live inline in a page within the site. Creating pages underneath the /_layouts directory is often the best option for custom ASPX apps on top of SharePoint This lets your page be accessible from any web. For example, if you build mypage.aspx in _Layouts, it is accessible from the following URLs: http://myweb/_layouts/myapp/mypage.aspx http://myweb/subweb1/_layouts/myapp/mypage.aspx ASPX page will run using the context of the web under which it is running.

Build an ASPX page

Code cannot live inline in a page within the site.

Creating pages underneath the /_layouts directory is often the best option for custom ASPX apps on top of SharePoint

This lets your page be accessible from any web. For example, if you build mypage.aspx in _Layouts, it is accessible from the following URLs:

http://myweb/_layouts/myapp/mypage.aspx

http://myweb/subweb1/_layouts/myapp/mypage.aspx

ASPX page will run using the context of the web under which it is running.

Getting Started with the OM Windows Executable or any other application Object model can be called from pretty much any code context. It is not limited to just web parts or ASP.Net For example, you could build a command-line utility to perform certain actions

Windows Executable or any other application

Object model can be called from pretty much any code context. It is not limited to just web parts or ASP.Net

For example, you could build a command-line utility to perform certain actions

Demo Hello World Web Part

Hello World Web Part

Working with the OM The object model has three top-level objects: SPWeb (represents an individual site) SPSite (represents a site collection, which is a set of web sites) SPGlobalAdmin (used for global administration settings) In order to perform actions on data within a web, you must first get an SPWeb object.

The object model has three top-level objects:

SPWeb (represents an individual site)

SPSite (represents a site collection, which is a set of web sites)

SPGlobalAdmin (used for global administration settings)

In order to perform actions on data within a web, you must first get an SPWeb object.

Adding our namespace You should add references to the WSS namespaces to your source files using Microsoft.SharePoint; using Microsoft.SharePoint.WebControls; using Microsoft.SharePoint.Administration; …

You should add references to the WSS namespaces to your source files

using Microsoft.SharePoint;

using Microsoft.SharePoint.WebControls;

using Microsoft.SharePoint.Administration;



Key Object – SPWeb Starting point to get at the Lists, Items, Documents, Users, Alerts, etc. for a web site. Example Properties: Web.Lists (returns a collection of lists) Web.Title (returns the title of the site) Web.Users (returns the users on the site) In a web part or ASPX page, you can use the following line to get a SPWeb: SPWeb myweb = SPControl.GetContextWeb(Context);

Starting point to get at the Lists, Items, Documents, Users, Alerts, etc. for a web site.

Example Properties:

Web.Lists (returns a collection of lists)

Web.Title (returns the title of the site)

Web.Users (returns the users on the site)

In a web part or ASPX page, you can use the following line to get a SPWeb:

SPWeb myweb = SPControl.GetContextWeb(Context);

Demo Showing Web and List Properties

Showing Web and List Properties

Accessing data in a WSS List Get a SPList or SPDocumentLibrary object. SPList mylist = web.Lists[“Events”]; You can then call the .Items property to get all of the items: SPListItemCollection items = mylist.Items; If you only want a subset of the items, call the GetItems method and pass a SPQuery object SPListItemCollection items = mylist.GetItems(query);

Get a SPList or SPDocumentLibrary object.

SPList mylist = web.Lists[“Events”];

You can then call the .Items property to get all of the items:

SPListItemCollection items = mylist.Items;

If you only want a subset of the items, call the GetItems method and pass a SPQuery object

SPListItemCollection items = mylist.GetItems(query);

Accessing data in a list To get data for a field, specify the field name in the indexer for an SPListItem foreach(SPListItem item in items) { Response.Write(item["Due Date"].ToString()); Response.Write(item["Status"].ToString()); Response.WRite(item["Title"].ToString()); }

To get data for a field, specify the field name in the indexer for an SPListItem

foreach(SPListItem item in items)

{

Response.Write(item["Due Date"].ToString());

Response.Write(item["Status"].ToString());

Response.WRite(item["Title"].ToString());

}

Full Example SPWeb web = SPControl.GetContextWeb(Context); SPList tasks = web.Lists[&quot;Tasks&quot;]; SPListItemCollection items=tasks.Items; foreach(SPListItem item in items) { output.Write(item[&quot;Title&quot;].ToString() + item[&quot;Status&quot;].ToString() + &quot;<br>&quot;); }

SPWeb web = SPControl.GetContextWeb(Context);

SPList tasks = web.Lists[&quot;Tasks&quot;];

SPListItemCollection items=tasks.Items;

foreach(SPListItem item in items)

{

output.Write(item[&quot;Title&quot;].ToString() + item[&quot;Status&quot;].ToString() + &quot;<br>&quot;);

}

Updating data Most objects in WSS do not immediately update data when you change a property You need to first call the Update() method on the object This helps performance by minimizing SQL queries underneath the covers Example: SPList mylist = web.Lists[“Tasks”]; mylist.Title=“Tasks!!!”; mylist.Description=“Description!!”; Mylist.Update();

Most objects in WSS do not immediately update data when you change a property

You need to first call the Update() method on the object

This helps performance by minimizing SQL queries underneath the covers

Example:

SPList mylist = web.Lists[“Tasks”];

mylist.Title=“Tasks!!!”;

mylist.Description=“Description!!”;

Mylist.Update();

Updating List Data SPListItem is another example of an object where you need to call update: Example: SPListItem item = items[0]; item[&quot;Status&quot;]=&quot;Not Started&quot;; item[&quot;Title&quot;]=&quot;Task Title&quot;; item.Update();

SPListItem is another example of an object where you need to call update:

Example:

SPListItem item = items[0];

item[&quot;Status&quot;]=&quot;Not Started&quot;;

item[&quot;Title&quot;]=&quot;Task Title&quot;;

item.Update();

FormDigest Security By default, the object model will not allow data updates if the form submitting the data does not contain the ‘FormDigest’ security key. FormDigest is based on username and site. It will time out after 30 minutes. Best solution is to include <FormDigest runat=“Server”/> web folder control in ASPX page. If you do not need the security the FormDigest provides, you can set to SPWeb.AllowUnsafeUpdates to bypass this check.

By default, the object model will not allow data updates if the form submitting the data does not contain the ‘FormDigest’ security key.

FormDigest is based on username and site. It will time out after 30 minutes.

Best solution is to include <FormDigest runat=“Server”/> web folder control in ASPX page.

If you do not need the security the FormDigest provides, you can set to SPWeb.AllowUnsafeUpdates to bypass this check.

Adding Users to a web Get the appropriate SPRole object: SPRole admins = web.Roles[&quot;Administrator&quot;]; Call the AddUser method: admins.AddUser(&quot;redmondfoltz&quot;,&quot;Greg@hotmail.com&quot;,&quot;Greg Foltz&quot;,&quot;&quot;);

Get the appropriate SPRole object:

SPRole admins = web.Roles[&quot;Administrator&quot;];

Call the AddUser method:

admins.AddUser(&quot;redmondfoltz&quot;,&quot;Greg@hotmail.com&quot;,&quot;Greg Foltz&quot;,&quot;&quot;);

Demo Adding users to the site via the OM

Adding users to the site via the OM

Keep objects around If you create and destroy objects frequently, you may do extra SQL queries and have code that is incorrect: Bad Example: SPWeb web = SPControl.GetContextWeb(Context); web.Lists[&quot;Tasks&quot;].Title=&quot;mytitle&quot;; web.Lists[&quot;Tasks&quot;].Description=&quot;mydescription&quot;; web.Lists[&quot;Tasks&quot;].Update(); Good Example: SPWeb web = SPControl.GetContextWeb(Context); SPList mylist = web.Lists[&quot;Tasks&quot;]; mylist.Title=&quot;mytitle&quot;; mylist.Description=&quot;mydescription&quot;; mylist.Update();

If you create and destroy objects frequently, you may do extra SQL queries and have code that is incorrect:

Bad Example:

SPWeb web = SPControl.GetContextWeb(Context);

web.Lists[&quot;Tasks&quot;].Title=&quot;mytitle&quot;;

web.Lists[&quot;Tasks&quot;].Description=&quot;mydescription&quot;;

web.Lists[&quot;Tasks&quot;].Update();

Good Example:

SPWeb web = SPControl.GetContextWeb(Context);

SPList mylist = web.Lists[&quot;Tasks&quot;];

mylist.Title=&quot;mytitle&quot;;

mylist.Description=&quot;mydescription&quot;;

mylist.Update();

SharePoint will have web services APIs for accessing content. The web services layer will be built on top of the server OM. Allows manipulation of Lists, Webs, Views, List Items, etc. Functionality will be similar to server object model, but with fewer interfaces optimized to minimize transactions. Office11 (e.g. Excel, DataSheet, Work, Outlook, FrontPage, etc) use web services to access data from WSS. Web Services in WSS

SharePoint will have web services APIs for accessing content. The web services layer will be built on top of the server OM.

Allows manipulation of Lists, Webs, Views, List Items, etc.

Functionality will be similar to server object model, but with fewer interfaces optimized to minimize transactions.

Office11 (e.g. Excel, DataSheet, Work, Outlook, FrontPage, etc) use web services to access data from WSS.

Web Service Methods GetListCollection GetListItems GetWebCollection UpdateList UpdateListItems GetWebInfo GetWebPart GetSmartPageDocument And more…

GetListCollection

GetListItems

GetWebCollection

UpdateList

UpdateListItems

GetWebInfo

GetWebPart

GetSmartPageDocument

And more…

Getting Started With Web Services Create a Windows Application In Visual Studio, choose ‘Add Web Reference’ Enter http://<server>/_vti_bin/lists.asmx to access the lists web service Other services include: UserGroups.asmx – users and groups Webs.asmx – Web information Views.asmx – View information Subscription.asmx – Subscriptions

Create a Windows Application

In Visual Studio, choose ‘Add Web Reference’

Enter http://<server>/_vti_bin/lists.asmx to access the lists web service

Other services include:

UserGroups.asmx – users and groups

Webs.asmx – Web information

Views.asmx – View information

Subscription.asmx – Subscriptions

Getting Started with Web Services To send the logged on users’ credentials from the client, add the following line in the web reference object’s constructor: public Lists() { this.Url = &quot;http://mikmort3/_vti_bin/lists.asmx&quot;; this.Credentials=System.Net.CredentialCache.DefaultCredentials; }

To send the logged on users’ credentials from the client, add the following line in the web reference object’s constructor:

public Lists() {

this.Url = &quot;http://mikmort3/_vti_bin/lists.asmx&quot;;

this.Credentials=System.Net.CredentialCache.DefaultCredentials;

}

Demo Building a Web Service Client

Building a Web Service Client

Events We support events on document libraries. Operations such as add, update, delete, check-in, check-out, etc. Events are asynchronous Events call IListEventSink managed interface. Documentation and Sample in the SDK

We support events on document libraries.

Operations such as add, update, delete, check-in, check-out, etc.

Events are asynchronous

Events call IListEventSink managed interface.

Documentation and Sample in the SDK

Optimizing Performance of OM The biggest goal is to minimize the number of SQL queries. It may be helpful to use the SQL profiler to monitor what the OM is doing underneath the covers Minimizing managed/unmanaged transitions also a goal, though this is mostly taken care within the OM.

The biggest goal is to minimize the number of SQL queries.

It may be helpful to use the SQL profiler to monitor what the OM is doing underneath the covers

Minimizing managed/unmanaged transitions also a goal, though this is mostly taken care within the OM.

What about CAML? Page Execution will no longer be driven by CAML (XML schema used in SharePoint) CAML is still used in several places Field Type Definitions Site and List Templates View definitions

Page Execution will no longer be driven by CAML (XML schema used in SharePoint)

CAML is still used in several places

Field Type Definitions

Site and List Templates

View definitions

SDK Available Documentation about V2 available at http://msdn.microsoft.com/sharepoint/

Documentation about V2 available at http://msdn.microsoft.com/sharepoint/

Questions?

 

Code Example -- Enumerate Lists and Webs private void ShowSubWebs(HtmlTextWriter output) { SPWeb web = SPControl.GetContextWeb(Context); SPWebCollection mywebs = web.Webs; foreach (SPWeb myweb in mywebs) { output.Write(myweb.Title + &quot;<br>&quot;); } } private void ShowSubWebsWithLists(HtmlTextWriter output) { SPWeb web = SPControl.GetContextWeb(Context); SPWebCollection mywebs = web.Webs; foreach (SPWeb myweb in mywebs) { output.Write(&quot;<b>&quot; + myweb.Title + &quot;<br>&quot; + &quot;</b>&quot;); SPListCollection lists = myweb.Lists; foreach (SPList list in lists) { if (list.ItemCount>10) { output.Write(list.Title + &quot;: &quot; + list.ItemCount + &quot;<br>&quot;); } } } }

private void ShowSubWebs(HtmlTextWriter output)

{

SPWeb web = SPControl.GetContextWeb(Context);

SPWebCollection mywebs = web.Webs;

foreach (SPWeb myweb in mywebs)

{

output.Write(myweb.Title + &quot;<br>&quot;);

}

}

private void ShowSubWebsWithLists(HtmlTextWriter output)

{

SPWeb web = SPControl.GetContextWeb(Context);

SPWebCollection mywebs = web.Webs;

foreach (SPWeb myweb in mywebs)

{

output.Write(&quot;<b>&quot; + myweb.Title + &quot;<br>&quot; + &quot;</b>&quot;);

SPListCollection lists = myweb.Lists;

foreach (SPList list in lists)

{

if (list.ItemCount>10)

{

output.Write(list.Title + &quot;: &quot; + list.ItemCount + &quot;<br>&quot;);

}

}

}

}

Code Snippet – Copy Files private SPWeb web; private void Page_Load(object sender, System.EventArgs e) { web = SPControl.GetContextWeb(Context); } private void Button1_Click(object sender, System.EventArgs e) { int maxsize = Convert.ToInt32(TextBox1.Text); SPFolder myfolder=web.GetFolder(&quot;Shared Documents&quot;); SPFileCollection myfiles = myfolder.Files; foreach (SPFile file in myfiles) { if (file.Length>(maxsize*1024)) { Response.Write(file.Name + &quot;: &quot; + file.Length/1024 + &quot;kb<br>&quot;); file.CopyTo(&quot;Archive/&quot;+file.Name,true); } } }

private SPWeb web;

private void Page_Load(object sender, System.EventArgs e)

{

web = SPControl.GetContextWeb(Context);

}

private void Button1_Click(object sender, System.EventArgs e)

{

int maxsize = Convert.ToInt32(TextBox1.Text);

SPFolder myfolder=web.GetFolder(&quot;Shared Documents&quot;);

SPFileCollection myfiles = myfolder.Files;

foreach (SPFile file in myfiles)

{

if (file.Length>(maxsize*1024))

{

Response.Write(file.Name + &quot;: &quot; + file.Length/1024 + &quot;kb<br>&quot;);

file.CopyTo(&quot;Archive/&quot;+file.Name,true);

}

}

}

Code Snippet – Add users private void Button1_Click(object sender, System.EventArgs e) { SPWeb web = SPControl.GetContextWeb(Context); string username = TextBox1.Text; string displayname = TextBox2.Text; string email = TextBox3.Text; SPRole admins = web.Roles[&quot;Administrator&quot;]; try { admins.AddUser(username,email,displayname,&quot;&quot;); Label4.Text=&quot;Successfully added user&quot;; } catch(Exception ex) { Label4.Text=ex.ToString(); } }

private void Button1_Click(object sender, System.EventArgs e)

{

SPWeb web = SPControl.GetContextWeb(Context);

string username = TextBox1.Text;

string displayname = TextBox2.Text;

string email = TextBox3.Text;

SPRole admins = web.Roles[&quot;Administrator&quot;];

try

{

admins.AddUser(username,email,displayname,&quot;&quot;);

Label4.Text=&quot;Successfully added user&quot;;

}

catch(Exception ex)

{

Label4.Text=ex.ToString();

}

}

Add a comment

Related pages

Understanding the Administrative Object Model of Windows ...

Understanding the Windows SharePoint Services object model is much easier if you consider the dual nature of Windows SharePoint Services.
Read more

Windows SharePoint Services Search Query Object Model

Search in Windows SharePoint Services provides a new Query object model that you can use in custom search Web Parts and search applications to execute ...
Read more

wss object model - social.msdn.microsoft.com

Hi friends, I am new to wss object model.i dont know how to start the ... Inside Microsoft Windows SharePoint Services 3.0 Then Download ...
Read more

WSS web services or WSS object model?

Hi Gary, Thank you for reply. It will run on the farm so I guess I'll go with the object model. I'm currently going through the msdn documentation about ...
Read more

Introduction to SharePoint Object Model - C# Corner

Introduction to SharePoint Object Model. By Ravish Sindhwani on May 30, 2010. ... SPWeb: Represents a Windows SharePoint Services Web site. CODE Example:
Read more

Working with the WSS Object Model - KnowledgeNet

Working with the WSS Object Model is an online self-paced training course for IT pros.
Read more

Using the Object Model to Manage Windows SharePoint ...

Updated: 08-22-2005. You can use the object model for Microsoft Windows SharePoint Services to manage your servers, sites, users, and other ...
Read more

Download 2007 Office System Document: Developer Posters ...

2007 Office System Document: Developer ... Microsoft Office InfoPath 2007 Managed Object Model ... including Microsoft Windows SharePoint Services 3.0 and ...
Read more

Download Windows SharePoint Services 3.0: Software ...

The Windows SharePoint Services 3.0 software development kit (SDK) contains conceptual overviews, programming tasks, samples, and references to guide you ...
Read more