SlideShare a Scribd company logo
1 of 32
@ChrisO_Brien
SharePoint
developments
SharePoint
provisioning
service, Site
Designs, Page
Designs,
navigation, web
parts etc.
New Teams
capabilities
SharePoint/
Teams
integration
Templated teams
PowerApps/
Flow
PowerApps
“components”
Responsive apps
Licensing changes
Microsoft Graph
Teams
provisioning
APIs
Security APIs
More app-only
support
Other
Azure Functions
v2
Managed
Service Identity
PowerShell v2
SharePoint (e.g. Site Designs, modern web parts, header/nav etc.)
SPFx dev – including React, SCSS, security etc.
Graph!
Azure (e.g. Functions, AAD app registrations, Key Vault etc.)
PowerApps and Flow
Teams dev – including templating, tabs and bots etc.
SPFx/
Azure Functions:
•- Work effectively with
the Graph
•- Call AAD-secured
function from SPFx (using
AadHttpClient)
•- Call AAD-secured
function from SPFx
isolated web part
•- SPFx formats:
• Application customizer
• Web parts
• Field customizers
• ListView command set
SharePoint
- Implement custom site
design which calls Flow to
apply PnP template (with
app-only auth)
- Implement JSON
view/column formatting
Azure Functions
(general)
- Use Managed Service
Identity with Azure
Functions/Key Vault
- Use App Insights in
Azure Functions
Power platform
- Create custom
connector to call Azure
Function from
PowerApps/Flow
- Implement offline
support in PowerApps
- Implement on-premises
data gateway for
PowerApps/Flow/Power BI
- Store image from
PowerApps Camera/Pen
control into SharePoint
Chris O’Brien – www.sharepointnutsandbolts.com
SPFx/
Azure Functions:
•- Work effectively with
the Graph
•- Call AAD-secured
function from SPFx (using
AadHttpClient)
•- Call AAD-secured
function from SPFx
isolated web part
•- SPFx formats:
• Application customizer
• Web parts
• Field customizers
• ListView command set
SharePoint
- Implement custom site
design which calls Flow
to apply PnP template
(with app-only auth)
- Implement JSON
view/column formatting
Azure Functions
(general)
- Use Managed Service
Identity with Azure
Functions/Key Vault
- Use App Insights in
Azure Functions
Power platform
- Create custom connector
to call Azure Function
from PowerApps/Flow
- Implement offline
support in PowerApps
- Implement on-premises
data gateway for
PowerApps/Flow/Power BI
- Store image from
PowerApps Camera/Pen
control into SharePoint
- Flow controller pattern
Chris O’Brien – www.sharepointnutsandbolts.com
Work effectively with the Graph
Technique 1
The answer -
Create your AAD app reg
Grant appropriate app-only/delegated permission
scopes and provide admin consent
IMPORTANT! Add reply URL to AAD app reg:
https://app.getpostman.com/oauth2/callback
Import Postman collections from Github
Enter Client ID/Client Secret/Tenant ID as
Postman variables
https://github.com/microsoftgraph/microsoftgraph-postman-collections
Option 1 – roll your own
Option 2 – use “paste JSON as code”
https://marketplace.visualstudio.com/items?
itemName=quicktype.quicktype
Option 3 – use Microsoft Graph TypeScript Types
https://github.com/microsoftgraph/msgraph-typescript-typings
npm install @microsoft/microsoft-graph-types --save-dev
npm install @microsoft/microsoft-graph-types-beta --save-
dev
Get (or create)
AAD app
details
Import
collections (URL
below)
Populate token
variables
Obtain app
access token –
paste
Obtain user
access token –
paste
Call any Graph
method as your
AAD app ID
https://github.com/microsoftgraph/microsoftgraph-postman-collections
Call your secure web API (or the
Graph) from SPFx
Technique 2
Fundamentals
1. Create an Azure Function, secure with AAD
auth
2. Declare permissions in SPFx manifest
3. Use AadHttpClient in code to connect to your
API
4. Deploy SPFx package, consent to permissions
Are you calling direct from TypeScript, or via an Azure Function?
Approach How
SPFx -> Graph • Use AadHttpClient or MsGraphClient in code
• Add WebApiPermissions to SPFx manifest –
Calendar.Read, Group.ReadWrite.All etc.
• Call Graph endpoint directly from SPFx code
SPFx -> Azure Function -> Graph • Implement AAD auth on Function
• Add WebApiPermissions to SPFx manifest –
user_impersonation
• Call Azure Function from SPFx code
• Inside the function - exchange passed token for
one which can call Graph
Beneficial because:
Considerations:
PowerApps to collect images
Technique 3
Some work required to save to
SharePoint, but not much..
Use “call Flow from PowerApps” approach – no
code required
The key – Flow’s ‘dataUriToBinary’ function
Signatures (pen input control) are harder

Need an Azure Function here – different format URI
http://johnliu.net/blog/2017/5/taking-a-picture-with-powerapps-and-sending-to-
sharepoint-with-just-flow
Fundamentals
1. Create a PowerApp which uses the Camera
control. Save photo to collection.
2. Create a Flow which has PowerApps trigger –
use dataUriToBinary()
3. Call Flow from your PowerApp – pass item
from collection to Flow.
Site Designs and PnP templating
Technique 4
Site settings – theme, logo, regional settings, permissions, external sharing
Create lists and libraries (with columns, content types, views etc.)
Install SPFx solution (e.g. web part)
Register an SPFx extension (e.g. header, footer)
Trigger a Flow
Join a hub site (when site created from this template)
Still big gaps compared to PnP!
See https://docs.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-design-trigger-flow-tutorial
Site design Flow
Adds item to
queue
Azure
Function
runs (queue
trigger)
Runs
code/applies
PnP
template
https://cob-sp.com/
Site-Designs-PnP-1
A well-rounded developer has skills across:
SharePoint
SPFx
PnP –
provisioning,
controls,
samples etc.
Site Designs
Teams
SPFx/Teams
integration
Templated teams
App
development –
tabs, bots etc.
PowerApps/
Flow
Solution building
Use of
camera/pen input
Extending with
Azure Functions
Microsoft Graph
From SPFx
From .NET
Use of SDKs
Other
Azure Functions
Azure Dev Ops
(boards, pipelines)
React
Git
https://sharepointnutsandbolts.com
https://github.com/microsoftgraph/micro
softgraph-postman-collections
https://cob-sp.com/2JeJYS4
Thank you!! 
Any questions?
www.sharepointnutsandbolts.com
@ChrisO_Brien
Reference slides
Same set-up:
BUT – token passed from SPFx cannot call the Graph
// obtain passed access token from SPFx..
var userImpersonationAccessToken = req.Headers.Authorization.Parameter;
UserAssertion userAssertion = new UserAssertion(userImpersonationAccessToken);
// use to get new token using AAD app/delegated context..
ClientCredential clientCred = new ClientCredential(clientId, clientSecret);
AuthenticationResult authenticationResult = await authenticationContext.AcquireTokenAsync
(resourceId, clientCred, userAssertion);
string token = authenticationResult.AccessToken;
var outputName = String.Empty;
var responseString = String.Empty;
var phone = String.Empty;
using (var client = new HttpClient())
{
string requestUrl = $"https://graph.microsoft.com/v1.0/me";
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, requestUrl);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
log.Info("About to request URL " + requestUrl);
HttpResponseMessage response = client.SendAsync(request).Result;
responseString = response.Content.ReadAsStringAsync().Result;
var user = JsonConvert.DeserializeObject<AADUser>(responseString);
phone = user.mobilePhone;
outputName = user.displayName;
}
Key benefits:
Template sites for Microsoft Teams and
Office 365 Groups
and:
Team sites
Communication sites
Hub sites
Integrated into Office 365 UI

More Related Content

What's hot

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
SharePointRadi
 

What's hot (20)

ecs19 - Bill Ayers - RE-USE YOUR SHAREPOINT FRAMEWORK SKILLZ TO BUILD OFFICE ...
ecs19 - Bill Ayers - RE-USE YOUR SHAREPOINT FRAMEWORK SKILLZ TO BUILD OFFICE ...ecs19 - Bill Ayers - RE-USE YOUR SHAREPOINT FRAMEWORK SKILLZ TO BUILD OFFICE ...
ecs19 - Bill Ayers - RE-USE YOUR SHAREPOINT FRAMEWORK SKILLZ TO BUILD OFFICE ...
 
ECS19 - John White - Unlock SharePoint’s Reporting Secrets
ECS19 - John White - Unlock SharePoint’s Reporting SecretsECS19 - John White - Unlock SharePoint’s Reporting Secrets
ECS19 - John White - Unlock SharePoint’s Reporting Secrets
 
[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?
 
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
 
O365Con18 - PowerApps build custom forms for SharePoint with Azure Maps - Bra...
O365Con18 - PowerApps build custom forms for SharePoint with Azure Maps - Bra...O365Con18 - PowerApps build custom forms for SharePoint with Azure Maps - Bra...
O365Con18 - PowerApps build custom forms for SharePoint with Azure Maps - Bra...
 
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 - 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 - Robi Voncina - Upgrade to SharePoint 2019
ECS19 - Robi Voncina - Upgrade to SharePoint 2019ECS19 - Robi Voncina - Upgrade to SharePoint 2019
ECS19 - Robi Voncina - Upgrade to SharePoint 2019
 
[Collinge] Office 365 Enterprise Network Connectivity Using Published Office ...
[Collinge] Office 365 Enterprise Network Connectivity Using Published Office ...[Collinge] Office 365 Enterprise Network Connectivity Using Published Office ...
[Collinge] Office 365 Enterprise Network Connectivity Using Published Office ...
 
COB - Azure Functions for Office 365 developers
COB - Azure Functions for Office 365 developersCOB - Azure Functions for Office 365 developers
COB - Azure Functions for Office 365 developers
 
Chris O'Brien - Best bits of Azure for Office 365/SharePoint developers
Chris O'Brien - Best bits of Azure for Office 365/SharePoint developersChris O'Brien - Best bits of Azure for Office 365/SharePoint developers
Chris O'Brien - Best bits of Azure for Office 365/SharePoint developers
 
[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
 
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
 
O365Con18 - Create an Immersive Experience with Office365 Data and Mixed Real...
O365Con18 - Create an Immersive Experience with Office365 Data and Mixed Real...O365Con18 - Create an Immersive Experience with Office365 Data and Mixed Real...
O365Con18 - Create an Immersive Experience with Office365 Data and Mixed Real...
 
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...
 
Salesforce Lightning workshop Hartford - 12 March
Salesforce Lightning workshop Hartford - 12 MarchSalesforce Lightning workshop Hartford - 12 March
Salesforce Lightning workshop Hartford - 12 March
 
ECS19 - Patrick Curran - Expanding User Profiles with Line of Business Data (...
ECS19 - Patrick Curran - Expanding User Profiles with Line of Business Data (...ECS19 - Patrick Curran - Expanding User Profiles with Line of Business Data (...
ECS19 - Patrick Curran - Expanding User Profiles with Line of Business Data (...
 
Building a Microsoft Teams Provisioning Process using Power Apps & Power Auto...
Building a Microsoft Teams Provisioning Process using Power Apps & Power Auto...Building a Microsoft Teams Provisioning Process using Power Apps & Power Auto...
Building a Microsoft Teams Provisioning Process using Power Apps & Power Auto...
 
ECS19 - Gokan Ozcifci - PowerApps and SharePoint: Better together.
ECS19 - Gokan Ozcifci - PowerApps and SharePoint: Better together.ECS19 - Gokan Ozcifci - PowerApps and SharePoint: Better together.
ECS19 - Gokan Ozcifci - PowerApps and SharePoint: Better together.
 
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
 

Similar to ECS 19 - Chris O'Brien - The hit list - Office 365 dev techniques you should know

Stefaan Ponnet, Fusebox
Stefaan Ponnet, FuseboxStefaan Ponnet, Fusebox
Stefaan Ponnet, Fusebox
nascomgenk
 
In Act Developers Platform
In Act Developers PlatformIn Act Developers Platform
In Act Developers Platform
Eris Ristemena
 

Similar to ECS 19 - Chris O'Brien - The hit list - Office 365 dev techniques you should know (20)

Introducción al SharePoint Framework SPFx
Introducción al SharePoint Framework SPFxIntroducción al SharePoint Framework SPFx
Introducción al SharePoint Framework SPFx
 
SPUnite17 Building Great Client Side Web Parts with SPFx
SPUnite17 Building Great Client Side Web Parts with SPFxSPUnite17 Building Great Client Side Web Parts with SPFx
SPUnite17 Building Great Client Side Web Parts with SPFx
 
SharePoint Framework at a glance
SharePoint Framework at a glanceSharePoint Framework at a glance
SharePoint Framework at a glance
 
Leveraging SharePoint as a development platform for the modern intranet
Leveraging SharePoint as a development platform for the modern intranetLeveraging SharePoint as a development platform for the modern intranet
Leveraging SharePoint as a development platform for the modern intranet
 
Charla desarrollo de apps con sharepoint y office 365
Charla   desarrollo de apps con sharepoint y office 365Charla   desarrollo de apps con sharepoint y office 365
Charla desarrollo de apps con sharepoint y office 365
 
Stefaan Ponnet, Fusebox
Stefaan Ponnet, FuseboxStefaan Ponnet, Fusebox
Stefaan Ponnet, Fusebox
 
SharePoint Framework SPFx
SharePoint Framework SPFxSharePoint Framework SPFx
SharePoint Framework SPFx
 
Microsoft graph and power platform champ
Microsoft graph and power platform   champMicrosoft graph and power platform   champ
Microsoft graph and power platform champ
 
Best practices for share point solution deployment
Best practices for share point solution deploymentBest practices for share point solution deployment
Best practices for share point solution deployment
 
In Act Developers Platform
In Act Developers PlatformIn Act Developers Platform
In Act Developers Platform
 
Chris O'Brien - Modern SharePoint development: techniques for moving code off...
Chris O'Brien - Modern SharePoint development: techniques for moving code off...Chris O'Brien - Modern SharePoint development: techniques for moving code off...
Chris O'Brien - Modern SharePoint development: techniques for moving code off...
 
Create cross-platform apps that interact with Microsoft Graph and Office 365 ...
Create cross-platform apps that interact with Microsoft Graph and Office 365 ...Create cross-platform apps that interact with Microsoft Graph and Office 365 ...
Create cross-platform apps that interact with Microsoft Graph and Office 365 ...
 
Updating Legacy SharePoint Customizations to the Add-in Model
Updating Legacy SharePoint Customizations to the Add-in ModelUpdating Legacy SharePoint Customizations to the Add-in Model
Updating Legacy SharePoint Customizations to the Add-in Model
 
Ttl
TtlTtl
Ttl
 
Xamarin microsoft graph
Xamarin microsoft graphXamarin microsoft graph
Xamarin microsoft graph
 
harePoint Framework Webinar Series: Consume Graph APIs in SharePoint Framework
harePoint Framework Webinar Series: Consume Graph APIs in SharePoint FrameworkharePoint Framework Webinar Series: Consume Graph APIs in SharePoint Framework
harePoint Framework Webinar Series: Consume Graph APIs in SharePoint Framework
 
Summer 16 Developer Overview
Summer 16 Developer OverviewSummer 16 Developer Overview
Summer 16 Developer Overview
 
Asp.net
Asp.netAsp.net
Asp.net
 
AWS re:Invent 2016: Deep-Dive: Native, Hybrid and Web patterns with Serverles...
AWS re:Invent 2016: Deep-Dive: Native, Hybrid and Web patterns with Serverles...AWS re:Invent 2016: Deep-Dive: Native, Hybrid and Web patterns with Serverles...
AWS re:Invent 2016: Deep-Dive: Native, Hybrid and Web patterns with Serverles...
 
Real World SharePoint Framework and Azure Services
Real World SharePoint Framework and Azure ServicesReal World SharePoint Framework and Azure Services
Real World SharePoint Framework and Azure Services
 

More from European Collaboration Summit

More from 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 - 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 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 - 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...
 
ECS19 - Rodrigo Pinto - Modernize Your Classic SharePoint Sites
ECS19 - Rodrigo Pinto - Modernize Your Classic SharePoint SitesECS19 - Rodrigo Pinto - Modernize Your Classic SharePoint Sites
ECS19 - Rodrigo Pinto - Modernize Your Classic SharePoint Sites
 
ECS19 - Rodrigo Pinto - Migrating to Teams, real cases and scenarios
ECS19 - Rodrigo Pinto - Migrating to Teams, real cases and scenariosECS19 - Rodrigo Pinto - Migrating to Teams, real cases and scenarios
ECS19 - Rodrigo Pinto - Migrating to Teams, real cases and scenarios
 
ECS19 - Radi Atanassov - Using Azure Functions as Your Business Logic Layer
ECS19 - Radi Atanassov - Using Azure Functions as Your Business Logic LayerECS19 - Radi Atanassov - Using Azure Functions as Your Business Logic Layer
ECS19 - Radi Atanassov - Using Azure Functions as Your Business Logic Layer
 
ECS19 - Paul Collinge - Transforming enterprise network connectivity in a clo...
ECS19 - Paul Collinge - Transforming enterprise network connectivity in a clo...ECS19 - Paul Collinge - Transforming enterprise network connectivity in a clo...
ECS19 - Paul Collinge - Transforming enterprise network connectivity in a clo...
 

Recently uploaded

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...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 

Recently uploaded (20)

%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
 
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...
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
%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
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
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?
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
 
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
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
%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
 
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 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
 

ECS 19 - Chris O'Brien - The hit list - Office 365 dev techniques you should know

  • 2. SharePoint developments SharePoint provisioning service, Site Designs, Page Designs, navigation, web parts etc. New Teams capabilities SharePoint/ Teams integration Templated teams PowerApps/ Flow PowerApps “components” Responsive apps Licensing changes Microsoft Graph Teams provisioning APIs Security APIs More app-only support Other Azure Functions v2 Managed Service Identity PowerShell v2
  • 3. SharePoint (e.g. Site Designs, modern web parts, header/nav etc.) SPFx dev – including React, SCSS, security etc. Graph! Azure (e.g. Functions, AAD app registrations, Key Vault etc.) PowerApps and Flow Teams dev – including templating, tabs and bots etc.
  • 4. SPFx/ Azure Functions: •- Work effectively with the Graph •- Call AAD-secured function from SPFx (using AadHttpClient) •- Call AAD-secured function from SPFx isolated web part •- SPFx formats: • Application customizer • Web parts • Field customizers • ListView command set SharePoint - Implement custom site design which calls Flow to apply PnP template (with app-only auth) - Implement JSON view/column formatting Azure Functions (general) - Use Managed Service Identity with Azure Functions/Key Vault - Use App Insights in Azure Functions Power platform - Create custom connector to call Azure Function from PowerApps/Flow - Implement offline support in PowerApps - Implement on-premises data gateway for PowerApps/Flow/Power BI - Store image from PowerApps Camera/Pen control into SharePoint Chris O’Brien – www.sharepointnutsandbolts.com
  • 5. SPFx/ Azure Functions: •- Work effectively with the Graph •- Call AAD-secured function from SPFx (using AadHttpClient) •- Call AAD-secured function from SPFx isolated web part •- SPFx formats: • Application customizer • Web parts • Field customizers • ListView command set SharePoint - Implement custom site design which calls Flow to apply PnP template (with app-only auth) - Implement JSON view/column formatting Azure Functions (general) - Use Managed Service Identity with Azure Functions/Key Vault - Use App Insights in Azure Functions Power platform - Create custom connector to call Azure Function from PowerApps/Flow - Implement offline support in PowerApps - Implement on-premises data gateway for PowerApps/Flow/Power BI - Store image from PowerApps Camera/Pen control into SharePoint - Flow controller pattern Chris O’Brien – www.sharepointnutsandbolts.com
  • 6. Work effectively with the Graph Technique 1
  • 8. Create your AAD app reg Grant appropriate app-only/delegated permission scopes and provide admin consent IMPORTANT! Add reply URL to AAD app reg: https://app.getpostman.com/oauth2/callback Import Postman collections from Github Enter Client ID/Client Secret/Tenant ID as Postman variables https://github.com/microsoftgraph/microsoftgraph-postman-collections
  • 9. Option 1 – roll your own Option 2 – use “paste JSON as code” https://marketplace.visualstudio.com/items? itemName=quicktype.quicktype Option 3 – use Microsoft Graph TypeScript Types https://github.com/microsoftgraph/msgraph-typescript-typings npm install @microsoft/microsoft-graph-types --save-dev npm install @microsoft/microsoft-graph-types-beta --save- dev
  • 10.
  • 11. Get (or create) AAD app details Import collections (URL below) Populate token variables Obtain app access token – paste Obtain user access token – paste Call any Graph method as your AAD app ID https://github.com/microsoftgraph/microsoftgraph-postman-collections
  • 12. Call your secure web API (or the Graph) from SPFx Technique 2
  • 13. Fundamentals 1. Create an Azure Function, secure with AAD auth 2. Declare permissions in SPFx manifest 3. Use AadHttpClient in code to connect to your API 4. Deploy SPFx package, consent to permissions
  • 14. Are you calling direct from TypeScript, or via an Azure Function? Approach How SPFx -> Graph • Use AadHttpClient or MsGraphClient in code • Add WebApiPermissions to SPFx manifest – Calendar.Read, Group.ReadWrite.All etc. • Call Graph endpoint directly from SPFx code SPFx -> Azure Function -> Graph • Implement AAD auth on Function • Add WebApiPermissions to SPFx manifest – user_impersonation • Call Azure Function from SPFx code • Inside the function - exchange passed token for one which can call Graph
  • 16.
  • 17. PowerApps to collect images Technique 3
  • 18. Some work required to save to SharePoint, but not much.. Use “call Flow from PowerApps” approach – no code required The key – Flow’s ‘dataUriToBinary’ function Signatures (pen input control) are harder  Need an Azure Function here – different format URI http://johnliu.net/blog/2017/5/taking-a-picture-with-powerapps-and-sending-to- sharepoint-with-just-flow
  • 19. Fundamentals 1. Create a PowerApp which uses the Camera control. Save photo to collection. 2. Create a Flow which has PowerApps trigger – use dataUriToBinary() 3. Call Flow from your PowerApp – pass item from collection to Flow.
  • 20.
  • 21. Site Designs and PnP templating Technique 4
  • 22. Site settings – theme, logo, regional settings, permissions, external sharing Create lists and libraries (with columns, content types, views etc.) Install SPFx solution (e.g. web part) Register an SPFx extension (e.g. header, footer) Trigger a Flow Join a hub site (when site created from this template) Still big gaps compared to PnP!
  • 23. See https://docs.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-design-trigger-flow-tutorial Site design Flow Adds item to queue Azure Function runs (queue trigger) Runs code/applies PnP template
  • 24.
  • 26. A well-rounded developer has skills across: SharePoint SPFx PnP – provisioning, controls, samples etc. Site Designs Teams SPFx/Teams integration Templated teams App development – tabs, bots etc. PowerApps/ Flow Solution building Use of camera/pen input Extending with Azure Functions Microsoft Graph From SPFx From .NET Use of SDKs Other Azure Functions Azure Dev Ops (boards, pipelines) React Git
  • 27.
  • 30. Same set-up: BUT – token passed from SPFx cannot call the Graph
  • 31. // obtain passed access token from SPFx.. var userImpersonationAccessToken = req.Headers.Authorization.Parameter; UserAssertion userAssertion = new UserAssertion(userImpersonationAccessToken); // use to get new token using AAD app/delegated context.. ClientCredential clientCred = new ClientCredential(clientId, clientSecret); AuthenticationResult authenticationResult = await authenticationContext.AcquireTokenAsync (resourceId, clientCred, userAssertion); string token = authenticationResult.AccessToken; var outputName = String.Empty; var responseString = String.Empty; var phone = String.Empty; using (var client = new HttpClient()) { string requestUrl = $"https://graph.microsoft.com/v1.0/me"; HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, requestUrl); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token); log.Info("About to request URL " + requestUrl); HttpResponseMessage response = client.SendAsync(request).Result; responseString = response.Content.ReadAsStringAsync().Result; var user = JsonConvert.DeserializeObject<AADUser>(responseString); phone = user.mobilePhone; outputName = user.displayName; }
  • 32. Key benefits: Template sites for Microsoft Teams and Office 365 Groups and: Team sites Communication sites Hub sites Integrated into Office 365 UI