Your SlideShare is downloading. ×
0
SharePoint Nightmares
Coding Patterns and Practices

Donald Hessing | @dhessing
Who am I?

Donald Hessing
 Principal Consultant | Thought Leader SharePoint
@Capgemini Netherlands
 (Virtual) Technology...
Agenda
1.
2.
3.
4.
5.

SharePoint Anti-Patterns
Data Access
Dispose and PowerShell
REST versus CSOM
SharePoint provisionin...
SharePoint Anti-Patterns
True or False

web.Lists[“Pages”] == web.Lists[“Pages”]

Presentation Title | Date
Copyright © Capgemini 2012. All Rights ...
Anti Pattern SPList[]
1: web.Lists[“Events”].EnableAttachments = false;
2: web.Lists[“Events”].Update();
SPList object in...
BDEADEE2-C265-11D0-BCED-00A0C90AB50F
SP.SPRequest
SP.SPRequest
Microsoft.SharePoint.dll

SPRequest

SPSite
_m_Request : SPRequest

Unmanaged
OWSSVR.DLL
SP.SPRequest (Unmana...
SPRequest
 SPRequest is a wrapper for unmanaged class SP.SPRequest
 SP.SPRequest is a COM Object that is coming from Sha...
Anti Pattern SPList[]

SPS.SPRequest
.EnabledAttachments (false)

1: web.Lists[“Events”].EnableAttachments = false;
2: web...
Anti-Pattern SPList.Items

Show the items of from SPList
SPList list = SPContext.Current.List;
for(int i=0;i<100 && i<list...
Good or Bad?

Show the items of from SPList
SPList list = SPContext.Current.List;
for(int i=0;i<100 && i<list.ItemsCount;i...
Improved Pattern
SPQuery query = new SPQuery();
query.RowLimit = 100;
query. ViewFields = “<FieldRef Name='Title' />”;
que...
Anti-Pattern SPList.Items
Each call of .Items retrieves all items from the database!
Not needed when:
 SPList.Items[0],...
Tools… See “Building a SP Factory”
SharePoint 2013

SharePoint 2010
 SPDisposeCheck.exe
 MSOCAF 2010
 FXContrib
 SPCOP...
(Remote) Event Receivers

Do not use for…

Remote Event Receivers

 Setting Unique permissions on large
 Remote event re...
Inherited Permissions
Web object

1

Document library object 1
Folder object

1

Item 1 object

1

Item 2 object

+ User 2...
Fine Grained Permissions
Scope 2
+ User 5 (Reader)

Web object

1

Document library object 1

Scope 3

2

Item 1 object

+...
Service Locator Pattern
Tightly Coupled

 The implementation of the Service
needs to be available at compile time
 The classes cannot be tested ...
The Service Locator Pattern

 Class A can now be tested in Isolation as it doesn’t hold any depencies
with the Service A ...
Example

Presentation Title | Date
Copyright © Capgemini 2012. All Rights Reserved

27
DEMO
Service Locator and Repository Pattern

Presentation Title | Date
Copyright © Capgemini 2012. All Rights Reserved

28
Benefits of these patterns
 Service Locator Pattern
 Decoupled dependency – Logger implementation can now easily be repl...
PowerShell and
Dispose()
Dispose() and PowerShell
SharePoint Management Shell ensures disposal of all objects in the
preceding pipeline sequence
...
SharePoint Management Shell
 SharePoint Management Shell is running multiple lines in the same thread,
ensuring thread sa...
Multi-line

 PowerShell that contains multiple lines require manually disposing of objects

 No Help from PowerShell as ...
Start-SPAssignment & Stop-SPAssignment
 Introduced in SharePoint 2010 to overcome memory pressure

 Manages objects for ...
SPAssignment - Global

SCOPE

Presentation Title | Date
Copyright © Capgemini 2012. All Rights Reserved

36
SPAssignment Namespaces

SCOPE

SCOPE

Presentation Title | Date
Copyright © Capgemini 2012. All Rights Reserved

37
Why is this important?
 PowerShell cannot claim leaked memory until process termination

 Scripts that iterate large Web...
PowerShell - CSOM

Roel Hans Bethlehem: “Extending PowerShell with CSOM”
http://sponlinecmdlets.codeplex.com/
Presentation...
DEMO
Service Locator and Repository Pattern SP2010
Service Locator SP2013

Presentation Title | Date
Copyright © Capgemini...
App Patterns
App-Model Support
Hosting type

SharePoint
Hosted

AutoHosted

Provider Hosted

SharePoint 2013 On Premises
Windows Classi...
CSOM versus REST
REST versus CSOM

SharePoint
Foundation

User Profile

Search

Taxonomy

Feeds

More…

_api
SharePoint

Execute
Query

Cli...
Limitations REST
 REST calls seems to be more chatty than JSOM
 REST implementation is still a subset of CSOM

Descripti...
Links
 http://spohelper.codeplex.com/
 http://www.sharepointnutsandbolts.com/
 http://blogs.technet.com/b/speschka/arch...
Key takeaways
 SharePoint Server Side Object Model is still using unmanaged code
 Code Analyses tools can help, but be a...
Thank You!
01010100 01101000 01100001 01101110
01101011 00100000 01011001 01101111
01110101 0100001

Presentation Title | ...
Donald Hessing
 Thought Leader SharePoint @Capgemini
 Microsoft Certified Master for SharePoint
 Contact me:
 @dhessin...
SPCA2013 - SharePoint Nightmares - Coding Patterns and Practices
SPCA2013 - SharePoint Nightmares - Coding Patterns and Practices
SPCA2013 - SharePoint Nightmares - Coding Patterns and Practices
SPCA2013 - SharePoint Nightmares - Coding Patterns and Practices
SPCA2013 - SharePoint Nightmares - Coding Patterns and Practices
SPCA2013 - SharePoint Nightmares - Coding Patterns and Practices
SPCA2013 - SharePoint Nightmares - Coding Patterns and Practices
SPCA2013 - SharePoint Nightmares - Coding Patterns and Practices
Upcoming SlideShare
Loading in...5
×

SPCA2013 - SharePoint Nightmares - Coding Patterns and Practices

1,701

Published on

SharePoint Nightmares - Coding Patterns and Practices

Published in: Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,701
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
52
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "SPCA2013 - SharePoint Nightmares - Coding Patterns and Practices"

  1. 1. SharePoint Nightmares Coding Patterns and Practices Donald Hessing | @dhessing
  2. 2. 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 Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 3
  3. 3. Agenda 1. 2. 3. 4. 5. SharePoint Anti-Patterns Data Access Dispose and PowerShell REST versus CSOM SharePoint provisioning techniques Demos:  Service Locator Pattern 2010/2013  PowerShell Dispose Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 4
  4. 4. SharePoint Anti-Patterns
  5. 5. True or False web.Lists[“Pages”] == web.Lists[“Pages”] Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 7
  6. 6. 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(); Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 9
  7. 7. BDEADEE2-C265-11D0-BCED-00A0C90AB50F SP.SPRequest
  8. 8. SP.SPRequest Microsoft.SharePoint.dll SPRequest SPSite _m_Request : SPRequest Unmanaged OWSSVR.DLL SP.SPRequest (Unmanaged) ClassID: BDEADEE2-C265-11D0-BCED-00A0C90AB50F Unmanaged Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 11
  9. 9. 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 OWSSVR.DLL SP.SPRequest (Unmanaged) ClassID: BDEADEE2-C265-11D0-BCED-00A0C90AB50F More: http://hristopavlov.wordpress.com/2009/01/19/understanding-sharepoint-sprequest/ Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 12
  10. 10. Anti Pattern SPList[] SPS.SPRequest .EnabledAttachments (false) 1: web.Lists[“Events”].EnableAttachments = false; 2: web.Lists[“Events”].Update(); SPS.SPRequest .EnabledAttachments (true) Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 13
  11. 11. 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()); } Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 14
  12. 12. 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! Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 15
  13. 13. 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()); } Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 16
  14. 14. 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 Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 17
  15. 15. Tools… See “Building a SP Factory” SharePoint 2013 SharePoint 2010  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 • • Only tool for SharePoint artefacts, metrics, feature dependency, managed code and C# analyses! Includes TFS and 3th Party integration (FXCop, JSLint,CAT.NET) Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 18
  16. 16. (Remote) Event Receivers Do not use for… Remote Event Receivers  Setting Unique permissions on large  Remote event receivers are libraries or sites based on meta data or implemented as a webservice endpoint person hosted on-premise or Windows Azure.  Synchronize or mirroring solutions  NO Guaranteed delivery!  Mixing list data and relational data  NO Retry like normal messaging integrity solutions (some relational data infrastructure gives you stored in SQL Server)  If you need guaranteed delivery, it’s better to use the new workflow model! Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 19
  17. 17. Inherited Permissions Web object 1 Document library object 1 Folder object 1 Item 1 object 1 Item 2 object + User 2 (Reader) 1 Item 3 object Scope 1 1 + User 3 (Full Control) + User 6 (Contributor) Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 20
  18. 18. Fine Grained Permissions Scope 2 + User 5 (Reader) Web object 1 Document library object 1 Scope 3 2 Item 1 object + User 2 (Limited Access) + User 1 (Limited Access) Folder object 3 Item 2 object 4 Item 3 object + User 2 (Reader) 5 + User 1 (Contributor) Scope 4 Scope 1 + User 3 (Full Control) + User 6 (Contributor) + User 1 (Limited Access) + User 2 (Limited Access) + User 5 (Limited Access) + User 2 (Contributor) Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 21
  19. 19. Service Locator Pattern
  20. 20. 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 Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 25
  21. 21. 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 Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 26
  22. 22. Example Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 27
  23. 23. DEMO Service Locator and Repository Pattern Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 28
  24. 24. 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 Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 29
  25. 25. PowerShell and Dispose()
  26. 26. 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 Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 31
  27. 27. 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 Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 32
  28. 28. 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 } Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 33
  29. 29. Start-SPAssignment & Stop-SPAssignment  Introduced in SharePoint 2010 to overcome memory pressure  Manages objects for the purpose of proper disposal  SPWeb  SPSite  SPSiteAdministration Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 35
  30. 30. SPAssignment - Global SCOPE Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 36
  31. 31. SPAssignment Namespaces SCOPE SCOPE Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 37
  32. 32. 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) Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 38
  33. 33. PowerShell - CSOM Roel Hans Bethlehem: “Extending PowerShell with CSOM” http://sponlinecmdlets.codeplex.com/ Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 39
  34. 34. DEMO Service Locator and Repository Pattern SP2010 Service Locator SP2013 Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 40
  35. 35. App Patterns
  36. 36. App-Model Support Hosting type SharePoint Hosted 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 configuration http://blogs.technet.com/b/speschka/archive/2012/12/07/using-sharepoint-apps-with-saml-and-fba-sites-in-sharepoint-2013.aspx Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 42
  37. 37. CSOM versus REST
  38. 38. REST versus CSOM SharePoint Foundation User Profile Search Taxonomy Feeds More… _api SharePoint Execute Query Client JavaScript Library Silverlight Library OData / REST .Net CLR Library Clients SP Hosted App Windows Phone Auto Hosted App SP Hosted App Windows 8 RT iOS, PHP, Ruby,etc Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 44
  39. 39. 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 √ X/√ √ Supports jQuery, plugins √ X Environment independent √ X Well documented Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 45
  40. 40. Links  http://spohelper.codeplex.com/  http://www.sharepointnutsandbolts.com/  http://blogs.technet.com/b/speschka/archive/2012/12/07/using-sharepointapps-with-saml-and-fba-sites-in-sharepoint-2013.aspx  http://www.shillier.com/default.aspx  http://www.slideshare.net/bobbyschang/sharepoint-permissions-worstpractices Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 47
  41. 41. 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! Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 48
  42. 42. Thank You! 01010100 01101000 01100001 01101110 01101011 00100000 01011001 01101111 01110101 0100001 Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 49
  43. 43. 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 Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 50
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×