SlideShare a Scribd company logo
Modern SharePoint Development
- techniques for moving code off
SharePoint servers
Chris O’Brien – MVP
www.sharepointnutsandbolts.com
About me
 Independent Consultant
 Head of Development, Content and Code
 Blog: www.sharepointnutsandbolts.com
 Twitter: @ChrisO_Brien
 LinkedIn: http://uk.linkedin.com/in/
chrisobrienmvp
Agenda
 Background – remote code for the win
 Core techniques/references:
 Remote Event Receivers (e.g. in Azure)
 PowerShell and CSOM – a winning combo
 AMS samples
 The “optimum position” debate
 Summary
SharePoint as a dev platform
 8 years of farm solutions
– we were hooked!
 The horror:
 Objects not disposed
 Dodgy web parts
 API bad practices
 Timer job proliferation
 ..and more
SharePoint – the bad parts
 Too easy for custom
code to bring
SharePoint down
 Result – SharePoint
got a bad rep
 No good for Office
365!
What is cloud-friendly dev?
No - farm solutions/files deployed to _LAYOUTS
• No feature receivers
• No timer jobs
• No event receivers
Yes - sandbox solutions, but no code in sandbox solutions
Yes - apps (aka remote code)
* Deployable in Office 365 *
• No custom field controls
• No site definitions
• No custom web parts (due to use of code)
Benefits even to on-premises projects?
• One app can no longer bring SharePoint down
Better isolation
• Fewer SharePoint artifacts to audit/upgrade
Simpler upgrade (e.g. to “SharePoint 2015”)
• Less rework to transition
Keeps door open to Office 365
Code implementation mapping
Farm solution Remote code/apps
Timer job Scheduled process in Azure (CSOM to
read/write to SP)
Event receiver Remote event receiver
Custom field control JSLink
Site definition WebTemplate in NCSS *
Run With Elevated Privileges App-only authentication
Custom web parts/user control App part, or JavaScript + DOM
Feature receiver, DelegateControl,
application page
None – but other approaches possible
* NCSS = no-code sandbox solution
Problem areas (examples)
• Custom authentication
• Custom claims provider (needed for People
Picker in SAML claims)
• Admin UI customisations
Not possible
• Branding of OneDrive sites (personal sites)
• Remote provisioning (of site collections)
Possible, but
involved:
NOTE! The AMS samples cover these scenarios
The remote code model
Remote code – what you need to know
 Various flavours:
 “Off-box” server-side code (CSOM)
 Powershell/CSOM scripts (CSOM)
 JavaScript code (JSOM/REST)
 An app is needed for server code (trust)
 Required to use app authentication (OAuth or S2S)
 Alternative – user authentication with password and
SharePointOnlineCredential (e.g. PS/CSOM script)
Examples of remote server-side code
(CSOM)
 Pages in an app (e.g. ASP.NET – in Azure or IIS)
 User goes OUT of SharePoint and into remote app
 App pages in an app part (IFrame) in SharePoint page
 User stays in SharePoint, IFrame brings remote page in
 Tip! This is a key “hook” to execute remote code 
 Services
 Remote Event Receivers
 App events | List/list item events | WebProvisioned event | etc.
Remote provisioning code – considerations
 JavaScript-based approaches can be interesting:
 Custom control added to site home page
 When first user (or admin) hits site, shows a “Getting your site
ready” message
 JSOM code runs to provision fields/content types/pages etc.
 Sets flag(s) on web property bag when done – next run checks
 From the server-side (CSOM) approaches:
 The WebProvisioned event (RER) can be a useful hook!
Remote code (CSOM) – where?
 Options include:
 Azure Websites (VM role not needed)
 Some IIS servers (usually inside your network)
 Pros/cons
Pros – Azure Websites Cons - Azure Websites
+ Easy. Even a dev can do it! - Typically need to implement authentication
(since accessible on internet)
+ Microsoft take care of SSL,
external access, load-balancing,
high availability etc.
- Need to implement Azure if not done
already (e.g. who pays the bill?)
Remote Event Receivers
 Key pillar of “remote code” model
 Effectively a WCF service somewhere callable
 List/list item receivers
 WebProvisioned receiver
 App events:
 AppInstalled, AppUpgraded, AppUninstalled (also –ing)
 *No* equivalent for Feature Receivers
Remote Event Receivers – key steps
1. Create provider-hosted app (and add RER code)
2. Create Azure Website (if doesn’t exist)
3. Publish remote code to Azure
4. Register app with AppRegNew.aspx (or Seller Dashboard)
5. Publish app package, put in app catalog
6. Add to site
7. Associate RERs with lists (e.g. with PowerShell/CSOM)
8. Test!
DEMO:
Remote code in Azure
(Remote Event Receivers)
Click “next slide” to see this demo
on YouTube, or use link:
https://www.youtube.com/watch?v=G
4T1eLg0_to
PowerShell and CSOM
PowerShell in Office 365
0
100
200
300
400
500
600
700
800
900
Poweshell cmdlets
PS cmdlets
On-premises SharePoint Online
On-premises SharePoint Online
774 30
PowerShell + CSOM – don’t confuse with:
 The MSOL/Azure AD cmdlets
 Generic Office 365 PowerShell – add
users, groups etc.
 The SPO cmdlets
 SharePoint Online PowerShell –
create site collections etc.
Instead, use STANDARD PowerShell
command prompt for PS + CSOM
PowerShell + CSOM – how it works
 Using PS ability to call any .NET object
 Need to have CSOM DLLs available
 Run script from a SharePoint environment
OR
 Install “client redistributable” (or manually copy DLLs)
PowerShell + CSOM – what it looks like
Add-Type -Path "c:LibMicrosoft.SharePoint.Client.dll"
Add-Type -Path "c:LibMicrosoft.SharePoint.Client.Runtime.dll"
Add-Type -Path "c:LibMicrosoft.SharePoint.Client.Taxonomy.dll"
# connect/authenticate to SharePoint Online and get ClientContext object..
$clientContext = New-Object Microsoft.SharePoint.Client.ClientContext($url)
$credentials = New-Object
Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $securePassword)
$clientContext.Credentials = $credentials
# do something..
$rootWeb = $clientContext.Web
$clientContext.Load($rootWeb)
$clientContext.ExecuteQuery()
$rootWeb.Title = "Updated from PS/CSOM script"
$clientContext.ExecuteQuery()
DEMO:
PowerShell + CSOM scripts
Click “next slide” to see this demo
on YouTube, or use link:
http://youtu.be/yuD21t-C9kQ
POWERSHELL + CSOM
PowerShell + CSOM – advanced operations
Importing/exporting taxonomy terms
Importing/exporting search schema
Recreating site collections
Sandbox solution deployment – no API for this!
Activating web templates
Create publishing pages
Uploading files
Microsoft's App Model Samples
AMS – why you should care
 “Office App Model Samples” –
http://officeamscodeplex.com
 Version 2 released May 2014
 Core CSOM helper libraries,
small/large samples etc.
Because it’s AWESOME – it’s the “helper library” you
dreamed about, plus samples you’d use!
AMS – what’s in there (AKA the “eye test”
slide )
Branding
• DeployThemeToWeb
• SetThemeToWeb
• SetSiteLogo
Features
• ActivateFeature
• DeactivateFeature
Fields and content types
• AddContentTypeToList
• AddFieldToContentType
• CreateContentType
• CreateField
• CreateTaxonomyField
(including wire-up)
Files and folders
• UploadDocumentToLibrary
• UploadDocumentToFolder
• CreateFolder
Pages
• AddWebPartToWebPartPag
e
• AddWebPartToWikiPage
• DeleteWebPart
• AddHtmlToWikiPage
Sites
• AddSite
• AddSiteCollectionTenant
• MySiteSearch (CSOM
search)
• ProcessQuery (CSOM
search)
• SetPropertyBagValue
Security
• AddAdministrators
• GetAdministrators
• GetSharingCapabilitiesTena
nt
Navigation
• AddCustomAction
• AddNavigationNode
• DeleteAllQuickLaunchNodes
List
• AddList
• AddDocumentLibrary
• GetList
• UpdateListVersioning
See – I *told* you it was AWESOME!
AMS – what’s (really) in there
Branding
Create fields
and content
types
Create
lists/libraries
Create
sites/site
collections
Upload files
Configure
navigation
App code (CSOM) to support lots of “collab” scenarios:
AMS – COB’s 5 favourite scenarios
1. Modifying OneDrive sites (e.g. branding)
2. Remote “timer job”
3. Custom site collection creation (“templating”)
4. Adding Remote Event Receivers to host web
5. Cross site collection navigation (term set-driven)
6. Bulk update user profiles
AMS – COB’s 5 favourite core methods
1. CreateTaxonomyField (including wire-up)
2. CreateField/CreateContentType
3. AddList/AddDocumentLibrary
4. UploadDocumentToLibrary
5. AddCustomAction
Other useful AMS artifacts
 Controls for use in provider-hosted apps:
 “People picker”  “Taxonomy picker”
DEMO:
AMS samples
Click “next slide” to see this demo
on YouTube, or use link:
http://youtu.be/GISWaLZ3r_4
The optimum position (for Microsoft?)
 You use all the techniques we’ve discussed, so that..
 ..all your customizations could be deployed to Office 365
 But also:
MSFT optimum Reason But consider!
NO custom master
page
MSFT want to push updates
to master pages
Your customisations could
break (e.g. DOM change)
NO XML for
provisioning, remote
code used instead
Fields/ctypes in XML causes
them upgrade problems
Unclear if any benefit to
implementor
Summary
 Many clients (not just Office 365 orgs) will want “modern”
cloud-friendly development
 Some key
elements:
 The “optimum position” debate is worth following
Apps
No-Code
Sandbox
Solutions
PS/CSOM
scripts
Remote
Event
Receivers
Azure
AMS
samples
Thank you for attending!
www.sharepointnutsandbolts.com
@ChrisO_Brien

More Related Content

What's hot (20)

PPTX
ECS19 Bert Jansen - Modernizing your existing sites
European Collaboration Summit
 
PDF
O365Con18 - Site Templates, Site Life Cycle Management and Modern SharePoint ...
NCCOMMS
 
PPTX
SharePoint Framework, React and Office UI SPS Paris 2016 - d01
Sonja Madsen
 
PPTX
Application Lifecycle Management for Office 365 development
Chris O'Brien
 
PPTX
Chris O'Brien - Introduction to the SharePoint Framework for developers
Chris O'Brien
 
PDF
[Struyf] Automate Your Tasks With Azure Functions
European Collaboration Summit
 
PDF
Practical management of development & QA environments for SharePoint 2013
SharePointRadi
 
PPTX
Do's and don'ts for Office 365 development
Chris O'Brien
 
PDF
O365Con18 - PowerApps build custom forms for SharePoint with Azure Maps - Bra...
NCCOMMS
 
PPTX
Chris O'Brien - Building AI into Power Platform solutions
Chris O'Brien
 
PDF
JavaScript and jQuery for SharePoint Developers
Rob Windsor
 
PDF
Sviluppare app per office
Fabio Franzini
 
PDF
SPUnite17 Timer Jobs Event Handlers
NCCOMMS
 
PPTX
Office 2013 loves web developers slide
Fabio Franzini
 
PPTX
COB ESPC18 - Rich PowerApps with offline support
Chris O'Brien
 
PPTX
Developing Apps for SharePoint Store
Kashif Imran
 
PPTX
ECS19 - Vesa Juvonen - SharePoint and Office 365 Development PowerClass
European Collaboration Summit
 
PPTX
[Vončina] Configuring SharePoint 2016 for BI Scenarios
European Collaboration Summit
 
PDF
Come riprogettare le attuali farm solution di share point con il nuovo modell...
Fabio Franzini
 
PPTX
Building SharePoint Single Page Applications Using AngularJS
SharePointInstitute
 
ECS19 Bert Jansen - Modernizing your existing sites
European Collaboration Summit
 
O365Con18 - Site Templates, Site Life Cycle Management and Modern SharePoint ...
NCCOMMS
 
SharePoint Framework, React and Office UI SPS Paris 2016 - d01
Sonja Madsen
 
Application Lifecycle Management for Office 365 development
Chris O'Brien
 
Chris O'Brien - Introduction to the SharePoint Framework for developers
Chris O'Brien
 
[Struyf] Automate Your Tasks With Azure Functions
European Collaboration Summit
 
Practical management of development & QA environments for SharePoint 2013
SharePointRadi
 
Do's and don'ts for Office 365 development
Chris O'Brien
 
O365Con18 - PowerApps build custom forms for SharePoint with Azure Maps - Bra...
NCCOMMS
 
Chris O'Brien - Building AI into Power Platform solutions
Chris O'Brien
 
JavaScript and jQuery for SharePoint Developers
Rob Windsor
 
Sviluppare app per office
Fabio Franzini
 
SPUnite17 Timer Jobs Event Handlers
NCCOMMS
 
Office 2013 loves web developers slide
Fabio Franzini
 
COB ESPC18 - Rich PowerApps with offline support
Chris O'Brien
 
Developing Apps for SharePoint Store
Kashif Imran
 
ECS19 - Vesa Juvonen - SharePoint and Office 365 Development PowerClass
European Collaboration Summit
 
[Vončina] Configuring SharePoint 2016 for BI Scenarios
European Collaboration Summit
 
Come riprogettare le attuali farm solution di share point con il nuovo modell...
Fabio Franzini
 
Building SharePoint Single Page Applications Using AngularJS
SharePointInstitute
 

Similar to Chris O'Brien - Modern SharePoint development: techniques for moving code off SharePoint servers (20)

PDF
Spca2014 chris o brien modern share-point development - techniques for off-...
NCCOMMS
 
PDF
SPSToronto 2015 - Managing Office365 with PowerShell and CSOM
amitvasu
 
PPTX
Module 1 - Introduction to the SharePoint Developer Landscape .pptx
AbdulalimBhnsawy
 
PPTX
Share point development 101
Becky Bertram
 
PPTX
[Pinto] Is my SharePoint Development team properly enlighted?
European Collaboration Summit
 
PPTX
SPSDenver - Wrapping Your Head Around the SharePoint Beast
Mark Rackley
 
PPTX
Developing SharePoint 2013 apps with Visual Studio 2012 - Microsoft TechDays ...
Bram de Jager
 
PPTX
SharePoint 2013 - What's New
AdventosConsulting
 
PPTX
Module 1 - Introduction to the SharePoint Developer Landscape.pptx
AnkurBhardwaj87
 
PPTX
2/15/2012 - Wrapping Your Head Around the SharePoint Beast
Mark Rackley
 
PDF
Tutorial, Part 1: SharePoint 101: Jump-Starting the Developer by Rob Windsor ...
SPTechCon
 
PPTX
Prepararsi a spostare le proprie applicazioni share point su office 365
Giuseppe Marchi
 
PDF
Microsoft Sharepoint 2007 Development Unleashed 1st Edition Kevin Hoffman
zanjokottol46
 
PPTX
SPTechCon Austin 2019 - From SharePoint to Office 365 development
Sébastien Levert
 
PPTX
Custom Development in SharePoint – What are my options now?
Talbott Crowell
 
PDF
Spsct15 power shell_csom - amit vasu
amitvasu
 
PPTX
Introduction to SharePoint 2013
girish goudar
 
PPTX
aOS Canadian Tour - Toronto - From SharePoint to Office 365 Development
Sébastien Levert
 
PPTX
aOS Canadian Tour - Ottawa - From SharePoint to Office 365 Development
Sébastien Levert
 
PPTX
aOS Canadian Tour - Montreal - From SharePoint to Office 365 Development
Sébastien Levert
 
Spca2014 chris o brien modern share-point development - techniques for off-...
NCCOMMS
 
SPSToronto 2015 - Managing Office365 with PowerShell and CSOM
amitvasu
 
Module 1 - Introduction to the SharePoint Developer Landscape .pptx
AbdulalimBhnsawy
 
Share point development 101
Becky Bertram
 
[Pinto] Is my SharePoint Development team properly enlighted?
European Collaboration Summit
 
SPSDenver - Wrapping Your Head Around the SharePoint Beast
Mark Rackley
 
Developing SharePoint 2013 apps with Visual Studio 2012 - Microsoft TechDays ...
Bram de Jager
 
SharePoint 2013 - What's New
AdventosConsulting
 
Module 1 - Introduction to the SharePoint Developer Landscape.pptx
AnkurBhardwaj87
 
2/15/2012 - Wrapping Your Head Around the SharePoint Beast
Mark Rackley
 
Tutorial, Part 1: SharePoint 101: Jump-Starting the Developer by Rob Windsor ...
SPTechCon
 
Prepararsi a spostare le proprie applicazioni share point su office 365
Giuseppe Marchi
 
Microsoft Sharepoint 2007 Development Unleashed 1st Edition Kevin Hoffman
zanjokottol46
 
SPTechCon Austin 2019 - From SharePoint to Office 365 development
Sébastien Levert
 
Custom Development in SharePoint – What are my options now?
Talbott Crowell
 
Spsct15 power shell_csom - amit vasu
amitvasu
 
Introduction to SharePoint 2013
girish goudar
 
aOS Canadian Tour - Toronto - From SharePoint to Office 365 Development
Sébastien Levert
 
aOS Canadian Tour - Ottawa - From SharePoint to Office 365 Development
Sébastien Levert
 
aOS Canadian Tour - Montreal - From SharePoint to Office 365 Development
Sébastien Levert
 
Ad

More from Chris O'Brien (15)

PPTX
Chris OBrien - Azure DevOps for managing work
Chris O'Brien
 
PPTX
Chris O'Brien - Ignite 2019 announcements and selected roadmaps
Chris O'Brien
 
PPTX
COB - PowerApps - the good, the bad and the ugly - early 2018
Chris O'Brien
 
PPTX
Chris O'Brien - Intro to Power BI for Office 365 devs (March 2017)
Chris O'Brien
 
PPTX
Deep dive into SharePoint 2013 hosted apps - Chris OBrien
Chris O'Brien
 
PPTX
Customizing the SharePoint 2013 user interface with JavaScript - Chris OBrien
Chris O'Brien
 
PPTX
SP2013 for Developers - Chris O'Brien
Chris O'Brien
 
PPTX
Getting to grips with SharePoint 2013 apps - Chris O'Brien
Chris O'Brien
 
PPTX
SharePoint Ribbon Deep Dive
Chris O'Brien
 
PPTX
Automated Builds And UI Testing in SharePoint 2010 Development
Chris O'Brien
 
PPTX
Optimizing SharePoint 2010 Internet Sites
Chris O'Brien
 
PPTX
Managing the SharePoint 2010 Application Lifecycle - Part 2
Chris O'Brien
 
PPTX
Managing the SharePoint 2010 Application Lifecycle - Part 1
Chris O'Brien
 
PPT
SharePoint workflow deep-dive
Chris O'Brien
 
PPT
SharePoint Web Content Management - Lessons Learnt/top 5 tips
Chris O'Brien
 
Chris OBrien - Azure DevOps for managing work
Chris O'Brien
 
Chris O'Brien - Ignite 2019 announcements and selected roadmaps
Chris O'Brien
 
COB - PowerApps - the good, the bad and the ugly - early 2018
Chris O'Brien
 
Chris O'Brien - Intro to Power BI for Office 365 devs (March 2017)
Chris O'Brien
 
Deep dive into SharePoint 2013 hosted apps - Chris OBrien
Chris O'Brien
 
Customizing the SharePoint 2013 user interface with JavaScript - Chris OBrien
Chris O'Brien
 
SP2013 for Developers - Chris O'Brien
Chris O'Brien
 
Getting to grips with SharePoint 2013 apps - Chris O'Brien
Chris O'Brien
 
SharePoint Ribbon Deep Dive
Chris O'Brien
 
Automated Builds And UI Testing in SharePoint 2010 Development
Chris O'Brien
 
Optimizing SharePoint 2010 Internet Sites
Chris O'Brien
 
Managing the SharePoint 2010 Application Lifecycle - Part 2
Chris O'Brien
 
Managing the SharePoint 2010 Application Lifecycle - Part 1
Chris O'Brien
 
SharePoint workflow deep-dive
Chris O'Brien
 
SharePoint Web Content Management - Lessons Learnt/top 5 tips
Chris O'Brien
 
Ad

Recently uploaded (20)

PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
PDF
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PDF
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PDF
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
PDF
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
PDF
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
PDF
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
PDF
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
PDF
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PDF
Biography of Daniel Podor.pdf
Daniel Podor
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PDF
Blockchain Transactions Explained For Everyone
CIFDAQ
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
Biography of Daniel Podor.pdf
Daniel Podor
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
Blockchain Transactions Explained For Everyone
CIFDAQ
 

Chris O'Brien - Modern SharePoint development: techniques for moving code off SharePoint servers

  • 1. Modern SharePoint Development - techniques for moving code off SharePoint servers Chris O’Brien – MVP www.sharepointnutsandbolts.com
  • 2. About me  Independent Consultant  Head of Development, Content and Code  Blog: www.sharepointnutsandbolts.com  Twitter: @ChrisO_Brien  LinkedIn: http://uk.linkedin.com/in/ chrisobrienmvp
  • 3. Agenda  Background – remote code for the win  Core techniques/references:  Remote Event Receivers (e.g. in Azure)  PowerShell and CSOM – a winning combo  AMS samples  The “optimum position” debate  Summary
  • 4. SharePoint as a dev platform  8 years of farm solutions – we were hooked!  The horror:  Objects not disposed  Dodgy web parts  API bad practices  Timer job proliferation  ..and more
  • 5. SharePoint – the bad parts  Too easy for custom code to bring SharePoint down  Result – SharePoint got a bad rep  No good for Office 365!
  • 6. What is cloud-friendly dev? No - farm solutions/files deployed to _LAYOUTS • No feature receivers • No timer jobs • No event receivers Yes - sandbox solutions, but no code in sandbox solutions Yes - apps (aka remote code) * Deployable in Office 365 * • No custom field controls • No site definitions • No custom web parts (due to use of code)
  • 7. Benefits even to on-premises projects? • One app can no longer bring SharePoint down Better isolation • Fewer SharePoint artifacts to audit/upgrade Simpler upgrade (e.g. to “SharePoint 2015”) • Less rework to transition Keeps door open to Office 365
  • 8. Code implementation mapping Farm solution Remote code/apps Timer job Scheduled process in Azure (CSOM to read/write to SP) Event receiver Remote event receiver Custom field control JSLink Site definition WebTemplate in NCSS * Run With Elevated Privileges App-only authentication Custom web parts/user control App part, or JavaScript + DOM Feature receiver, DelegateControl, application page None – but other approaches possible * NCSS = no-code sandbox solution
  • 9. Problem areas (examples) • Custom authentication • Custom claims provider (needed for People Picker in SAML claims) • Admin UI customisations Not possible • Branding of OneDrive sites (personal sites) • Remote provisioning (of site collections) Possible, but involved: NOTE! The AMS samples cover these scenarios
  • 11. Remote code – what you need to know  Various flavours:  “Off-box” server-side code (CSOM)  Powershell/CSOM scripts (CSOM)  JavaScript code (JSOM/REST)  An app is needed for server code (trust)  Required to use app authentication (OAuth or S2S)  Alternative – user authentication with password and SharePointOnlineCredential (e.g. PS/CSOM script)
  • 12. Examples of remote server-side code (CSOM)  Pages in an app (e.g. ASP.NET – in Azure or IIS)  User goes OUT of SharePoint and into remote app  App pages in an app part (IFrame) in SharePoint page  User stays in SharePoint, IFrame brings remote page in  Tip! This is a key “hook” to execute remote code   Services  Remote Event Receivers  App events | List/list item events | WebProvisioned event | etc.
  • 13. Remote provisioning code – considerations  JavaScript-based approaches can be interesting:  Custom control added to site home page  When first user (or admin) hits site, shows a “Getting your site ready” message  JSOM code runs to provision fields/content types/pages etc.  Sets flag(s) on web property bag when done – next run checks  From the server-side (CSOM) approaches:  The WebProvisioned event (RER) can be a useful hook!
  • 14. Remote code (CSOM) – where?  Options include:  Azure Websites (VM role not needed)  Some IIS servers (usually inside your network)  Pros/cons Pros – Azure Websites Cons - Azure Websites + Easy. Even a dev can do it! - Typically need to implement authentication (since accessible on internet) + Microsoft take care of SSL, external access, load-balancing, high availability etc. - Need to implement Azure if not done already (e.g. who pays the bill?)
  • 15. Remote Event Receivers  Key pillar of “remote code” model  Effectively a WCF service somewhere callable  List/list item receivers  WebProvisioned receiver  App events:  AppInstalled, AppUpgraded, AppUninstalled (also –ing)  *No* equivalent for Feature Receivers
  • 16. Remote Event Receivers – key steps 1. Create provider-hosted app (and add RER code) 2. Create Azure Website (if doesn’t exist) 3. Publish remote code to Azure 4. Register app with AppRegNew.aspx (or Seller Dashboard) 5. Publish app package, put in app catalog 6. Add to site 7. Associate RERs with lists (e.g. with PowerShell/CSOM) 8. Test!
  • 17. DEMO: Remote code in Azure (Remote Event Receivers) Click “next slide” to see this demo on YouTube, or use link: https://www.youtube.com/watch?v=G 4T1eLg0_to
  • 19. PowerShell in Office 365 0 100 200 300 400 500 600 700 800 900 Poweshell cmdlets PS cmdlets On-premises SharePoint Online On-premises SharePoint Online 774 30
  • 20. PowerShell + CSOM – don’t confuse with:  The MSOL/Azure AD cmdlets  Generic Office 365 PowerShell – add users, groups etc.  The SPO cmdlets  SharePoint Online PowerShell – create site collections etc. Instead, use STANDARD PowerShell command prompt for PS + CSOM
  • 21. PowerShell + CSOM – how it works  Using PS ability to call any .NET object  Need to have CSOM DLLs available  Run script from a SharePoint environment OR  Install “client redistributable” (or manually copy DLLs)
  • 22. PowerShell + CSOM – what it looks like Add-Type -Path "c:LibMicrosoft.SharePoint.Client.dll" Add-Type -Path "c:LibMicrosoft.SharePoint.Client.Runtime.dll" Add-Type -Path "c:LibMicrosoft.SharePoint.Client.Taxonomy.dll" # connect/authenticate to SharePoint Online and get ClientContext object.. $clientContext = New-Object Microsoft.SharePoint.Client.ClientContext($url) $credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $securePassword) $clientContext.Credentials = $credentials # do something.. $rootWeb = $clientContext.Web $clientContext.Load($rootWeb) $clientContext.ExecuteQuery() $rootWeb.Title = "Updated from PS/CSOM script" $clientContext.ExecuteQuery()
  • 23. DEMO: PowerShell + CSOM scripts Click “next slide” to see this demo on YouTube, or use link: http://youtu.be/yuD21t-C9kQ
  • 25. PowerShell + CSOM – advanced operations Importing/exporting taxonomy terms Importing/exporting search schema Recreating site collections Sandbox solution deployment – no API for this! Activating web templates Create publishing pages Uploading files
  • 27. AMS – why you should care  “Office App Model Samples” – http://officeamscodeplex.com  Version 2 released May 2014  Core CSOM helper libraries, small/large samples etc. Because it’s AWESOME – it’s the “helper library” you dreamed about, plus samples you’d use!
  • 28. AMS – what’s in there (AKA the “eye test” slide ) Branding • DeployThemeToWeb • SetThemeToWeb • SetSiteLogo Features • ActivateFeature • DeactivateFeature Fields and content types • AddContentTypeToList • AddFieldToContentType • CreateContentType • CreateField • CreateTaxonomyField (including wire-up) Files and folders • UploadDocumentToLibrary • UploadDocumentToFolder • CreateFolder Pages • AddWebPartToWebPartPag e • AddWebPartToWikiPage • DeleteWebPart • AddHtmlToWikiPage Sites • AddSite • AddSiteCollectionTenant • MySiteSearch (CSOM search) • ProcessQuery (CSOM search) • SetPropertyBagValue Security • AddAdministrators • GetAdministrators • GetSharingCapabilitiesTena nt Navigation • AddCustomAction • AddNavigationNode • DeleteAllQuickLaunchNodes List • AddList • AddDocumentLibrary • GetList • UpdateListVersioning See – I *told* you it was AWESOME!
  • 29. AMS – what’s (really) in there Branding Create fields and content types Create lists/libraries Create sites/site collections Upload files Configure navigation App code (CSOM) to support lots of “collab” scenarios:
  • 30. AMS – COB’s 5 favourite scenarios 1. Modifying OneDrive sites (e.g. branding) 2. Remote “timer job” 3. Custom site collection creation (“templating”) 4. Adding Remote Event Receivers to host web 5. Cross site collection navigation (term set-driven) 6. Bulk update user profiles
  • 31. AMS – COB’s 5 favourite core methods 1. CreateTaxonomyField (including wire-up) 2. CreateField/CreateContentType 3. AddList/AddDocumentLibrary 4. UploadDocumentToLibrary 5. AddCustomAction
  • 32. Other useful AMS artifacts  Controls for use in provider-hosted apps:  “People picker”  “Taxonomy picker”
  • 33. DEMO: AMS samples Click “next slide” to see this demo on YouTube, or use link: http://youtu.be/GISWaLZ3r_4
  • 34. The optimum position (for Microsoft?)  You use all the techniques we’ve discussed, so that..  ..all your customizations could be deployed to Office 365  But also: MSFT optimum Reason But consider! NO custom master page MSFT want to push updates to master pages Your customisations could break (e.g. DOM change) NO XML for provisioning, remote code used instead Fields/ctypes in XML causes them upgrade problems Unclear if any benefit to implementor
  • 35. Summary  Many clients (not just Office 365 orgs) will want “modern” cloud-friendly development  Some key elements:  The “optimum position” debate is worth following Apps No-Code Sandbox Solutions PS/CSOM scripts Remote Event Receivers Azure AMS samples
  • 36. Thank you for attending! www.sharepointnutsandbolts.com @ChrisO_Brien