SlideShare une entreprise Scribd logo
1  sur  76
SPFx: An ISV Insight to Microsoft’s latest
customization model
By: Shai Petel
Shai Petel
Director of Research and Development at KWizCom
MCT, MCPD
6 times MVP: SharePoint (2011-2016)
shai@kwizcom.com | @shaibs | http://kwizcom.blogspot.com
Focus:
 Publishing versions, upgrades
 Pushing updates through CDN
 Shared code and external libraries
 Custom PropertyPane properties
 Code, code, code.
SHAREPOINT DEVELOPMENT
MODELS
Overview of extensibility opportunities in SharePoint’s history
SharePoint Development Models
2001
STS
SPS
2003
SPS
WSS
2007
MOSS
WSS
2010
SharePoint Foundation
SharePoint Server
2013
SharePoint Foundation
SharePoint Server
SPO
SharePoint Online
Group sites *
2016
SharePoint Server
SharePoint Development Models
 2001
– ASP (no, I didn’t forget the
.Net)
– Page parts, tokens (_wpq_,
_wpr_)
– No clear packaging and
deployment
 2003
– Web parts (ASP.Net custom
controls)
– Packaged in CAB
 2007
– Features
– WSP package
 2010
– Timer jobs
– Sandbox
 2013
– SharePoint hosted apps add-
ins
– Provider hosted apps add-ins
– JSLink / CSR
 SPO
– SharePoint hosted apps add-
ins
– Provider hosted apps add-ins
– JSLink / CSR No code sandbox
solutions
– SharePoint Framework (SPFx)
WHAT IS SPFX?
Brief explanation of the SharePoint Framework
What is SPFx?
“a Page and Part model enables fully supported client-
side development for building SharePoint experiences,
easy integration with the SharePoint data and support
for open source tooling development.”
What is SPFx? - advantages
Runs in the context of the current user. No iFrames
There is a life cycle that the developer is involved in
It is framework agnostic *
Open source tool chain
Performance
Solutions approved by the tenant admin (or their
delegates)
Classic & modern pages
Can be used in noscript sites
What is SPFx? - disadvantages
SPO: up-to-date - on prem: only 2016, older build
Extremely big learning curve
Limited artifact types supported
Publishing updates ~
No support for the app store
DOES IT DELIVER?
SPFx compared to previous generations
CHOICE OF UI FRAMEWORK
How would you render the UI of your web part?
Choice of UI framework
 SPFx is framework agnostic by design. Really?
 This is the most important decision when building a
new project
Choice of UI framework
ReactJS - the clear leader & first class citizen
 This is the engine MSFT use themselves
 The PropertyPane is built on react, and the engine
wrapping your WebPart is too.
 The only Office UI Fabric components actively
supported by Microsoft
Choice of UI framework
KnockoutJS
 Good when you need dynamic templates (i.e. user
supply / customize HTML output)
 Lack of fabric components. Use FabricJS
 Building in --ship mode removes KO comments
Choice of UI framework
Handlebars, angular, etc…
Experiment, choose the one that fits your skills and
needs.
AngularJS has a good community supported
office UI fabric components library.
BUILDING YOUR SOLUTION
Building your solution
Building a new project
 Create a folder
 Run “yo @microsoft/sharepoint”
 Set name, description
Building your solution
Building a new project
 Select “WebPart”
Building your solution
Building a new project
 Select your JavaScript framework
Building your solution
Add several artifacts to a single package
 Currently only web parts are supported on prem
 Application Customizer, Field Customizer and
ListView Command Set – very limited & online only
 Add more artifacts by running
“yo @microsoft/sharepoint”
inside an existing project folder
PUBLISHING
Publishing your SPFx solution
Publishing
Content Delivery Network (CDN)
 Specify CDN in config/write-manifests.json
 Host script files, css, images, html
 Push minor fixes to clients
 Non-ISVs on SPO can use Office 365 public CDN
Publishing
Control production build file names
Running gulp --ship will produce a bundle file for
production:
 Default: react-web-
part.bundle_a4b2ffc1a3b03f7ce4b5bd78bdd7ac62.js
 Recommend: react-web-part.1.0.0.0.js
Publishing
Publish a package
1. Update web part version in config/package-solution.json
2. Run gulp --ship
3. Go to temp/deploy folder
4. Rename the JS file (I use {project}.{version}.js)
5. Edit the json file: replace the bundle JS file to the new name *
6. Run gulp package-solution --ship
7. Take your new packages from the SharePoint/solution folder
8. Drop your new JS to your CDN **
[optional steps]
Publishing
Publishing updates: Do I need to release a new
package?
 You might be able to push updates to your customers
 Check if your new version is backward compatible
 Track version via a static variable
Publishing
Publishing updates: Update a package
 When a new package is needed – follow “publish a
package” steps
 When a new package is not needed
1. Update BuildVersion in your code *
2. Run gulp --ship
3. Go to temp/deploy folder
4. Copy the new JS file content into your existing file on your CDN
5. To use your own minifier, drop the --ship flag, take the file from
the dist folder
Publishing
Installing / upgrading package
1. Upload package to the App Catalog
2. Trust the app
3. Fixed? A new version: delete old package first
DEVELOPMENT OPTIONS
Dev time environments and options
Development options - local workbench
gulp serve
https://localhost:4321/temp/workbench.html
Development options – online workbench
gulp serve --nobrowser
{spo site}/_layouts/15/workbench.aspx
Development options – classic/modern page
1. gulp --ship
2. gulp package-solution --ship
3. Publish to CDN
4. Deploy to catalog
5. Add app to your site*
Development options
Debugging using VSCode in Chrome
 Open VSCode, View->Extensions
 Install “Debugger for chrome”
Development options
Debugging using VSCode in Chrome
 Create launch.json
 Select your configuration
 Start gulp serve --nobrowser
 Press F5
DEPENDENCIES
Using npm modules
External dependencies
Legacy script (global)
Dependencies - npm
Bundling npm modules
 When you wish to use an npm available module
 If it is a small file, and not reused across many different
components
* Bundling includes this entire module inside your JS file.
Dependencies - npm
How?
 npm install {package} --save
 tsd install {package} --save (or create your own
typings {package}.d.ts)
In your web part code:
 import * as {object} from ‘{package}’
 import {object} from ‘{package}’
Dependencies - npm
External npm modules
 When you wish to use an npm available module
 If it is a large file, or reused across many different
components
* External modules will be loaded from a CDN
Dependencies - npm
How?
 Follow previous steps to load the npm module
 Mark this module as external, to prevent bundling:
– Edit config/config.json
– Add this under “externals” object:
“<package>”: “{path to js file}”
Dependencies - npm
Important!
 .gitignore excludes node_modules folder
 run “npm install” when moving computers
 Dependencies change and your project may break as
a result - npm shrinkwrap!
Dependencies – global library
Loading a legacy script file using config.json
 When you want to load an external script file from a CDN
 Add it as an external (with a global declaration if needed)
 Import it in your web part
 Optionally, create typings for your global.
module declare ‘extLib’{…}
 Alternatively, you can declare it as type any:
declare var extLib: any;
Dependencies – global library
Loading a legacy script file programmatically
 When you don’t want to change your package
signature, or when you want to load it conditionally
 When loading an external script file from a CDN
Dependencies – global library
Loading a legacy script file programmatically
How?
 Declare its global:
declare var kwfabric: any;
 Use a promise to load it, execute your code once the promise
resolves:
SPComponentLoader.loadScript(`https://apps.kwizcom.c
om/libs/office-ui-fabric-
js/1.4.0/js/fabric.js?prefix=kw`, {
globalExportsName: 'kwfabric' }).then((p: any) => {
//use kwfabric
});
Dependencies –fabric js
Using Office UI Fabric JS
 If you can, use react. It comes with amazing support
for Fabric UI.
 If not, I recommend using Fabric JS.
 Optionally, use KWizCom’s hosted branch of Office UI
Fabric JS:
http://kwizcom.blogspot.ca/2017/03/using-office-ui-
fabric-js-in-spfx.html
SHARED REUSABLE CODE
Reuse your code between different SPFx projects
Shared Reusable Code
 Create folder for your shared code
 If you plan to use type script
 Use your code relatively to your project folder
Shared Reusable Code
 Create folder for your shared code
 If you plan to use type script
– Install dependencies manually:
npm install @microsoft/sp-core-library@~1.4.0
npm install @microsoft/sp-webpart-base@~1.4.0
– add tsconfig.json, run tsc to compile
 Use your code relatively to your project folder
Shared Reusable Code
 Create folder for your shared code
 If you plan to use type script
 Use your code relatively to your project folder
import Utilities from '../../../../SharedCode/Utilities';
Shared Reusable Code
Consider creating an npm package
Benefits: great versioning and manageability
Disadvantages: overhead in managing the package
and publishing updates
Shared Reusable Code - npm
Creating a new package
 Run “npm init”
 Edit package.json, add dependencies
 run “npm install”
 If you plan to use type script:
– Add tsconfig.json
– Run tsc to build JS files from TS
– Specify "typings" in your package.json
Shared Reusable Code - npm
Using your new package
 Edit SPFx package dependencies, add your package:
"kwizcom-license": "file:../kwizcom-license“
 Bundled by default, should you mark as external?
– Plan on using this package from several different projects?
– Its JS file is large?
 How?
– Edit config/config.json add to externals:
"kwizcom-license":
https://kwizcom.sharepoint.com/sites/s/cdn/License.js
– Now, you can also push minor updates/fixes without having to re-
publish all your projects (when you keep backward compatibility).
Shared Reusable Code - npm
Publishing updates?
 Update version number in package.json
 Run “npm update” everywhere you used it to update
the package
CONSUMING DATA
Consuming data
Connecting to data
 SharePoint
 Microsoft Graph
* Local workbench not supported
Consuming data
Requesting SharePoint content
 Use SPHttpClient (this.context.spHttpClient) post/get
to make rest requests
 Load JSOM into your SPFx
 DO NOT try to use the JSOM global objects. No one
guarantees they will be there in modern pages/other
pages.
Consuming data
What is Microsoft Graph API?
 Graph API is a rest end point for all of your users
O365 services.
 This includes access to his OneDrive, Mail, Calendar,
Contacts, SharePoint, and the list goes on.
Consuming data
Requesting Graph content
 Today – do it yourself. Register an application for graph,
request the trust/permissions you need, and make rest
requests.
 Soon – Microsoft will share one token/key we can all use
for basic read access
– Use GraphHttpClient/MSGraphClient (preview)
– Will automatically use a shared available key/token, with limited
set of permissions
– This token will be limited to accepting requests ONLY from
SharePoint online hosted sites, as a security measure.
ADVANCED PROPERTYPANE
What can you do with the PropertyPane?
Building custom controls
Advanced PropertyPane
Basic concepts
 Rendered based off a dynamic JSON definition
object.
 The tool part will re-render when changing a
dropdown value, or when clicking a button.
 When a property changes, it will update your web
part by re-calling the “render” event.
 Basic structure:
– Pages -> Groups -> Properties -> Property
Advanced PropertyPane
Advanced concepts - Validations
 onGetErrorMessage return error message string, or
function returning promise.
 During validation, you can control and change other
properties.
 In most cases, it is best to fire on change event to
notify SharePoint of the change.
Advanced PropertyPane
Advanced concepts - Custom controls
 You can create your own controls for the property
pane
 Use the render method to render your own controls
 Get configuration info from the web part, such as
context, label and where to store your values.
 Notify the web part on value changes (You will need
to create that logic – see next slide)
Advanced PropertyPane
Advanced concepts - Trigger on change
 First, add the two helper function:
import { get, update } from "@microsoft/sp-lodash-subset";
 Create a handler for your property “on change”
private onPropertyChange(propertyPath: string, newValue: any):
void {
const oldValue: any = get(this.properties, propertyPath);
update(this.properties, propertyPath, (): any => { return
newValue; });
this.onPropertyPaneFieldChanged(propertyPath, oldValue,
newValue);
if (!this.disableReactivePropertyChanges)
this.render();//update the webpart
}
Advanced PropertyPane
 “this.properties” will get serialized and saved when
your web part is saved. No matter how or what
changed its value.
 Write your own designer logic: popup, panels or
inline. Show it when your web part is in edit mode:
if (this.displayMode === core.DisplayMode.Edit)
Advanced PropertyPane
Example: custom designer
UPDATING SPFX FRAMEWORK
How to get updates to SPFx?
Updating SPFx framework
Upgrading SPFx version is a challenge
 Pre-GA, it meant building a new project and moving
your code
 Promised this will stop after GA *
Updating SPFx framework
Dependencies
 In theory, as simple as updating package.json and
running npm install/update
 In practice, involves a lot of praying, occasionally deleting
node_modules, and dealing with unexpected errors in
dependencies
 Some dependencies are still global, but that will pass
OTHER HELPFUL TIPS
Helpful tips
Open integrated terminal in VSCode
Add import statements
You don’t have to type the import yourself, look for the
yellow bulb icon when standing on an unrecognized
element:
Helpful tips
Delete/exclude node_modules from your source
control / when zipping the project.
Demo project size:
646MB, 86K files.
Without node_modules:
1.75MB, 138 files.
Helpful tips
Get used to memorizing commands…
 gulp = build
 gulp --ship = build in production
 gulp trust-dev-cert/untrust-dev-cert = trust the local
certificate
 gulp package-solution = create package
 gulp serve = start local server
 code . = open VSCode in current folder
Helpful tips
 Get used to seeing warnings
in the output of the different
commands, especially npm-
install.
 Errors – you should resolve or
something will be broken.
 Warnings during build (gulp)
may come from your code so
you should fix these (missing
semicolon, unneeded import,
etc)
Helpful tips
QUESTIONS?
follow up:
shai@kwizcom.com
kwizcom.blogspot.com

Contenu connexe

Tendances

Chris O'Brien - Modern SharePoint sites and the SharePoint Framework - reference
Chris O'Brien - Modern SharePoint sites and the SharePoint Framework - referenceChris O'Brien - Modern SharePoint sites and the SharePoint Framework - reference
Chris O'Brien - Modern SharePoint sites and the SharePoint Framework - referenceChris O'Brien
 
[Jansen] Transforming your classic team sites into modern group connected tea...
[Jansen] Transforming your classic team sites into modern group connected tea...[Jansen] Transforming your classic team sites into modern group connected tea...
[Jansen] Transforming your classic team sites into modern group connected tea...European Collaboration Summit
 
TypeScript and SharePoint Framework
TypeScript and SharePoint FrameworkTypeScript and SharePoint Framework
TypeScript and SharePoint FrameworkBob German
 
SPUnite17 Introduction to the Office Dev PnP Core Libraries
SPUnite17 Introduction to the Office Dev PnP Core LibrariesSPUnite17 Introduction to the Office Dev PnP Core Libraries
SPUnite17 Introduction to the Office Dev PnP Core LibrariesNCCOMMS
 
Application Lifecycle Management for Office 365 development
Application Lifecycle Management for Office 365 developmentApplication Lifecycle Management for Office 365 development
Application Lifecycle Management for Office 365 developmentChris O'Brien
 
O365Con18 - Site Templates, Site Life Cycle Management and Modern SharePoint ...
O365Con18 - Site Templates, Site Life Cycle Management and Modern SharePoint ...O365Con18 - Site Templates, Site Life Cycle Management and Modern SharePoint ...
O365Con18 - Site Templates, Site Life Cycle Management and Modern SharePoint ...NCCOMMS
 
Chris O'Brien - Comparing SharePoint add-ins (apps) with Office 365 apps
Chris O'Brien - Comparing SharePoint add-ins (apps) with Office 365 appsChris O'Brien - Comparing SharePoint add-ins (apps) with Office 365 apps
Chris O'Brien - Comparing SharePoint add-ins (apps) with Office 365 appsChris O'Brien
 
Chris OBrien - Weaving Enterprise Solutions into Office Products
Chris OBrien - Weaving Enterprise Solutions into Office ProductsChris OBrien - Weaving Enterprise Solutions into Office Products
Chris OBrien - Weaving Enterprise Solutions into Office ProductsChris O'Brien
 
D2 - Automate Custom Solutions Deployment on Office 365 and Azure - Paolo Pia...
D2 - Automate Custom Solutions Deployment on Office 365 and Azure - Paolo Pia...D2 - Automate Custom Solutions Deployment on Office 365 and Azure - Paolo Pia...
D2 - Automate Custom Solutions Deployment on Office 365 and Azure - Paolo Pia...SPS Paris
 
SPUnite17 SPFx Extensions
SPUnite17 SPFx ExtensionsSPUnite17 SPFx Extensions
SPUnite17 SPFx ExtensionsNCCOMMS
 
[Pinto] Is my SharePoint Development team properly enlighted?
[Pinto] Is my SharePoint Development team properly enlighted?[Pinto] Is my SharePoint Development team properly enlighted?
[Pinto] Is my SharePoint Development team properly enlighted?European Collaboration Summit
 
Learn from my Mistakes - Building Better Solutions in SPFx
Learn from my  Mistakes - Building Better Solutions in SPFxLearn from my  Mistakes - Building Better Solutions in SPFx
Learn from my Mistakes - Building Better Solutions in SPFxThomas Daly
 
DEVELOPING SHAREPOINT FRAMEWORK SOLUTIONS FOR THE ENTERPRISE
DEVELOPING SHAREPOINT FRAMEWORK SOLUTIONS FOR THE ENTERPRISEDEVELOPING SHAREPOINT FRAMEWORK SOLUTIONS FOR THE ENTERPRISE
DEVELOPING SHAREPOINT FRAMEWORK SOLUTIONS FOR THE ENTERPRISEEuropean Collaboration Summit
 
ECS 19 - Chris O'Brien - The hit list - Office 365 dev techniques you should ...
ECS 19 - Chris O'Brien - The hit list - Office 365 dev techniques you should ...ECS 19 - Chris O'Brien - The hit list - Office 365 dev techniques you should ...
ECS 19 - Chris O'Brien - The hit list - Office 365 dev techniques you should ...European Collaboration Summit
 
Practical management of development & QA environments for SharePoint 2013
Practical management of development & QA environments for SharePoint 2013Practical management of development & QA environments for SharePoint 2013
Practical management of development & QA environments for SharePoint 2013SharePointRadi
 
Deep-dive building solutions on the SharePoint Framework
Deep-dive building solutions on the SharePoint FrameworkDeep-dive building solutions on the SharePoint Framework
Deep-dive building solutions on the SharePoint FrameworkWaldek Mastykarz
 
SPS Paris: Building great client-side web parts with spfx, pnp-js-core, React...
SPS Paris: Building great client-side web parts with spfx, pnp-js-core, React...SPS Paris: Building great client-side web parts with spfx, pnp-js-core, React...
SPS Paris: Building great client-side web parts with spfx, pnp-js-core, React...Bill Ayers
 
SPUnite17 TypeScript for SharePoint Developers
SPUnite17 TypeScript for SharePoint DevelopersSPUnite17 TypeScript for SharePoint Developers
SPUnite17 TypeScript for SharePoint DevelopersNCCOMMS
 
O365Con18 - Using ARM Templates to Deploy Solutions on Azure - Kevin Timmermann
O365Con18 - Using ARM Templates to Deploy Solutions on Azure - Kevin TimmermannO365Con18 - Using ARM Templates to Deploy Solutions on Azure - Kevin Timmermann
O365Con18 - Using ARM Templates to Deploy Solutions on Azure - Kevin TimmermannNCCOMMS
 

Tendances (20)

Chris O'Brien - Modern SharePoint sites and the SharePoint Framework - reference
Chris O'Brien - Modern SharePoint sites and the SharePoint Framework - referenceChris O'Brien - Modern SharePoint sites and the SharePoint Framework - reference
Chris O'Brien - Modern SharePoint sites and the SharePoint Framework - reference
 
[Jansen] Transforming your classic team sites into modern group connected tea...
[Jansen] Transforming your classic team sites into modern group connected tea...[Jansen] Transforming your classic team sites into modern group connected tea...
[Jansen] Transforming your classic team sites into modern group connected tea...
 
TypeScript and SharePoint Framework
TypeScript and SharePoint FrameworkTypeScript and SharePoint Framework
TypeScript and SharePoint Framework
 
SPUnite17 Introduction to the Office Dev PnP Core Libraries
SPUnite17 Introduction to the Office Dev PnP Core LibrariesSPUnite17 Introduction to the Office Dev PnP Core Libraries
SPUnite17 Introduction to the Office Dev PnP Core Libraries
 
Application Lifecycle Management for Office 365 development
Application Lifecycle Management for Office 365 developmentApplication Lifecycle Management for Office 365 development
Application Lifecycle Management for Office 365 development
 
O365Con18 - Site Templates, Site Life Cycle Management and Modern SharePoint ...
O365Con18 - Site Templates, Site Life Cycle Management and Modern SharePoint ...O365Con18 - Site Templates, Site Life Cycle Management and Modern SharePoint ...
O365Con18 - Site Templates, Site Life Cycle Management and Modern SharePoint ...
 
Chris O'Brien - Comparing SharePoint add-ins (apps) with Office 365 apps
Chris O'Brien - Comparing SharePoint add-ins (apps) with Office 365 appsChris O'Brien - Comparing SharePoint add-ins (apps) with Office 365 apps
Chris O'Brien - Comparing SharePoint add-ins (apps) with Office 365 apps
 
Chris OBrien - Weaving Enterprise Solutions into Office Products
Chris OBrien - Weaving Enterprise Solutions into Office ProductsChris OBrien - Weaving Enterprise Solutions into Office Products
Chris OBrien - Weaving Enterprise Solutions into Office Products
 
D2 - Automate Custom Solutions Deployment on Office 365 and Azure - Paolo Pia...
D2 - Automate Custom Solutions Deployment on Office 365 and Azure - Paolo Pia...D2 - Automate Custom Solutions Deployment on Office 365 and Azure - Paolo Pia...
D2 - Automate Custom Solutions Deployment on Office 365 and Azure - Paolo Pia...
 
[Struyf] Automate Your Tasks With Azure Functions
[Struyf] Automate Your Tasks With Azure Functions[Struyf] Automate Your Tasks With Azure Functions
[Struyf] Automate Your Tasks With Azure Functions
 
SPUnite17 SPFx Extensions
SPUnite17 SPFx ExtensionsSPUnite17 SPFx Extensions
SPUnite17 SPFx Extensions
 
[Pinto] Is my SharePoint Development team properly enlighted?
[Pinto] Is my SharePoint Development team properly enlighted?[Pinto] Is my SharePoint Development team properly enlighted?
[Pinto] Is my SharePoint Development team properly enlighted?
 
Learn from my Mistakes - Building Better Solutions in SPFx
Learn from my  Mistakes - Building Better Solutions in SPFxLearn from my  Mistakes - Building Better Solutions in SPFx
Learn from my Mistakes - Building Better Solutions in SPFx
 
DEVELOPING SHAREPOINT FRAMEWORK SOLUTIONS FOR THE ENTERPRISE
DEVELOPING SHAREPOINT FRAMEWORK SOLUTIONS FOR THE ENTERPRISEDEVELOPING SHAREPOINT FRAMEWORK SOLUTIONS FOR THE ENTERPRISE
DEVELOPING SHAREPOINT FRAMEWORK SOLUTIONS FOR THE ENTERPRISE
 
ECS 19 - Chris O'Brien - The hit list - Office 365 dev techniques you should ...
ECS 19 - Chris O'Brien - The hit list - Office 365 dev techniques you should ...ECS 19 - Chris O'Brien - The hit list - Office 365 dev techniques you should ...
ECS 19 - Chris O'Brien - The hit list - Office 365 dev techniques you should ...
 
Practical management of development & QA environments for SharePoint 2013
Practical management of development & QA environments for SharePoint 2013Practical management of development & QA environments for SharePoint 2013
Practical management of development & QA environments for SharePoint 2013
 
Deep-dive building solutions on the SharePoint Framework
Deep-dive building solutions on the SharePoint FrameworkDeep-dive building solutions on the SharePoint Framework
Deep-dive building solutions on the SharePoint Framework
 
SPS Paris: Building great client-side web parts with spfx, pnp-js-core, React...
SPS Paris: Building great client-side web parts with spfx, pnp-js-core, React...SPS Paris: Building great client-side web parts with spfx, pnp-js-core, React...
SPS Paris: Building great client-side web parts with spfx, pnp-js-core, React...
 
SPUnite17 TypeScript for SharePoint Developers
SPUnite17 TypeScript for SharePoint DevelopersSPUnite17 TypeScript for SharePoint Developers
SPUnite17 TypeScript for SharePoint Developers
 
O365Con18 - Using ARM Templates to Deploy Solutions on Azure - Kevin Timmermann
O365Con18 - Using ARM Templates to Deploy Solutions on Azure - Kevin TimmermannO365Con18 - Using ARM Templates to Deploy Solutions on Azure - Kevin Timmermann
O365Con18 - Using ARM Templates to Deploy Solutions on Azure - Kevin Timmermann
 

Similaire à [Patel] SPFx: An ISV Insight into latest Microsoft's customization model

Building an Ionic hybrid mobile app with TypeScript
Building an Ionic hybrid mobile app with TypeScript Building an Ionic hybrid mobile app with TypeScript
Building an Ionic hybrid mobile app with TypeScript Serge van den Oever
 
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...Paul Withers
 
Chris O'Brien - Introduction to the SharePoint Framework for developers
Chris O'Brien - Introduction to the SharePoint Framework for developersChris O'Brien - Introduction to the SharePoint Framework for developers
Chris O'Brien - Introduction to the SharePoint Framework for developersChris O'Brien
 
Front-end build tools - Webpack
Front-end build tools - WebpackFront-end build tools - Webpack
Front-end build tools - WebpackRazvan Rosu
 
Expanding XPages with Bootstrap Plugins for Ultimate Usability
Expanding XPages with Bootstrap Plugins for Ultimate UsabilityExpanding XPages with Bootstrap Plugins for Ultimate Usability
Expanding XPages with Bootstrap Plugins for Ultimate UsabilityTeamstudio
 
XPages -Beyond the Basics
XPages -Beyond the BasicsXPages -Beyond the Basics
XPages -Beyond the BasicsUlrich Krause
 
Improving build solutions dependency management with webpack
Improving build solutions  dependency management with webpackImproving build solutions  dependency management with webpack
Improving build solutions dependency management with webpackNodeXperts
 
M365 global developer bootcamp 2019 Intro to SPFx Version
M365 global developer bootcamp 2019 Intro to SPFx VersionM365 global developer bootcamp 2019 Intro to SPFx Version
M365 global developer bootcamp 2019 Intro to SPFx VersionThomas Daly
 
Azure DevOps Extensions
Azure DevOps ExtensionsAzure DevOps Extensions
Azure DevOps ExtensionsChristian Waha
 
How to convert your Full Trust Solutions to the SharePoint Framework (SPFx)
How to convert your Full Trust Solutions to the SharePoint Framework (SPFx)How to convert your Full Trust Solutions to the SharePoint Framework (SPFx)
How to convert your Full Trust Solutions to the SharePoint Framework (SPFx)Brian Culver
 
Asp net mvc
Asp net mvcAsp net mvc
Asp net mvcbgrynko
 
How to convert your Full Trust Solutions to the SharePoint Framework (SPFx)
How to convert your Full Trust Solutions to the SharePoint Framework (SPFx)How to convert your Full Trust Solutions to the SharePoint Framework (SPFx)
How to convert your Full Trust Solutions to the SharePoint Framework (SPFx)Brian Culver
 
Node JS - A brief overview on building real-time web applications
Node JS - A brief overview on building real-time web applicationsNode JS - A brief overview on building real-time web applications
Node JS - A brief overview on building real-time web applicationsExpeed Software
 
Introduction to SharePoint Framework (SPFx)
Introduction to SharePoint Framework (SPFx)Introduction to SharePoint Framework (SPFx)
Introduction to SharePoint Framework (SPFx)Fabio Franzini
 
How to Implement Micro Frontend Architecture using Angular Framework
How to Implement Micro Frontend Architecture using Angular FrameworkHow to Implement Micro Frontend Architecture using Angular Framework
How to Implement Micro Frontend Architecture using Angular FrameworkRapidValue
 
N hidden gems in hippo forge and experience plugins (dec17)
N hidden gems in hippo forge and experience plugins (dec17)N hidden gems in hippo forge and experience plugins (dec17)
N hidden gems in hippo forge and experience plugins (dec17)Woonsan Ko
 
Introduction of webpack 4
Introduction of webpack 4Introduction of webpack 4
Introduction of webpack 4Vijay Shukla
 

Similaire à [Patel] SPFx: An ISV Insight into latest Microsoft's customization model (20)

Building an Ionic hybrid mobile app with TypeScript
Building an Ionic hybrid mobile app with TypeScript Building an Ionic hybrid mobile app with TypeScript
Building an Ionic hybrid mobile app with TypeScript
 
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
 
Chris O'Brien - Introduction to the SharePoint Framework for developers
Chris O'Brien - Introduction to the SharePoint Framework for developersChris O'Brien - Introduction to the SharePoint Framework for developers
Chris O'Brien - Introduction to the SharePoint Framework for developers
 
Front-end build tools - Webpack
Front-end build tools - WebpackFront-end build tools - Webpack
Front-end build tools - Webpack
 
Expanding XPages with Bootstrap Plugins for Ultimate Usability
Expanding XPages with Bootstrap Plugins for Ultimate UsabilityExpanding XPages with Bootstrap Plugins for Ultimate Usability
Expanding XPages with Bootstrap Plugins for Ultimate Usability
 
XPages -Beyond the Basics
XPages -Beyond the BasicsXPages -Beyond the Basics
XPages -Beyond the Basics
 
Improving build solutions dependency management with webpack
Improving build solutions  dependency management with webpackImproving build solutions  dependency management with webpack
Improving build solutions dependency management with webpack
 
M365 global developer bootcamp 2019 Intro to SPFx Version
M365 global developer bootcamp 2019 Intro to SPFx VersionM365 global developer bootcamp 2019 Intro to SPFx Version
M365 global developer bootcamp 2019 Intro to SPFx Version
 
Composer namespacing
Composer namespacingComposer namespacing
Composer namespacing
 
Azure DevOps Extensions
Azure DevOps ExtensionsAzure DevOps Extensions
Azure DevOps Extensions
 
How to convert your Full Trust Solutions to the SharePoint Framework (SPFx)
How to convert your Full Trust Solutions to the SharePoint Framework (SPFx)How to convert your Full Trust Solutions to the SharePoint Framework (SPFx)
How to convert your Full Trust Solutions to the SharePoint Framework (SPFx)
 
CDNs para el SharePoint Framework (SPFx)
CDNs para el SharePoint Framework (SPFx)CDNs para el SharePoint Framework (SPFx)
CDNs para el SharePoint Framework (SPFx)
 
Asp net mvc
Asp net mvcAsp net mvc
Asp net mvc
 
How to convert your Full Trust Solutions to the SharePoint Framework (SPFx)
How to convert your Full Trust Solutions to the SharePoint Framework (SPFx)How to convert your Full Trust Solutions to the SharePoint Framework (SPFx)
How to convert your Full Trust Solutions to the SharePoint Framework (SPFx)
 
Node JS - A brief overview on building real-time web applications
Node JS - A brief overview on building real-time web applicationsNode JS - A brief overview on building real-time web applications
Node JS - A brief overview on building real-time web applications
 
Introduction to SharePoint Framework (SPFx)
Introduction to SharePoint Framework (SPFx)Introduction to SharePoint Framework (SPFx)
Introduction to SharePoint Framework (SPFx)
 
Short-Training asp.net vNext
Short-Training asp.net vNextShort-Training asp.net vNext
Short-Training asp.net vNext
 
How to Implement Micro Frontend Architecture using Angular Framework
How to Implement Micro Frontend Architecture using Angular FrameworkHow to Implement Micro Frontend Architecture using Angular Framework
How to Implement Micro Frontend Architecture using Angular Framework
 
N hidden gems in hippo forge and experience plugins (dec17)
N hidden gems in hippo forge and experience plugins (dec17)N hidden gems in hippo forge and experience plugins (dec17)
N hidden gems in hippo forge and experience plugins (dec17)
 
Introduction of webpack 4
Introduction of webpack 4Introduction of webpack 4
Introduction of webpack 4
 

Plus de European Collaboration Summit

ECS19 - Bram De Jager - Design a secure collaboration solution with Azure In...
ECS19 -  Bram De Jager - Design a secure collaboration solution with Azure In...ECS19 -  Bram De Jager - Design a secure collaboration solution with Azure In...
ECS19 - Bram De Jager - Design a secure collaboration solution with Azure In...European Collaboration Summit
 
ECS19 - Eric Harlan - Increasing throughput of Office 365
ECS19 - Eric Harlan - Increasing throughput of Office 365ECS19 - Eric Harlan - Increasing throughput of Office 365
ECS19 - Eric Harlan - Increasing throughput of Office 365European Collaboration Summit
 
ECS19 - Ahmad Najjar - Logic Apps vs Microsoft Flow - When, how and where?
ECS19 - Ahmad Najjar - Logic Apps vs Microsoft Flow - When, how and where?ECS19 - Ahmad Najjar - Logic Apps vs Microsoft Flow - When, how and where?
ECS19 - Ahmad Najjar - Logic Apps vs Microsoft Flow - When, how and where?European Collaboration Summit
 
ECS19 - Michael Van Horenbeeck - Divide Et Imperat Office 365 Mergers, Acquis...
ECS19 - Michael Van Horenbeeck - Divide Et Imperat Office 365 Mergers, Acquis...ECS19 - Michael Van Horenbeeck - Divide Et Imperat Office 365 Mergers, Acquis...
ECS19 - Michael Van Horenbeeck - Divide Et Imperat Office 365 Mergers, Acquis...European Collaboration Summit
 
ECS19 - Christina Wheeler - Become Data Modeling Superhero
ECS19 - Christina Wheeler - Become Data Modeling SuperheroECS19 - Christina Wheeler - Become Data Modeling Superhero
ECS19 - Christina Wheeler - Become Data Modeling SuperheroEuropean Collaboration Summit
 
ECS19 - Ahmad Najjar and Serge Luca - Power Platform Tutorial
ECS19 - Ahmad Najjar and Serge Luca - Power Platform TutorialECS19 - Ahmad Najjar and Serge Luca - Power Platform Tutorial
ECS19 - Ahmad Najjar and Serge Luca - Power Platform TutorialEuropean Collaboration Summit
 
ECS19 - Vesa Juvonen - SharePoint and Office 365 Development PowerClass
ECS19 - Vesa Juvonen - SharePoint and Office 365 Development PowerClassECS19 - Vesa Juvonen - SharePoint and Office 365 Development PowerClass
ECS19 - Vesa Juvonen - SharePoint and Office 365 Development PowerClassEuropean Collaboration Summit
 
ECS19 - Paolo Pialorsi - Building Portals with modern SharePoint experiences
ECS19 - Paolo Pialorsi - Building Portals with modern SharePoint experiencesECS19 - Paolo Pialorsi - Building Portals with modern SharePoint experiences
ECS19 - Paolo Pialorsi - Building Portals with modern SharePoint experiencesEuropean Collaboration Summit
 
ECS19 - Nicki Borell - Microsoft Cybersecurity Reference Architecture
ECS19 - Nicki Borell - Microsoft Cybersecurity Reference ArchitectureECS19 - Nicki Borell - Microsoft Cybersecurity Reference Architecture
ECS19 - Nicki Borell - Microsoft Cybersecurity Reference ArchitectureEuropean Collaboration Summit
 
ECS19 - Mike Ammerlaan - Microsoft Graph Data Connect
ECS19 - Mike Ammerlaan - Microsoft Graph Data ConnectECS19 - Mike Ammerlaan - Microsoft Graph Data Connect
ECS19 - Mike Ammerlaan - Microsoft Graph Data ConnectEuropean Collaboration Summit
 
ECS19 - Vesa Juvonen, Paolo Pialorsi - Building “modern” portals with SharePo...
ECS19 - Vesa Juvonen, Paolo Pialorsi - Building “modern” portals with SharePo...ECS19 - Vesa Juvonen, Paolo Pialorsi - Building “modern” portals with SharePo...
ECS19 - Vesa Juvonen, Paolo Pialorsi - Building “modern” portals with SharePo...European Collaboration Summit
 
ECS19 - Vesa Juvonen - Getting Started With SharePoint Framework - Roadmap
ECS19 - Vesa Juvonen - Getting Started With SharePoint Framework - RoadmapECS19 - Vesa Juvonen - Getting Started With SharePoint Framework - Roadmap
ECS19 - Vesa Juvonen - Getting Started With SharePoint Framework - RoadmapEuropean Collaboration Summit
 
ECS19 - Bill Ayers - UNLOCK YOUR BUSINESS KNOWLEDGE WITH THE MICROSOFT GRAPH,...
ECS19 - Bill Ayers - UNLOCK YOUR BUSINESS KNOWLEDGE WITH THE MICROSOFT GRAPH,...ECS19 - Bill Ayers - UNLOCK YOUR BUSINESS KNOWLEDGE WITH THE MICROSOFT GRAPH,...
ECS19 - Bill Ayers - UNLOCK YOUR BUSINESS KNOWLEDGE WITH THE MICROSOFT GRAPH,...European Collaboration Summit
 
ECS19 - Toni Pohl - Develop intelligent apps for the Modern Workplace
ECS19 - Toni Pohl - Develop intelligent apps for the Modern WorkplaceECS19 - Toni Pohl - Develop intelligent apps for the Modern Workplace
ECS19 - Toni Pohl - Develop intelligent apps for the Modern WorkplaceEuropean Collaboration Summit
 
ECS19 - Tomislav Lulic - What is changed in product/service licensing with Cl...
ECS19 - Tomislav Lulic - What is changed in product/service licensing with Cl...ECS19 - Tomislav Lulic - What is changed in product/service licensing with Cl...
ECS19 - Tomislav Lulic - What is changed in product/service licensing with Cl...European Collaboration Summit
 
ECS19 - Thomas Vochten - ESSENTIAL DATABASE ADMINISTRATION SKILLS FOR SHAREPO...
ECS19 - Thomas Vochten - ESSENTIAL DATABASE ADMINISTRATION SKILLS FOR SHAREPO...ECS19 - Thomas Vochten - ESSENTIAL DATABASE ADMINISTRATION SKILLS FOR SHAREPO...
ECS19 - Thomas Vochten - ESSENTIAL DATABASE ADMINISTRATION SKILLS FOR SHAREPO...European Collaboration Summit
 
ECS19 - Thomas Goelles, Stephan Bisser - Unite your workplace with Microsoft'...
ECS19 - Thomas Goelles, Stephan Bisser - Unite your workplace with Microsoft'...ECS19 - Thomas Goelles, Stephan Bisser - Unite your workplace with Microsoft'...
ECS19 - Thomas Goelles, Stephan Bisser - Unite your workplace with Microsoft'...European Collaboration Summit
 
ECS19 - Steven Collier - Live Events in Teams, Yammer and Stream using Extern...
ECS19 - Steven Collier - Live Events in Teams, Yammer and Stream using Extern...ECS19 - Steven Collier - Live Events in Teams, Yammer and Stream using Extern...
ECS19 - Steven Collier - Live Events in Teams, Yammer and Stream using Extern...European Collaboration Summit
 
ECS19 - Serge Luca - MICROSOFT FLOW IN REAL WORLD PROJECTS: 3 YEARS LATER AN...
ECS19 - Serge Luca -  MICROSOFT FLOW IN REAL WORLD PROJECTS: 3 YEARS LATER AN...ECS19 - Serge Luca -  MICROSOFT FLOW IN REAL WORLD PROJECTS: 3 YEARS LATER AN...
ECS19 - Serge Luca - MICROSOFT FLOW IN REAL WORLD PROJECTS: 3 YEARS LATER AN...European Collaboration Summit
 
ECS19 - Samuel Zuercher - Do I still need an Intranet or is MS Teams just eno...
ECS19 - Samuel Zuercher - Do I still need an Intranet or is MS Teams just eno...ECS19 - Samuel Zuercher - Do I still need an Intranet or is MS Teams just eno...
ECS19 - Samuel Zuercher - Do I still need an Intranet or is MS Teams just eno...European Collaboration Summit
 

Plus de European Collaboration Summit (20)

ECS19 - Bram De Jager - Design a secure collaboration solution with Azure In...
ECS19 -  Bram De Jager - Design a secure collaboration solution with Azure In...ECS19 -  Bram De Jager - Design a secure collaboration solution with Azure In...
ECS19 - Bram De Jager - Design a secure collaboration solution with Azure In...
 
ECS19 - Eric Harlan - Increasing throughput of Office 365
ECS19 - Eric Harlan - Increasing throughput of Office 365ECS19 - Eric Harlan - Increasing throughput of Office 365
ECS19 - Eric Harlan - Increasing throughput of Office 365
 
ECS19 - Ahmad Najjar - Logic Apps vs Microsoft Flow - When, how and where?
ECS19 - Ahmad Najjar - Logic Apps vs Microsoft Flow - When, how and where?ECS19 - Ahmad Najjar - Logic Apps vs Microsoft Flow - When, how and where?
ECS19 - Ahmad Najjar - Logic Apps vs Microsoft Flow - When, how and where?
 
ECS19 - Michael Van Horenbeeck - Divide Et Imperat Office 365 Mergers, Acquis...
ECS19 - Michael Van Horenbeeck - Divide Et Imperat Office 365 Mergers, Acquis...ECS19 - Michael Van Horenbeeck - Divide Et Imperat Office 365 Mergers, Acquis...
ECS19 - Michael Van Horenbeeck - Divide Et Imperat Office 365 Mergers, Acquis...
 
ECS19 - Christina Wheeler - Become Data Modeling Superhero
ECS19 - Christina Wheeler - Become Data Modeling SuperheroECS19 - Christina Wheeler - Become Data Modeling Superhero
ECS19 - Christina Wheeler - Become Data Modeling Superhero
 
ECS19 - Ahmad Najjar and Serge Luca - Power Platform Tutorial
ECS19 - Ahmad Najjar and Serge Luca - Power Platform TutorialECS19 - Ahmad Najjar and Serge Luca - Power Platform Tutorial
ECS19 - Ahmad Najjar and Serge Luca - Power Platform Tutorial
 
ECS19 - Vesa Juvonen - SharePoint and Office 365 Development PowerClass
ECS19 - Vesa Juvonen - SharePoint and Office 365 Development PowerClassECS19 - Vesa Juvonen - SharePoint and Office 365 Development PowerClass
ECS19 - Vesa Juvonen - SharePoint and Office 365 Development PowerClass
 
ECS19 - Paolo Pialorsi - Building Portals with modern SharePoint experiences
ECS19 - Paolo Pialorsi - Building Portals with modern SharePoint experiencesECS19 - Paolo Pialorsi - Building Portals with modern SharePoint experiences
ECS19 - Paolo Pialorsi - Building Portals with modern SharePoint experiences
 
ECS19 - Nicki Borell - Microsoft Cybersecurity Reference Architecture
ECS19 - Nicki Borell - Microsoft Cybersecurity Reference ArchitectureECS19 - Nicki Borell - Microsoft Cybersecurity Reference Architecture
ECS19 - Nicki Borell - Microsoft Cybersecurity Reference Architecture
 
ECS19 - Mike Ammerlaan - Microsoft Graph Data Connect
ECS19 - Mike Ammerlaan - Microsoft Graph Data ConnectECS19 - Mike Ammerlaan - Microsoft Graph Data Connect
ECS19 - Mike Ammerlaan - Microsoft Graph Data Connect
 
ECS19 - Vesa Juvonen, Paolo Pialorsi - Building “modern” portals with SharePo...
ECS19 - Vesa Juvonen, Paolo Pialorsi - Building “modern” portals with SharePo...ECS19 - Vesa Juvonen, Paolo Pialorsi - Building “modern” portals with SharePo...
ECS19 - Vesa Juvonen, Paolo Pialorsi - Building “modern” portals with SharePo...
 
ECS19 - Vesa Juvonen - Getting Started With SharePoint Framework - Roadmap
ECS19 - Vesa Juvonen - Getting Started With SharePoint Framework - RoadmapECS19 - Vesa Juvonen - Getting Started With SharePoint Framework - Roadmap
ECS19 - Vesa Juvonen - Getting Started With SharePoint Framework - Roadmap
 
ECS19 - Bill Ayers - UNLOCK YOUR BUSINESS KNOWLEDGE WITH THE MICROSOFT GRAPH,...
ECS19 - Bill Ayers - UNLOCK YOUR BUSINESS KNOWLEDGE WITH THE MICROSOFT GRAPH,...ECS19 - Bill Ayers - UNLOCK YOUR BUSINESS KNOWLEDGE WITH THE MICROSOFT GRAPH,...
ECS19 - Bill Ayers - UNLOCK YOUR BUSINESS KNOWLEDGE WITH THE MICROSOFT GRAPH,...
 
ECS19 - Toni Pohl - Develop intelligent apps for the Modern Workplace
ECS19 - Toni Pohl - Develop intelligent apps for the Modern WorkplaceECS19 - Toni Pohl - Develop intelligent apps for the Modern Workplace
ECS19 - Toni Pohl - Develop intelligent apps for the Modern Workplace
 
ECS19 - Tomislav Lulic - What is changed in product/service licensing with Cl...
ECS19 - Tomislav Lulic - What is changed in product/service licensing with Cl...ECS19 - Tomislav Lulic - What is changed in product/service licensing with Cl...
ECS19 - Tomislav Lulic - What is changed in product/service licensing with Cl...
 
ECS19 - Thomas Vochten - ESSENTIAL DATABASE ADMINISTRATION SKILLS FOR SHAREPO...
ECS19 - Thomas Vochten - ESSENTIAL DATABASE ADMINISTRATION SKILLS FOR SHAREPO...ECS19 - Thomas Vochten - ESSENTIAL DATABASE ADMINISTRATION SKILLS FOR SHAREPO...
ECS19 - Thomas Vochten - ESSENTIAL DATABASE ADMINISTRATION SKILLS FOR SHAREPO...
 
ECS19 - Thomas Goelles, Stephan Bisser - Unite your workplace with Microsoft'...
ECS19 - Thomas Goelles, Stephan Bisser - Unite your workplace with Microsoft'...ECS19 - Thomas Goelles, Stephan Bisser - Unite your workplace with Microsoft'...
ECS19 - Thomas Goelles, Stephan Bisser - Unite your workplace with Microsoft'...
 
ECS19 - Steven Collier - Live Events in Teams, Yammer and Stream using Extern...
ECS19 - Steven Collier - Live Events in Teams, Yammer and Stream using Extern...ECS19 - Steven Collier - Live Events in Teams, Yammer and Stream using Extern...
ECS19 - Steven Collier - Live Events in Teams, Yammer and Stream using Extern...
 
ECS19 - Serge Luca - MICROSOFT FLOW IN REAL WORLD PROJECTS: 3 YEARS LATER AN...
ECS19 - Serge Luca -  MICROSOFT FLOW IN REAL WORLD PROJECTS: 3 YEARS LATER AN...ECS19 - Serge Luca -  MICROSOFT FLOW IN REAL WORLD PROJECTS: 3 YEARS LATER AN...
ECS19 - Serge Luca - MICROSOFT FLOW IN REAL WORLD PROJECTS: 3 YEARS LATER AN...
 
ECS19 - Samuel Zuercher - Do I still need an Intranet or is MS Teams just eno...
ECS19 - Samuel Zuercher - Do I still need an Intranet or is MS Teams just eno...ECS19 - Samuel Zuercher - Do I still need an Intranet or is MS Teams just eno...
ECS19 - Samuel Zuercher - Do I still need an Intranet or is MS Teams just eno...
 

Dernier

WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2
 
tonesoftg
tonesoftgtonesoftg
tonesoftglanshi9
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationJuha-Pekka Tolvanen
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfonteinmasabamasaba
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...masabamasaba
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Bert Jan Schrijver
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
WSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyviewmasabamasaba
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2
 
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 

Dernier (20)

WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
WSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaS
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 

[Patel] SPFx: An ISV Insight into latest Microsoft's customization model

  • 1. SPFx: An ISV Insight to Microsoft’s latest customization model By: Shai Petel
  • 2.
  • 3. Shai Petel Director of Research and Development at KWizCom MCT, MCPD 6 times MVP: SharePoint (2011-2016) shai@kwizcom.com | @shaibs | http://kwizcom.blogspot.com
  • 4. Focus:  Publishing versions, upgrades  Pushing updates through CDN  Shared code and external libraries  Custom PropertyPane properties  Code, code, code.
  • 5. SHAREPOINT DEVELOPMENT MODELS Overview of extensibility opportunities in SharePoint’s history
  • 6. SharePoint Development Models 2001 STS SPS 2003 SPS WSS 2007 MOSS WSS 2010 SharePoint Foundation SharePoint Server 2013 SharePoint Foundation SharePoint Server SPO SharePoint Online Group sites * 2016 SharePoint Server
  • 7. SharePoint Development Models  2001 – ASP (no, I didn’t forget the .Net) – Page parts, tokens (_wpq_, _wpr_) – No clear packaging and deployment  2003 – Web parts (ASP.Net custom controls) – Packaged in CAB  2007 – Features – WSP package  2010 – Timer jobs – Sandbox  2013 – SharePoint hosted apps add- ins – Provider hosted apps add-ins – JSLink / CSR  SPO – SharePoint hosted apps add- ins – Provider hosted apps add-ins – JSLink / CSR No code sandbox solutions – SharePoint Framework (SPFx)
  • 8. WHAT IS SPFX? Brief explanation of the SharePoint Framework
  • 9. What is SPFx? “a Page and Part model enables fully supported client- side development for building SharePoint experiences, easy integration with the SharePoint data and support for open source tooling development.”
  • 10. What is SPFx? - advantages Runs in the context of the current user. No iFrames There is a life cycle that the developer is involved in It is framework agnostic * Open source tool chain Performance Solutions approved by the tenant admin (or their delegates) Classic & modern pages Can be used in noscript sites
  • 11. What is SPFx? - disadvantages SPO: up-to-date - on prem: only 2016, older build Extremely big learning curve Limited artifact types supported Publishing updates ~ No support for the app store
  • 12. DOES IT DELIVER? SPFx compared to previous generations
  • 13. CHOICE OF UI FRAMEWORK How would you render the UI of your web part?
  • 14. Choice of UI framework  SPFx is framework agnostic by design. Really?  This is the most important decision when building a new project
  • 15. Choice of UI framework ReactJS - the clear leader & first class citizen  This is the engine MSFT use themselves  The PropertyPane is built on react, and the engine wrapping your WebPart is too.  The only Office UI Fabric components actively supported by Microsoft
  • 16. Choice of UI framework KnockoutJS  Good when you need dynamic templates (i.e. user supply / customize HTML output)  Lack of fabric components. Use FabricJS  Building in --ship mode removes KO comments
  • 17. Choice of UI framework Handlebars, angular, etc… Experiment, choose the one that fits your skills and needs. AngularJS has a good community supported office UI fabric components library.
  • 19. Building your solution Building a new project  Create a folder  Run “yo @microsoft/sharepoint”  Set name, description
  • 20. Building your solution Building a new project  Select “WebPart”
  • 21. Building your solution Building a new project  Select your JavaScript framework
  • 22. Building your solution Add several artifacts to a single package  Currently only web parts are supported on prem  Application Customizer, Field Customizer and ListView Command Set – very limited & online only  Add more artifacts by running “yo @microsoft/sharepoint” inside an existing project folder
  • 24. Publishing Content Delivery Network (CDN)  Specify CDN in config/write-manifests.json  Host script files, css, images, html  Push minor fixes to clients  Non-ISVs on SPO can use Office 365 public CDN
  • 25. Publishing Control production build file names Running gulp --ship will produce a bundle file for production:  Default: react-web- part.bundle_a4b2ffc1a3b03f7ce4b5bd78bdd7ac62.js  Recommend: react-web-part.1.0.0.0.js
  • 26. Publishing Publish a package 1. Update web part version in config/package-solution.json 2. Run gulp --ship 3. Go to temp/deploy folder 4. Rename the JS file (I use {project}.{version}.js) 5. Edit the json file: replace the bundle JS file to the new name * 6. Run gulp package-solution --ship 7. Take your new packages from the SharePoint/solution folder 8. Drop your new JS to your CDN ** [optional steps]
  • 27. Publishing Publishing updates: Do I need to release a new package?  You might be able to push updates to your customers  Check if your new version is backward compatible  Track version via a static variable
  • 28. Publishing Publishing updates: Update a package  When a new package is needed – follow “publish a package” steps  When a new package is not needed 1. Update BuildVersion in your code * 2. Run gulp --ship 3. Go to temp/deploy folder 4. Copy the new JS file content into your existing file on your CDN 5. To use your own minifier, drop the --ship flag, take the file from the dist folder
  • 29. Publishing Installing / upgrading package 1. Upload package to the App Catalog 2. Trust the app 3. Fixed? A new version: delete old package first
  • 30. DEVELOPMENT OPTIONS Dev time environments and options
  • 31. Development options - local workbench gulp serve https://localhost:4321/temp/workbench.html
  • 32. Development options – online workbench gulp serve --nobrowser {spo site}/_layouts/15/workbench.aspx
  • 33. Development options – classic/modern page 1. gulp --ship 2. gulp package-solution --ship 3. Publish to CDN 4. Deploy to catalog 5. Add app to your site*
  • 34. Development options Debugging using VSCode in Chrome  Open VSCode, View->Extensions  Install “Debugger for chrome”
  • 35. Development options Debugging using VSCode in Chrome  Create launch.json  Select your configuration  Start gulp serve --nobrowser  Press F5
  • 36. DEPENDENCIES Using npm modules External dependencies Legacy script (global)
  • 37. Dependencies - npm Bundling npm modules  When you wish to use an npm available module  If it is a small file, and not reused across many different components * Bundling includes this entire module inside your JS file.
  • 38. Dependencies - npm How?  npm install {package} --save  tsd install {package} --save (or create your own typings {package}.d.ts) In your web part code:  import * as {object} from ‘{package}’  import {object} from ‘{package}’
  • 39. Dependencies - npm External npm modules  When you wish to use an npm available module  If it is a large file, or reused across many different components * External modules will be loaded from a CDN
  • 40. Dependencies - npm How?  Follow previous steps to load the npm module  Mark this module as external, to prevent bundling: – Edit config/config.json – Add this under “externals” object: “<package>”: “{path to js file}”
  • 41. Dependencies - npm Important!  .gitignore excludes node_modules folder  run “npm install” when moving computers  Dependencies change and your project may break as a result - npm shrinkwrap!
  • 42. Dependencies – global library Loading a legacy script file using config.json  When you want to load an external script file from a CDN  Add it as an external (with a global declaration if needed)  Import it in your web part  Optionally, create typings for your global. module declare ‘extLib’{…}  Alternatively, you can declare it as type any: declare var extLib: any;
  • 43. Dependencies – global library Loading a legacy script file programmatically  When you don’t want to change your package signature, or when you want to load it conditionally  When loading an external script file from a CDN
  • 44. Dependencies – global library Loading a legacy script file programmatically How?  Declare its global: declare var kwfabric: any;  Use a promise to load it, execute your code once the promise resolves: SPComponentLoader.loadScript(`https://apps.kwizcom.c om/libs/office-ui-fabric- js/1.4.0/js/fabric.js?prefix=kw`, { globalExportsName: 'kwfabric' }).then((p: any) => { //use kwfabric });
  • 45. Dependencies –fabric js Using Office UI Fabric JS  If you can, use react. It comes with amazing support for Fabric UI.  If not, I recommend using Fabric JS.  Optionally, use KWizCom’s hosted branch of Office UI Fabric JS: http://kwizcom.blogspot.ca/2017/03/using-office-ui- fabric-js-in-spfx.html
  • 46. SHARED REUSABLE CODE Reuse your code between different SPFx projects
  • 47. Shared Reusable Code  Create folder for your shared code  If you plan to use type script  Use your code relatively to your project folder
  • 48. Shared Reusable Code  Create folder for your shared code  If you plan to use type script – Install dependencies manually: npm install @microsoft/sp-core-library@~1.4.0 npm install @microsoft/sp-webpart-base@~1.4.0 – add tsconfig.json, run tsc to compile  Use your code relatively to your project folder
  • 49. Shared Reusable Code  Create folder for your shared code  If you plan to use type script  Use your code relatively to your project folder import Utilities from '../../../../SharedCode/Utilities';
  • 50. Shared Reusable Code Consider creating an npm package Benefits: great versioning and manageability Disadvantages: overhead in managing the package and publishing updates
  • 51. Shared Reusable Code - npm Creating a new package  Run “npm init”  Edit package.json, add dependencies  run “npm install”  If you plan to use type script: – Add tsconfig.json – Run tsc to build JS files from TS – Specify "typings" in your package.json
  • 52. Shared Reusable Code - npm Using your new package  Edit SPFx package dependencies, add your package: "kwizcom-license": "file:../kwizcom-license“  Bundled by default, should you mark as external? – Plan on using this package from several different projects? – Its JS file is large?  How? – Edit config/config.json add to externals: "kwizcom-license": https://kwizcom.sharepoint.com/sites/s/cdn/License.js – Now, you can also push minor updates/fixes without having to re- publish all your projects (when you keep backward compatibility).
  • 53. Shared Reusable Code - npm Publishing updates?  Update version number in package.json  Run “npm update” everywhere you used it to update the package
  • 55. Consuming data Connecting to data  SharePoint  Microsoft Graph * Local workbench not supported
  • 56. Consuming data Requesting SharePoint content  Use SPHttpClient (this.context.spHttpClient) post/get to make rest requests  Load JSOM into your SPFx  DO NOT try to use the JSOM global objects. No one guarantees they will be there in modern pages/other pages.
  • 57. Consuming data What is Microsoft Graph API?  Graph API is a rest end point for all of your users O365 services.  This includes access to his OneDrive, Mail, Calendar, Contacts, SharePoint, and the list goes on.
  • 58. Consuming data Requesting Graph content  Today – do it yourself. Register an application for graph, request the trust/permissions you need, and make rest requests.  Soon – Microsoft will share one token/key we can all use for basic read access – Use GraphHttpClient/MSGraphClient (preview) – Will automatically use a shared available key/token, with limited set of permissions – This token will be limited to accepting requests ONLY from SharePoint online hosted sites, as a security measure.
  • 59. ADVANCED PROPERTYPANE What can you do with the PropertyPane? Building custom controls
  • 60. Advanced PropertyPane Basic concepts  Rendered based off a dynamic JSON definition object.  The tool part will re-render when changing a dropdown value, or when clicking a button.  When a property changes, it will update your web part by re-calling the “render” event.  Basic structure: – Pages -> Groups -> Properties -> Property
  • 61. Advanced PropertyPane Advanced concepts - Validations  onGetErrorMessage return error message string, or function returning promise.  During validation, you can control and change other properties.  In most cases, it is best to fire on change event to notify SharePoint of the change.
  • 62. Advanced PropertyPane Advanced concepts - Custom controls  You can create your own controls for the property pane  Use the render method to render your own controls  Get configuration info from the web part, such as context, label and where to store your values.  Notify the web part on value changes (You will need to create that logic – see next slide)
  • 63. Advanced PropertyPane Advanced concepts - Trigger on change  First, add the two helper function: import { get, update } from "@microsoft/sp-lodash-subset";  Create a handler for your property “on change” private onPropertyChange(propertyPath: string, newValue: any): void { const oldValue: any = get(this.properties, propertyPath); update(this.properties, propertyPath, (): any => { return newValue; }); this.onPropertyPaneFieldChanged(propertyPath, oldValue, newValue); if (!this.disableReactivePropertyChanges) this.render();//update the webpart }
  • 64. Advanced PropertyPane  “this.properties” will get serialized and saved when your web part is saved. No matter how or what changed its value.  Write your own designer logic: popup, panels or inline. Show it when your web part is in edit mode: if (this.displayMode === core.DisplayMode.Edit)
  • 66. UPDATING SPFX FRAMEWORK How to get updates to SPFx?
  • 67. Updating SPFx framework Upgrading SPFx version is a challenge  Pre-GA, it meant building a new project and moving your code  Promised this will stop after GA *
  • 68. Updating SPFx framework Dependencies  In theory, as simple as updating package.json and running npm install/update  In practice, involves a lot of praying, occasionally deleting node_modules, and dealing with unexpected errors in dependencies  Some dependencies are still global, but that will pass
  • 70. Helpful tips Open integrated terminal in VSCode
  • 71. Add import statements You don’t have to type the import yourself, look for the yellow bulb icon when standing on an unrecognized element:
  • 72. Helpful tips Delete/exclude node_modules from your source control / when zipping the project. Demo project size: 646MB, 86K files. Without node_modules: 1.75MB, 138 files.
  • 73. Helpful tips Get used to memorizing commands…  gulp = build  gulp --ship = build in production  gulp trust-dev-cert/untrust-dev-cert = trust the local certificate  gulp package-solution = create package  gulp serve = start local server  code . = open VSCode in current folder
  • 74. Helpful tips  Get used to seeing warnings in the output of the different commands, especially npm- install.  Errors – you should resolve or something will be broken.  Warnings during build (gulp) may come from your code so you should fix these (missing semicolon, unneeded import, etc)

Notes de l'éditeur

  1. KWizCom Corporation Founded in 2005 Headquartered in Toronto Global vendor of SharePoint Add-Ons 5000+ customers worldwide Important thing to mention about KWizCom in the introduction (besides what’s written in the slide): We have started developing add-on for office 365, so if anyone misses some functionality in that environment, please feel free to approach you or sales@kwizcom.com to discuss it (we LOVE gathering real needs from the community)
  2. STS – SharePoint Team Services SPS – SharePoint Portal Server WSS – Windows SharePoint Services MOSS – Microsoft Office SharePoint Server Group sites – SPO, different than regular SharePoint sites – more locked down, nocode.
  3. Full trust era Non experienced developers could bring down the server Developer heaven in terms of full control and unlimited options Installation required access to the server, sometimes IISReset required Add-ins App parts in iframe was a bad idea App web is too isolated, useless Did not deliver on the promise to enable custom columns via JSLink / CSR Provider hosted apps are hard to set up on premise Sandbox Was very restricted and did not deliver a powerful environment App throttling was ridiculous (sorry, you used this web part too much today – come back tomorrow.) No code version was only there to enable adding declarative buttons/CSS since the model was not scalable for the cloud SPFx Powerful runtime, integrated with your site Full trust code, running under the user’s full permissions Isolated by default (less risk of inexperienced developers using globals with conflicts) Built using the powerful TypeScript, a worthy replacement for C# SPO in mid-way dropped a bomb blocking JSLink and CSR support from add-ins requiring full-trust app permissions for them due to a security loophole.
  4. https://github.com/SharePoint/sp-dev-docs/wiki/Why-SPFx
  5. The controls are rendered in the normal page DOM. The controls are responsive and accessible by nature. It’s not just render, but load, serialize deserialize, configuration changes, etc. React, Handlebars, knockout, angular – take your pick The tool chain is based on common open source client development tools like npm, TypeScript, yeoman, webpack, gulp, etc. Solutions can be used by end users on all sites after trusted by admins – even self service created sites like teams, groups, personal, etc. Work on group sites (noscript required), as well as other sites without the need to disable noscript flag.
  6. On prem supported on 2016, older build which only has web parts. SharePoint developers will get lost in the jungle. Toolchain not very Microsoft-Dev friendly, no VS integration or project templates. But VSCode is amazing. It is hard to build a complete solution in SPFx. Missing lot of functionality: no custom column rendering, forms, mobile, etc ~ Admins will need to install updates of your application whenever you change your dependencies. Its not worst than before, but expected to be better. Since these are full trust.
  7. Full trust is awesome – if you know what you are doing. Problem is, it was easy to build FTC in the wrong way. Sandbox was a horrible concept – scalability and limit wise Provider hosted apps – are only good for non-SharePoint applications that want to communicate with SharePoint, but the UX is not good since the user go outside of his SharePoint SharePoint Hosted apps – were useless, since the web parts were in iframes and they didn’t deliver on the promise that they would enable customizing columns using JSLink SPFx has all the right ingredients: rich, robust programming environment, client side API that is now been vetted and tested (still many things missing, but we make do), and it delivers the smooth integrated experience we were looking for. Only thing missing is more artifact types like customize columns, list views, and add menu buttons which were all promised to join the framework. Coming up are modern iteration of JSLInk, ScriptLink and CustomActions: https://github.com/SharePoint/sp-dev-docs/wiki/Release-Notes---Extensions-Dev-Preview-Drop-1 Also, it is used internally by the product team itself! Which brings us back to the situation we had during the full trust era.
  8. Agnostic, yeah, but react is clearly the chosen one.
  9. FabricJS –very buggy, globals will conflict. See KWizCom’s take on fabric JS later in this slideshow.
  10. SPFx package can hold several artifacts inside More types will be coming to production soon A single web part can have more than one declaration with different default value. See react web part sample. Limitations: Field customizer – only works in list view. missing new/view/edit form support. Application customizer – loads only after the entire page content finished loading. You can basically have a JS file do what ever you want on the DOM but might be too late at this point if you want to hide stuff or re-order.
  11. Before publishing your project, you must set up a CDN Script files and other resources (CSS, image, html templates, etc.) can be served from your CDN so that you can control caching, global reach, etc. You can push minor fixes to your server, as long as you do not change the dependencies your package requires. (import / require statements) https://dev.office.com/blogs/office-365-public-cdn-developer-preview-release Why Office 365 is for non ISVs? ISVs might benefit from having all customers point to one origin, so that they can push updates automatically in some cases without requiring customers to install a new package manually. As of SPFx 1.4, includeClientSideAssets flag (on by default) negate the need for a CDN and will bundle up all artifact and deploy them automatically to your SPO CDN library or app catalog site if CDN option is not turned on.
  12. You might want to control the output file name of your project when you build for production (gulp --ship) By default, SPFx builds a hash for the bundle file and append it to the file name. This means on every change you will have to rebuild and publish a new version of your project. If you want to be able to push minor fixes to your CDN and reach your clients, you should consider changing this.
  13. * Note: this can be automated by overriding the build steps, like many other things but I have yet to find a way to do it. ** You only need the JS file in your CDN. Not the JSON file.
  14. BuildVersion is a static variable in your own code. You manage it and it helps you keep track of the runtime version when testing or reporting issues. I prefer a simple number I increment whenever I build in release, but it can be anything. I recommend writing it using console.log to help you find it quickly when checking an issue. Imagine you have a critical bug, or a typo, and just want to fix that. You push your minor fix to your CDN, and expect it to be fixed for all customers. But, if you publish it as a new version – your customers will not see it until they update the package in the catalog. The nice thing is – they don’t have to update it in each and every site, once updated in the catalog it will work. Make sure you keep older packages JS files in your CDN since you don’t know when customers will update. Consider sending an alert for users “a new version is available”.
  15. You should be prompted to trust the app, this will trust the app at the tenant level, and won’t require each user who is adding the app to his site to re-trust it https://github.com/SharePoint/sp-dev-docs/issues/550 There is a bug right now with overwriting the package in the app catalog. Recommended to delete the older version first before uploading the new once. Despite being told several times that the bug in overwriting the package was fixed, I could still observe it when using 2 or more browser windows. Still, the most reliable way is to delete it first and then upload the new version. Perhaps this is really fixed this time – verify. Once uploaded, all sites should start using the new version – you won’t need to update each and every one manually.
  16. Very nice for demos and playground, mainly while building the UI with mock data Useful for automated tests Super fast, responsive Good debug experience, can get all map files and debug TS files directly. Debug in VSCode: install ‘VS Code – Debugger for Chrome’ https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome From my experience: not recommended at all, since the online workbench has all the same benefits plus more.
  17. All the benefits of the local workbench Connected to your site, so you have a valid SharePoint context. Cannot save the page, so I also recommend testing every version you are about to ship against a classic/modern with a saved web part from previous release (see later why). Recommended for dev time, and unit testing. Note: if you added the published app to this site, as of 1.4 you will not be able to use the workbench on that same site. You will need to use the workbench on a different site.
  18. takes time and you must publish the app to catalog, add it to your site and then add the web part to your page. Get the exact experience your end users will have, along with an option to save the web part. Why is this important? Your web part will be loaded with all dependencies sent to it with private names. If your code changes and your web part now requires a different set of dependencies (a using/import was added/removed) – the signature will change. At this point your web part will stop working and require you to publish a new web part to the catalog with the correct signature that matches these dependencies. Production requires use of CDN to host your files. You will lose your TS debugging options when building in production. * From my experience, you can skip step 5 if you already added the app to your site. apps are updated in all your sites where used automatically.
  19. For non-production built packages, or for workbench.
  20. Create multiple configurations in launch.json, for each project in case you have multiple After gulp serve is running, select the right configuration and press F5 Debugger will start its own controlled browser Note: if your project is in a sub folder, modify the “webRoot” in the JSON file accordingly. https://dev.office.com/sharepoint/docs/spfx/debug-in-vscode
  21. Bundling: means the content of the module JS will be copied entirely into your package JS bundle file.
  22. Alternatively, add it to your package.json and run npm install. This basically does the same as the --save flag.
  23. For legacy modules that use a global object: “<package>”: {“Path”: “{path to js file}”, “globalName”: “<global>”} * You might also want to create a typings file for libraries that don’t have them.
  24. Consider backing up node_modules folder on a version that was working. Don’t recommend adding it to every SPFx project, but maybe add it to one “sanity” project, but removing .gitignore file. If (when) the time comes and your project fails to build, you can compare dependency versions between your latest working version of “sanity” and the versions that break. More info: http://kwizcom.blogspot.ca/2017/07/spfx-project-breaking-after-moving-to.html Run npm shrinkwrap to keep the entire dependency tree of npm packages so that you know when other devs use it and run npm install they get exactly the same packages as you do.
  25. https://dev.office.com/sharepoint/docs/spfx/web-parts/basics/add-an-external-library Edit config/config.json Add this under “externals” object: “<package>”: { “path”: “<path to js file>”, “globalName”: “extLib”, “globalDependencies”: [] }
  26. Fabric JS has many bugs and quirks, and missing features. Also, it registers global objects and global CSS files that might collide between versions. The best way around that, is to create your own branch, and use your own prefix. KWizCom offers our own version to the public, that is isolated from other versions, plus maintained by our R&D for bug fixes and additional functionality. It is accessible from here: https://apps.kwizcom.com/libs/office-ui-fabric-js/1.4.0/js/fabric.js?prefix={yourprefix} Feel free to load it, using your own prefix. When we publish new versions, you can create a new prefix to keep them isolated and working side by side on the same page.
  27. One issue: since SP core classes are not installed globally, you might have to use any types to avoid type mismatch errors when using the same code in 2 or more projects, especially if they each use different SPFx build version Once you edit/change your code, you will need to run tsc to re-compile your scripts.
  28. One issue: since SP core classes are not installed globally, you might have to use any types to avoid type mismatch errors when using the same code in 2 or more projects Once you edit/change your code, you will need to run tsc to re-compile your scripts.
  29. One issue: since SP core classes are not installed globally, you might have to use any types to avoid type mismatch errors when using the same code in 2 or more projects Once you edit/change your code, you will need to run tsc to re-compile your scripts.
  30. Publish it as a private or public NPM module, to GitHub, or to a local folder relative to your project Consume it as any other NPM module, using declaration in package.json file
  31. In react demo it is defined as external. In KO bundled. See how content comes into ko bundle file and not to react? See how react web part loading it from CDN (and not working in local workbench)? Package name must be lower case only, use – as separator Author format: name <email> (web site) License: specify in a separate file: “SEE LICENSE IN <filename>” Instead of editing package.json manually, consider using “npm install {package}@{version} --save“ flag
  32. In react demo it is defined as external. In KO bundled. See how content comes into ko bundle file and not to react? See how react web part loading it from CDN (and not working in local workbench)? When pushing shared package updates to CDN, be sure to consider full backward compatibility. Otherwise, version your publish.
  33. In react demo it is defined as external. In KO bundled. See how content comes into ko bundle file and not to react? See how react web part loading it from CDN (and not working in local workbench)?
  34. https://developer.microsoft.com/en-us/graph/graph-explorer Example: SharedCode/Utilities.ts, KODemo Note: not supported on local workbench either
  35. JSON object can change and re-render the property pane to reflect changes. This allows you to add, remove or change properties, sections and pages in the PropertyPane. You can also dynamically load the options of a drop down control by changing the definition of that control in the JSON object. Changes in properties re-render your web part, which allow your web part to update the UI and be reactive to the user changes. If your render method takes time, you might want to turn off reactive mode to disable this.
  36. For more advanced validations, depending on other properties, and affecting/changing other properties, it can be a function that returned a promise. You must resolve the promise with empty value for valid or error message for invalid. Note: if you return an error message for invalid field, as soon as the user leaves that field control his value will be reverted to the last valid value. This can be a big problem if the user needs to change another field before his current field becomes valid.
  37. The PropertyPane logic can be very confusing to users, especially in classic pages. They do not integrate well with the classic web part properties. It is, then, up to you to decide if you want to use the SPFx PropertyPane, or build your own configuration experience.
  38. This would not normally be an issue, since how many of us installed updated to previous VS Tools for SharePoint? Except, this time around Microsoft shifted to releasing half baked early versions, while adding more features and updates regularly. So, I suspect updating the framework will become more popular, and the experience isn’t great.
  39. We have yet to see how updates will be delivered into existing projects, currently it is a lot of manual editing, very error prone See issue with chrome v58 self signed certificate was very complex to get the fix long after it was published: https://github.com/webpack/webpack-dev-server/issues/854 Simply updating your yeoman generator doesn’t help existing projects. You need to manually edit your project or create a new one and move your code to it. This would create a version history nightmare in the long run. * While upgrading is much better now, it is still far from perfect and in many cases still requires building a new package in the new version. Ex: http://kwizcom.blogspot.ca/2018/04/upgrading-spfx-react-from-110-to-140.html
  40. version mismatch, missing/wrong typings, etc. Example: Fabric UI Core classes were updated and later pulled after they broke many web parts. Read more: https://github.com/SharePoint/sp-dev-docs/issues/325#issuecomment-315683738 The process is very hard to debug in some cases, involves reading many lines of errors in the console output.
  41. You can always restore them using npm install, if you are using packages. Only down side, if you are using a package that got unpublished, you might not be able to restore it. But that is pretty rare, and probably means you shouldn’t use that package anymore anyways.
  42. Safe to ignore, although very disturbing.