Post on 09-May-2015
description
SharePoint Nightmares Coding Patterns and Practices
Donald Hessing | @dhessing
3Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Who am I?
Donald Hessing Principal Consultant | Thought Leader SharePoint
@Capgemini Netherlands
(Virtual) Technology Solution Professional for Microsoft
Work full time on SharePoint since 2007
donald.hessing@capgemini.com | @dhessing
4Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Agenda
1. SharePoint Anti-Patterns
2. Data Access
3. Dispose and PowerShell
4. REST versus CSOM
5. SharePoint provisioning techniques
Demos:
Service Locator Pattern 2010/2013
PowerShell Dispose
SharePoint Anti-Patterns
7Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
True or False
web.Lists[“Pages”] == web.Lists[“Pages”]
9Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Anti Pattern SPList[]
1: web.Lists[“Events”].EnableAttachments = false;
2: web.Lists[“Events”].Update();
SPList object in line 1 is not the same as in line 2
1: SPList list= web.Lists[“Events”];
2: list.EnableAttachments = false;
3: list.Update();
BDEADEE2-C265-11D0-BCED-00A0C90AB50F
SP.SPRequest
11Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
SP.SPRequest
SPRequestSPSite
_m_Request : SPRequest
SP.SPRequest (Unmanaged)
ClassID:
BDEADEE2-C265-11D0-BCED-00A0C90AB50F
OWSSVR.DLL
Microsoft.SharePoint.dll
Unmanaged
Unmanaged
12Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
SPRequest
SPRequest is a wrapper for unmanaged class SP.SPRequest
SP.SPRequest is a COM Object that is coming from SharePoint Portal
Services back in 2001
Most retrieval and write operations to SharePoint (SPSite, SPWeb, SPList)
are still implemented by SP.SPRequest
SP.SPRequest (Unmanaged)
ClassID:
BDEADEE2-C265-11D0-BCED-00A0C90AB50F
OWSSVR.DLL
More:
http://hristopavlov.wordpress.com/2009/01/19/understanding-sharepoint-sprequest/
13Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Anti Pattern SPList[]
1: web.Lists[“Events”].EnableAttachments = false;
2: web.Lists[“Events”].Update();
SPS.SPRequest
.EnabledAttachments (true)
SPS.SPRequest
.EnabledAttachments (false)
14Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Anti-Pattern SPList.Items
Show the items of from SPList
SPList list = SPContext.Current.List;
for(int i=0;i<100 && i<list.Items.Count;i++)
{
SPListItem listItem = list.Items[i];
ShowTitle(listItem["Title"].ToString());
}
15Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Good or Bad?
Show the items of from SPList
SPList list = SPContext.Current.List;
for(int i=0;i<100 && i<list.ItemsCount;i++)
{
….
}
SPList.ItemCount is an optimized property for performance reasons. This
property can occasionally return unexpected results. If the precise number is
required (in loops) than the SPList.Items.Count property should be used to
preven index out of range exceptions!
16Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Improved Pattern
SPQuery query = new SPQuery();
query.RowLimit = 100;query. ViewFields = “<FieldRef Name='Title' />”;query. ViewFieldsOnly = true;
SPListItemCollection items = SPContext.Current.List.GetItems(query);
for (int i=0;i<items.Count;i++) {
SPListItem listItem = items[i];ShowTitle(listItem["Title"].ToString());
}
17Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Anti-Pattern SPList.Items
Each call of .Items retrieves all items from the database!
Not needed when: SPList.Items[0], SPList.Items.Count
SPList.Items can’t benefit from indices
SPList.Items can LOCK your content database
When needed, sort the collection of SPList.Items in a
SPListCollection variable
Use SPQuery for list data retrieval (CAMLQueryBuilder)
Use SPSiteDataQuery for cross list items Use the RowLimit property of the query object
18Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Tools… See “Building a SP Factory”
SPDisposeCheck.exe
MSOCAF 2010
FXContrib
SPCOP / SPCAF Foundation
FXCop
StyleCop
Visual Studio 2010 / 2012
MSOCAF 2013
SPCOP / SPCAF Foundation
FXCop – Custom Rules
StyleCop
Visual Studio 2012 / 2013
SharePoint 2010 SharePoint 2013
• Only tool for SharePoint artefacts,
metrics, feature dependency,
managed code and C# analyses!
• Includes TFS and 3th Party
integration (FXCop, JSLint,CAT.NET)
19Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
(Remote) Event Receivers
Setting Unique permissions on large
libraries or sites based on meta data or
person
Synchronize or mirroring solutions
Mixing list data and relational data -
integrity solutions (some relational data
stored in SQL Server)
Remote event receivers are
implemented as a webservice endpoint
hosted on-premise or Windows Azure.
NO Guaranteed delivery!
NO Retry like normal messaging
infrastructure gives you
If you need guaranteed delivery, it’s
better to use the new workflow model!
Do not use for… Remote Event Receivers
20Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Inherited Permissions
Web object
Document library object
Folder object
Item 1 object
Item 2 object
Item 3 object
Scope 1
+ User 2 (Reader)
+ User 3 (Full Control)
+ User 6 (Contributor)
1
1
1
1
1
1
21Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Fine Grained Permissions
Web object
Document library object
Folder object
Item 1 object
Item 2 object
Item 3 object
Scope 1
+ User 2 (Reader)
+ User 3 (Full Control)
+ User 1 (Limited Access)
+ User 2 (Limited Access)
+ User 5 (Limited Access)
Scope 2
+ User 5 (Reader)
+ User 2 (Limited Access)
+ User 1 (Limited Access)
Scope 3
+ User 1 (Contributor)
Scope 4
+ User 2 (Contributor)
+ User 6 (Contributor)
1
1
2
3
4
5
Service Locator Pattern
25Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Tightly Coupled
The implementation of the Service
needs to be available at compile time
The classes cannot be tested in
isolation because they have direct
references to the implementation
(SPWeb, SPSite objects)
Class A can only be created when
Service A implementation is finished
26Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
The Service Locator Pattern
Class A can now be tested in Isolation as it doesn’t hold any depencies
with the Service A Implementation
Class A is now loosely coupled to the Service Implementation
27Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Example
28Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
DEMO
Service Locator and Repository Pattern
29Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Benefits of these patterns
Service Locator Pattern Decoupled dependency – Logger implementation can now easily be replaced
The service implementation can be tested in isolation by using a proxy (dummy data)
Repository Pattern Central point to access data
Can modify the data layer (storage) without too much impact
Strongly typed access to the data
Microsoft Patterns and Practices Guide provides implementation for both
patterns for SharePoint 2010
No specific version for SharePoint 2013 as for now
PowerShell and Dispose()
31Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Dispose() and PowerShell
SharePoint Management Shell ensures disposal of all objects in the
preceding pipeline sequence
Command or single line Pipeline runs a single Thread
Get-SPWebApplication | Get-SPSite -Limit All | Get-SPWeb -Limit All | Select Title
32Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
SharePoint Management Shell
SharePoint Management Shell is running multiple lines in the same thread,
ensuring thread safety of the SharePoint unmanaged code
This is achieved by setting the ThreadOptions=‘ReuseThread’
SharePoint Management Shell start-up script:
$ver = $host | select version
if ($ver.Version.Major -gt 1)
{$Host.Runspace.ThreadOptions = “ReuseThread”}
Add-PsSnapin Microsoft.SharePoint.PowerShell
Set-location $home
33Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Multi-line
PowerShell that contains multiple lines require manually disposing of objects
No Help from PowerShell as it doesn’t know when to dispose objects
$site = Get-SPSite "http://sp2013"
Foreach ($web in $site.AllWebs)
{
Write-Host $web.Title
}
35Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Start-SPAssignment & Stop-SPAssignment
Introduced in SharePoint 2010 to overcome memory pressure
Manages objects for the purpose of proper disposal SPWeb
SPSite
SPSiteAdministration
36Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
SPAssignment - Global
SCOPE
37Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
SPAssignment Namespaces
SCOPESCOPE
38Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Why is this important?
PowerShell cannot claim leaked memory until process termination
Scripts that iterate large Web Applications and performs significant
processing require memory management!
Batch jobs for Reporting (Versioning, Checked-out, Access, Boundaries)
39Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
PowerShell - CSOM
http://sponlinecmdlets.codeplex.com/
Roel Hans Bethlehem: “Extending PowerShell with CSOM”
40Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
DEMO
Service Locator and Repository Pattern SP2010
Service Locator SP2013
App Patterns
42Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
App-Model Support
Hosting type SharePointHosted
AutoHosted Provider Hosted
SharePoint 2013 On Premises
Windows Classic X X X
Windows Claims √ X √
SAML Claims X X √**
SharePoint Online / Office 365
Windows Claims √ √ √
• No support for the SharePoint Public app store as for now
• SAML might requires additional configurationhttp://blogs.technet.com/b/speschka/archive/2012/12/07/using-sharepoint-apps-with-saml-and-fba-sites-in-sharepoint-2013.aspx
CSOM versus REST
44Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Clients
REST versus CSOM
JavaScript
Library
Silverlight
Library
.Net CLR
Library
Client
SharePoint
_api
SharePoint
Foundation
Execute
Query OData /
REST
User Profile Search Taxonomy Feeds More…
SP
Hosted
App
Windows
Phone
Auto
Hosted
App
Windows
8 RT
iOS,
PHP,
Ruby,etc
SP
Hosted
App
45Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Limitations REST
REST calls seems to be more chatty than JSOM
REST implementation is still a subset of CSOM
Description REST JSOM
Updating Content Types X √
Post to person news feed X/√ √
Large file upload √ X
Batch updates X √
Well documented X / √ √
Supports jQuery, plugins √ X
Environment independent √ X
47Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Links
http://spohelper.codeplex.com/
http://www.sharepointnutsandbolts.com/
http://blogs.technet.com/b/speschka/archive/2012/12/07/using-sharepoint-
apps-with-saml-and-fba-sites-in-sharepoint-2013.aspx
http://www.shillier.com/default.aspx
http://www.slideshare.net/bobbyschang/sharepoint-permissions-worst-
practices
48Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Key takeaways
SharePoint Server Side Object Model is still using unmanaged code
Code Analyses tools can help, but be aware of the coverage (MSOCAF,
FXCop, SPDispose, SPCop)
The Service Locator and Repository pattern can decouple the actual
implementation and hide complexity in SharePoint data access code
Fully understand the implementation of a SharePoint feature before you
actually use it – Be aware – Blogs can be wrong!
Long running and resource intensive scripts need to dispose object as
well!
49Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Thank You!
01010100 01101000 01100001 01101110
01101011 00100000 01011001 01101111
01110101 0100001
50Copyright © Capgemini 2012. All Rights Reserved
Presentation Title | Date
Donald Hessing
Thought Leader SharePoint @Capgemini
Microsoft Certified Master for SharePoint
Contact me:
@dhessing
donald.hessing@capgemini.com
http://nl.linkedin.com/pub/donald-hessing/4/250/924