SPCA2013 - SharePoint Nightmares - Coding Patterns and Practices
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

SPCA2013 - SharePoint Nightmares - Coding Patterns and Practices

on

  • 1,596 views

SharePoint Nightmares - Coding Patterns and Practices

SharePoint Nightmares - Coding Patterns and Practices

Statistics

Views

Total Views
1,596
Views on SlideShare
1,596
Embed Views
0

Actions

Likes
0
Downloads
35
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

SPCA2013 - SharePoint Nightmares - Coding Patterns and Practices Presentation Transcript

  • 1. SharePoint Nightmares Coding Patterns and Practices Donald Hessing | @dhessing
  • 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. 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. SharePoint Anti-Patterns
  • 5. True or False web.Lists[“Pages”] == web.Lists[“Pages”] Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 7
  • 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. BDEADEE2-C265-11D0-BCED-00A0C90AB50F SP.SPRequest
  • 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. 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. 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. 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. 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. 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. 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. 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. (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. 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. 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. Service Locator Pattern
  • 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. 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. Example Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 27
  • 23. DEMO Service Locator and Repository Pattern Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 28
  • 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. PowerShell and Dispose()
  • 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. 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. 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. 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. SPAssignment - Global SCOPE Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 36
  • 31. SPAssignment Namespaces SCOPE SCOPE Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 37
  • 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. PowerShell - CSOM Roel Hans Bethlehem: “Extending PowerShell with CSOM” http://sponlinecmdlets.codeplex.com/ Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 39
  • 34. DEMO Service Locator and Repository Pattern SP2010 Service Locator SP2013 Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 40
  • 35. App Patterns
  • 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. CSOM versus REST
  • 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. 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. 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. 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. Thank You! 01010100 01101000 01100001 01101110 01101011 00100000 01011001 01101111 01110101 0100001 Presentation Title | Date Copyright © Capgemini 2012. All Rights Reserved 49
  • 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