ScottishSummit24 - Level up your teams extensibility game with Blazor! - Antti Koskela

AnttiKoskela 62 views 54 slides Oct 19, 2024
Slide 1
Slide 1 of 54
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54

About This Presentation

🚀 Join this exciting session on creating dynamic and engaging Teams apps using the powerful Blazor web framework. Whether you’re a seasoned developer or just dipping your toes into the world of Teams app development, this session will equip you with new knowledge and tools for the craft – hop...


Slide Content

#ScottishSummit2024
Level Up Your
Teams
Extensibility Game
with Blazor!

#ScottishSummit2024
Thank Youto our Sponsors…
Platinum Sponsor
Gold Sponsors

#ScottishSummit2024
Thank You to our Sponsors…
With Thanks

#ScottishSummit2024
Hi, I’m Antti
•Coding for cookies (and occasionally
cash) since 2004
•Microsoft MVP for Azure and M365
•Live in Finland
•Might be opinionated about tech
https://www.linkedin.com/in/koskila/
https://www.koskila.net
https://x.com/koskila
https://github.com/koskila

#ScottishSummit2024
My Journey Here

#ScottishSummit2024
My Journey Here

#ScottishSummit2024
My Journey Here

#ScottishSummit2024
My Journey Here

#ScottishSummit2024
Level Up Your
Teams
Extensibility Game
with Blazor!

#ScottishSummit2024
Agenda
At the end of this session you:
•Know a bit about Teams Extensibility (5 min)
•Know the basics about Blazor (10 min)
•Have seen a demo ☺ (15 min)
•Are aware of some pitfalls (10 min)

#ScottishSummit2024
How about you – Show of hands!
•Are you:
•Familiar with Teams extensions?
•Familiar with Blazor?
•A GitHub Copilot user?

#ScottishSummit2024 12
#ScottishSummit2024
Teams Extensibility

#ScottishSummit2024
Teams Extensibility: The Microsoft overview
M icrosoft Tea ms a pp ca pa bilities for ta b.
M icrosoft Tea ms a pp ca pa bilities for bot.
M icrosoft Tea ms a pp ca pa bilities for messa g e extension.
M icrosoft Tea ms a pp ca pa bilities for a da ptiv e ca rds.
M icrosoft Tea ms a pp ca pa bilities for meeting s.
M icrosoft Tea ms a pp ca pa bilities for webhook s a nd connectors.
M icrosoft Tea ms a pp ca pa bilities for g ra ph conv ersa tiona l interfa ce.

#ScottishSummit2024
Teams Extensibility: Simplified
•Basically 4 UI surfaces:
•Activity Feed
•Message Extension
•Bot
•Tab

#ScottishSummit2024
Teams Extensibility: Simplified

#ScottishSummit2024
Teams Extensibility
•TeamsFX
•Teams Toolkit

#ScottishSummit2024 17
#ScottishSummit2024
Blazor?

#ScottishSummit2024
Blazor?
•What’s with the name?

#ScottishSummit2024
Blazor?
•A web framework
•Part of the ASP.NET Core suite
•C# for both client-side and server-side logic
“Component-based architecture, state management,
and seamless integration with .NET libraries make it a
robust choice for modern web development”

#ScottishSummit2024
Brief history of Blazor
2024-
2021
2020
2019
2017
Announced
First as a tech
demo at NDC
Oslo
Officially
launched
As part of .NET
Core 3.0 (Blazor
Server)
Blazor WASM
Reached GA with
.NET Core 3.1.3
Blazor Hybrid
Released in .NET
6. MAUI takes
Blazor to mobile
platforms
Ongoing
work
Blazor United

#ScottishSummit2024
Blazor?
•Uses component model from Razor
Pages
•Build once, run anywhere

#ScottishSummit2024
Blazor
•Comes in 2 basic flavors:
•Blazor Server
•Runs server-side, uses SignalR for interactivity
•Blazor WASM (WebAssembly)
•Runs completely in the browser (SWA)
•+ Blazor United & Blazor Hybrid...

#ScottishSummit2024
What you get out-of-the-box?
•FluentUI (provided by Microsoft, but it is a separate
nuget package)

#ScottishSummit2024
Vendors
•Telerik
•DevExpress
•Syncfusion
•Infragistics
•GrapeCity
•jQWidgets
•... and more!

#ScottishSummit2024
Open Source efforts
•Radzen - A free and open-source Blazor component library
•MudBlazor - A popular open-source Blazor component library focused
on Material Design
•MatBlazor - Another open-source library for Material Design components
[Obsolete]
•Blazorise - A versatile Blazor component library that supports multiple
CSS frameworks
•Blazored - Offers a variety of Blazor components for common UI
elements
•PureBlazor - Focuses on accessibility, performance, and customization
with TailwindCSS

#ScottishSummit2024 27
#ScottishSummit2024
Why Blazor?

#ScottishSummit2024
Why Blazor?
•Get stuff done, fast
•Great* Teams tooling
•I dislike JavaScript
•Because Blazor is shiny.

#ScottishSummit2024 29
#ScottishSummit2024
How?

#ScottishSummit2024
Demo time
Running and debugging a
basic Teams tab

#ScottishSummit2024 31
#ScottishSummit2024
Deployment

#ScottishSummit2024
ClickOps
•Super easy to right-click publish!
•You should probably not use it

#ScottishSummit2024
GitHub Actions
•GitHub Actions is easy too
•It’s “just a website”
•“Build and deploy ASP.Net Core app to Azure Web App”

#ScottishSummit2024 34
#ScottishSummit2024
Learnings

#ScottishSummit2024
AAD config can be complex
•For dev environment
(where you have Global
Admin) -> easy
•For production (without
having a friendly Global
Admin) -> painful

#ScottishSummit2024
Hot Reload feels like magic (when it works)

#ScottishSummit2024
Graph Client (“SDK”) still kinda sucks
•Cumbersome classes that change between versions
•Auto-generated “RequestBuilder” approach is dubious
•Kiota is technically impressive, but a really lazy approach for
an SDK...
•GitHub Copilot doesn’t understand the SDK either
•Mismatch between models and versions of v1.0 and beta
(different packages)
•Graph Explorer is your best friend (because the SDK is not!)

#ScottishSummit2024
Graph Client (“SDK”) still kinda sucks

#ScottishSummit2024
Graph Client (“SDK”) still kinda sucks

#ScottishSummit2024
Graph Client (“SDK”) still kinda sucks

#ScottishSummit2024
But occasionally it works and is easy

#ScottishSummit2024
Dependencies can still be messy
•Don’t update “just in case”
•Microsoft.Graph and Microsoft.Graph.Beta are not in sync
•There’s at least 2 FluentUI nuget packages
•The one that came with the template didn’t have symbols for
IntelliSense...

#ScottishSummit2024
GitHub Copilot is incredibly hit-or-miss
•Blazor support doesn’t always work
•Graph SDK support is awful
•Razor support is great
•“Generic” .NET support is great
•“Chatting” with it slow....

#ScottishSummit2024
Repackaging per-tenant is still cumbersome
•Publishing a dev –version to tenant where you’re not an
admin -> some manual work
•.csproj for Teams packaging independent of the Blazor
project

#ScottishSummit2024
Insufferable IntelliSense

#ScottishSummit2024
Testing anything within Teams kinda sucks

#ScottishSummit2024
Microsoft Dev Home & Dev Drive
•“Dev Home” is a joke
•“Dev Drive” of questionable value

#ScottishSummit2024
Azure Key Vault
•DefaultCredential is great, but...
•Times out every 30 days or so AND randomly
•Tools > Options > Azure Service Authentication > Account
Selection > Re-enter your credentials

#ScottishSummit2024 49
#ScottishSummit2024
Key takeaways

#ScottishSummit2024
Blazor Unleashed!
•Blazor – stable and highly productive,
but lets you do horrible stuff
•Graph SDK –still feels unfinished (but
Graph is great!)
•Tooling – unstable, great when works
•Extending Teams – pretty easy (but you
need an admin friend for Entra)
•GitHub Copilot – productive, but
unreliable (and chatting is slow)

#ScottishSummit2024
Demo recap
•Creating Your First App
•Debugging Like a Pro
•Development and Hot Reload

#ScottishSummit2024
Deployment
•Teams Toolkit
•GitHub Actions

#ScottishSummit2024 53
#ScottishSummit2024
Finally

#ScottishSummit2024 54 54#ScottishSummit2024
FeedBack
•Give feedback in the app!
•Materials also on my
website:
Community Rocks!

#ScottishSummit2024
Thank you!