copyright © 2006 pilothouse consulting inc. all rights reserved. sharepoint api and development in...

41
Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with WSS object model • Site collection organization • List manipulation • Security • Administration Working with Office object model • User profiles Code performance and security Object model overview

Upload: shannon-mccormick

Post on 04-Jan-2016

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

SharePoint API and Development in ASP.NET

• Creating “Hello World” application• Working with WSS object model

• Site collection organization• List manipulation• Security• Administration

• Working with Office object model• User profiles

• Code performance and security• Object model overview

Page 2: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

ASP.Net Website with SharePoint Object Model

Create ASP.NET website in the following url:

http://<server_name>/_layouts/<Web_Application_Name>

Page 3: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

References to SharePoint DLLs

Add a reference to Microsoft.SharePoint.dll and Microsoft.Office.Server.dll in

Local_Drive:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\ISAPI

Page 4: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Demo: “Hello World” ASP.NET Application

Demo: “HelloWorld” ASP.NET Application

public partial class _Default : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) {

// Put user code to initialize the page hereResponse.Write("Hello there!");

}}

Visual Studio short cuts:

F7 - Switch between Code (Default.aspx.cs) and Designer (Default.aspx in Design view)

Ctrl+ PgDw - View HTML Source (Default.aspx in HTML view)

Visual Studio short cuts:

F7 - Switch between Code (Default.aspx.cs) and Designer (Default.aspx in Design view)

Ctrl+ PgDw - View HTML Source (Default.aspx in HTML view)

Page 5: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Site Collection Organization

In this section we will cover the basics of working with site collections:

• Getting current website

• Getting lists for the website

• Getting all websites in a site collection

Page 6: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Getting the Current Website

using Microsoft.SharePoint;

SPWeb web = SPContext.Current.Web;

labelMessage.Text = web.Title;

Page 7: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Lists and List Items for the Current Website

TreeNode webNode = new TreeNode(web.Title);

treeWeb.Nodes.Add(webNode);

SPListCollection lists = web.Lists;

foreach (SPList list in lists)

{

if (list.Fields.ContainsField(“Title"))

{

TreeNode listNode = new TreeNode(list.Title);

webNode.ChildNodes.Add(listNode);

SPListItemCollection items = list.Items;

foreach (SPListItem item in items)

{

TreeNode itemNode = new TreeNode(item.Title);

listNode.ChildNodes.Add(itemNode);

}

}

}

Page 8: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Site Collection Navigation

SPSite siteCollection = SPContext.Current.Site;SPWeb rootWeb = siteCollection.RootWeb;TreeNode rootNode = new TreeNode(rootWeb.Title);treeSiteCollection.Nodes.Add(rootNode);addSubWebsToTree(rootWeb, rootNode);

Page 9: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Site Collection Navigation Recursion

private void addSubWebsToTree(SPWeb currentWeb, TreeNode currentNode){ foreach (SPWeb subWeb in currentWeb.Webs) { TreeNode subWebNode = new TreeNode(subWeb.Title); currentNode.ChildNodes.Add(subWebNode); addSubWebsToTree(subWeb, subWebNode); subWeb.Dispose(); }}

Page 10: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Demo: Site Organization Classes

Demo: Site Organization Classes

1. Use SPContext, SPSite, SPWeb, SPWebCollection, SPListCollection, and SPList classes

Page 11: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Lab: Exercises 1-2

Perform exercises 1 - 2 from Basic SharePoint API Development Lab

Page 12: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

List Manipulation

In this section we cover how to create new data

• Create a list

• Create columns in the list

• Modify a view for the list

• Add new list item for the list

Page 13: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Creating a list

SPWeb web = SPContext.Current.Web;web.AllowUnsafeUpdates = true;SPList list;try{ list = web.Lists["Student Assignments"];}catch(Exception ex){ System.Guid listID = web.Lists.Add("Student Assignments", "", SPListTemplateType.Tasks); list = web.Lists[listID];}

Page 14: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Creating a column in a list

SPFieldCollection fields = list.Fields;SPField gradeField;if (fields.ContainsField("Grade")){ gradeField = fields["Grade"];}else{ fields.Add("Grade", SPFieldType.Number, false);}

Page 15: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Adding Grade field to default view of the list

SPView defaultView = list.DefaultView;if (!defaultView.ViewFields.Exists("Grade")){

defaultView.ViewFields.Add("Grade");defaultView.Update();

}

Page 16: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Creating a new list item

SPListItemCollection items = list.Items;SPListItem newItem = items.Add();newItem["Title"] = "Homework 1";newItem["DueDate"] = System.DateTime.Now;newItem["Grade"] = 5;newItem.Update();

Page 17: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Demo: List Classes

Demo: List Classes

1. Use SPList, SPField, SPView, and SPListItem classes

Page 18: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Lab: Exercises 3 - 5

Perform exercises 3 - 5 from Basic SharePoint API Development Lab

Page 19: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Free Style Exercise: List Manipulation

Free Style Exercise

1. Go through all sub sites below the current one

2. Create a list called “Inventory” with “generic list” template (if the list does not exist)

3. Add a column “Quantity” to the list (if the column does not exist)

4. Add “Quantity” column to the default view( if the column is already not included in view)

Page 20: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Security

In this section we cover how to work with security features:

• Checking if the website has unique permissions• Listing all domain users and groups• Listing all SharePoint groups• Listing all Permissions levels• Adding user to a SharePoint group• Setting unique permissions for a folder

Page 21: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Security Permission Inheritance

SPSite site = SPContext.Current.Site;SPWeb web = SPContext.Current.Web;

// Test to see if the site has unique permissionsif (web.HasUniqueRoleAssignments){ Response.Write(web.Title + " does not inherit permissions<br>");}else{ Response.Write(web.Title + " inherits permissions<br>");}

Page 22: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Domain User and Group Security Principals

// All domain users and groups // that are Security Principals for the website// This is the list you see in /_layouts/user.aspxSPUserCollection users = web.Users;Response.Write("<b>All domain user principals in this site: " + "</b><br>");foreach (SPUser user in users){ Response.Write(user.Name + "<br>");}// All domain users and groups within the site collectionusers = web.SiteUsers;Response.Write("<b>All users in this site collection: " + "</b><br>");foreach (SPUser user in users){ Response.Write(user.Name + "<br>");}

Page 23: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

SharePoint Group Security Principals

// SharePoint Groups that are Security Principals on this websiteSPGroupCollection groups = web.Groups;Response.Write("<b>All SharePoint groups in this site: " + "</b><br>");foreach (SPGroup group in groups){ Response.Write(group.Name + "<br>");}

// All SharePoint Groups in this site collectiongroups = web.SiteGroups;Response.Write("<b>All SharePoint groups in this site collection: " + "</b><br>");foreach (SPGroup group in groups){ Response.Write(group.Name + "<br>");}

Page 24: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

SharePoint Group Users

// All users in "Students" SharePoint groupusers = web.Groups["Students"].Users;

Response.Write("<b>All users in \"Students\" SharePoint group: " + "</b><br>");

foreach (SPUser user in users){ Response.Write(user.Name + "<br>");}

Page 25: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Role Definitions

// Role definitions are represented as "Permissions Levels"// in user interfaceSPRoleDefinitionCollection roleDefinitions = web.RoleDefinitions;Response.Write("<b>All role definitions in this site: " + "</b><br>");foreach (SPRoleDefinition roleDefinition in roleDefinitions){ Response.Write(roleDefinition.Name + "<br>");}

Page 26: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Role Assignments For the Site

SPRoleAssignmentCollection webRoleAssignments = web.RoleAssignments;

Response.Write("<b>All role assignments in this site: " + "</b><br>");

foreach (SPRoleAssignment webRoleAssignment in webRoleAssignments){ Response.Write(webRoleAssignment.Member.Name + " " + webRoleAssignment.RoleDefinitionBindings[0].Name + " " + webRoleAssignment.Parent.ToString() + "<br>");}

Page 27: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Adding User to a SharePoint Group

web.AllowUnsafeUpdates = true;

SPGroup studentsGroup = web.Groups["Students"];

SPUser userToAdd = web.SiteUsers["pilothouse\\testgroup"];

studentsGroup.AddUser(userToAdd);

Response.Write("Added user successfully");

Page 28: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Setting Unique Folder Permissions

SPPrincipal principal = userToAdd;SPFolderCollection submissions = web.GetFolder(“Submissions").SubFolders;SPFolder newFolder = submissions.Add("testfolder");

SPListItem folderItem = newFolder.Item;folderItem.BreakRoleInheritance(true);folderItem.Update();SPRoleAssignment folderRoleAssignment = new SPRoleAssignment(principal);SPRoleAssignmentCollection folderRoleAssignments = folderItem.RoleAssignments;SPRoleDefinitionBindingCollection folderRoleDefBindings = folderRoleAssignment.RoleDefinitionBindings;folderRoleDefBindings.Add(roleDefinitions["Contribute"]);folderRoleAssignments.Add(folderRoleAssignment);

Page 29: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Demo: Security Classes

Demo: Security Classes

1. Use SPGroup, SPUser, SPRoleAssignment, and SPRoleDefinition classes

Page 30: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Free Style Exercise: Security

Free Style Exercise

1. Create a new list and give "Students" SharePoint group "Contributor" permissions in that list

2. Remove all other role assignments from that list

Page 31: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Administration

In this section we cover how to work with Administration objects:

• Listing all SharePoint web applications

• Listing all content databases for a web application

• Listing all site collections for a content database

Page 32: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Iterating Through Web Applications

SPWebApplicationCollection webApplications = SPWebService.ContentService.WebApplications;

foreach (SPWebApplication webApplication in webApplications) { TreeNode webAppNode = new TreeNode(webApplication.Name); treeGlobal.Nodes.Add(webAppNode);}

Page 33: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Iterating Through Content Databases and Sites

SPContentDatabaseCollection contentDatabases =webApplication.Content Databases;

foreach (SPContentDatabase contentDatabase in contentDatabases){

TreeNode contentDBNode = new TreeNode(contentDatabase.Name);

webApplNode.ChildNodes.Add(contentDBNode); SPSiteCollection sites = contentDatabase.Sites; foreach (SPSite site in sites) { TreeNode siteNode = new TreeNode(site.Url); contentDBNode.ChildNodes.Add(siteNode);

site.Dispose(); }}

Page 34: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Demo: Administration Classes

Demo: Administration Classes

1. Use SPWebService, SPFarm, SPWebApplication, and SPContentDatabase classes

Page 35: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Microsoft.Office.Server.UserProfiles Example

using Microsoft.Office.Server.UserProfiles;

UserProfileManager upm = new UserProfileManager(ServerContext.Current);

UserProfile up = upm.GetUserProfile("spstraining\\administrator");

Response.Write("work email is " + up[PropertyConstants.WorkEmail].Value + "<br>");

Response.Write("state is " + up["State"].Value);

Page 36: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Demo: User Profile Classes

Demo: User Profile Classes

1. Use UserProfileManager and UserProfile classes from Microsoft.Office.Server.UserProfiles namespaces

Page 37: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Code Performance

• UseSPWeb web = SPContext.Current.Web; SPList list = web.Lists["Tasks"]; list.Title=“deployment"; list.Description=“documenting our deployment"; list.Update();

• Instead of:SPWeb web = SPContext.Current.Web; web.Lists[“Tasks"].Title = “deployment task"; web.Lists["Tasks"].Description = “Documenting our deployment"; web.Lists["Tasks"].Update();

• Because it minimizes the number of trips to the database.

Page 38: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Use Dispose To Free Up Memory

• Useforeach(SPSite site in sites) {

//code site.Dispose();

}

• Orfor(i = 0; i < sites.Count; i ++) {

using(SPSite site = sites[i]) { //code }

}

• In order to avoid retaining the objects in memory.

Page 39: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Code Security

• Use HtmlEncode method in Microsoft.SharePoint.Utilities.SPEncode to prevent execution of malicious script

• For example when someone enters the following title for the list “<script>alert();</script>”

• Response.Write(list.Title) would cause a message box to pop up.

Page 40: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Application infrastructure

• Web.config for storing properties

• Localizations using .NET standards

• Windows installer or xcopy deployment

Page 41: Copyright © 2006 Pilothouse Consulting Inc. All rights reserved. SharePoint API and Development in ASP.NET Creating “Hello World” application Working with

Copyright © 2006 Pilothouse Consulting Inc. All rights reserved.

Demo: Examining Object Model Using the SDK

Demo: Examining Object Model Using the SDK

1. WSS object model reference

2. Office object model reference