Stop Reinventing SPFx- Building Better SharePoint Solutions with PnP React Controls with Siddharth Vaghasia [MVP]
Key Takeaways
- Modern SharePoint development with SPFx allows organizations to extend Microsoft 365 beyond out-of-the-box configurations while leveraging reusable community components.
- Developers should always check whether Microsoft or the community already provides a capability before deciding to build a custom solution from scratch.
- PnP React Controls and PnPjs drastically accelerate development by offering pre-built, SharePoint-aware components and simplified abstractions for Microsoft Graph and SharePoint APIs.
- When choosing between SPFx and the Power Platform, consider factors like user interface complexity, data handling requirements, maintainability, and whether low-code or pro-code is more appropriate.
- Proper security practices in SPFx require adhering to the principle of least privilege, avoiding client-side secrets, and leveraging backend APIs when communicating with external databases or Azure services.
Modern SharePoint development does not mean building every component from scratch. In this episode of the M365 FM Podcast, Mirko Peters talks with Microsoft MVP Siddharth Vaghasia about building production-ready SharePoint Framework (SPFx) solutions by combining the right Microsoft 365 technologies with reusable community components.Siddharth brings nearly 18 years of experience across the Microsoft technology stack, from .NET and the early days of SharePoint Server to SharePoint Online, Microsoft 365, Power Platform, Azure, and modern SPFx development.
WHEN SHOULD YOU ACTUALLY USE SPFx?
Not every SharePoint requirement needs custom development. Siddharth explains a simple principle: first determine whether Microsoft already provides the functionality. If the requirement can reasonably be solved with standard SharePoint capabilities, avoid unnecessary customization.SPFx becomes valuable when organizations need experiences, integrations, or interfaces that cannot be delivered effectively with out-of-the-box functionality.
SPFx VS POWER PLATFORM
Should you build the solution with SPFx or Power Apps?The discussion explores where each approach fits. Power Apps can be effective for relatively straightforward forms, conditional fields, business rules, and scenarios where citizen development and low-code maintainability matter.SPFx becomes particularly powerful when developers need greater control over the user interface, complex data handling, reusable components, APIs, or sophisticated application experiences directly inside SharePoint. Siddharth also argues that generative AI coding tools are changing the traditional assumption that pro-code development necessarily takes longer than low-code development.
THE MODERN SPFx TECHNOLOGY STACK
A modern SPFx project brings together several technologies rather than relying on one framework.Siddharth breaks down the roles of TypeScript, React, Fluent UI, PnPjs, and PnP React Controls. TypeScript provides stronger typing and compile-time checks, while Fluent UI helps custom solutions retain the familiar Microsoft user experience.PnPjs simplifies interaction with SharePoint, Microsoft Graph, and other Microsoft 365 services by replacing repetitive REST request code with reusable abstractions.
STOP REBUILDING CONTROLS THAT ALREADY EXIST
One of the central lessons of the episode is simple: professional development does not mean writing everything yourself.PnP React Controls provide SharePoint-aware and Microsoft 365-aware components for common development requirements. Instead of repeatedly creating the UI, API calls, data binding, and associated logic for components such as file pickers, developers can use established community controls.Siddharth's preferred approach is to check existing capabilities first: use Microsoft functionality when available, then Fluent UI or PnP React Controls where they satisfy the requirement, and create a custom component only when the required functionality does not already exist.
THE FIVE PnP REACT CONTROLS DEVELOPERS SHOULD KNOW
If Siddharth had to choose only five controls, his selection would be People Picker, Taxonomy Picker, List View, File Picker, and Live Persona.These components cover several recurring requirements in enterprise SharePoint applications, including selecting users, working with managed metadata, presenting SharePoint data, selecting or uploading files, and displaying Microsoft 365 user information.
BUILDING REAL APPLICATIONS INSIDE SHAREPOINT
The conversation moves from individual controls to application architecture with the example of a sophisticated project management solution.SharePoint lists can provide the underlying data layer for projects, customers, resources, and tasks, while SPFx can deliver a unified application experience containing dashboards, project views, charts, CRUD operations, role-specific interfaces, task management, and navigation.The result can feel much more like a dedicated business application while remaining embedded inside the SharePoint environment users already know.
SHAREPOINT DOESN'T HAVE TO BE YOUR DATABASE
SPFx applications are not restricted to SharePoint data.Siddharth discusses retrieving information from Dataverse and integrating external systems. When data resides in systems such as Azure SQL, a backend API can provide the secure middle layer between the client-side SPFx application and the database.He also describes a real example where an SPFx web part surfaces Power Automate approvals directly inside SharePoint and allows users to approve or reject requests without moving to another application.
MICROSOFT GRAPH AND SPFx
Microsoft Graph expands SPFx far beyond SharePoint itself.Applications can interact with Microsoft 365 services including OneDrive, Planner, Outlook, meetings, and other resources exposed through Graph. Siddharth explains when SharePoint REST APIs remain appropriate and when Graph becomes the better or necessary option.
SECURITY, PERMISSIONS AND LEAST PRIVILEGE
Security is a major part of professional SPFx development.SPFx solutions calling Microsoft Graph typically operate using delegated permissions and therefore respect the identity and access rights of the currently signed-in user. Requested API permissions also require administrative approval.One of the most common mistakes Siddharth sees is requesting more permissions than the application actually requires. His recommendation is to start with the minimum permissions necessary rather than granting broad access by default.Developers also need to test solutions from the perspective of real users instead of assuming that permissions available during development will also exist in production.
NEVER PUT SECRETS IN CLIENT-SIDE SPFx CODE
Because SPFx executes client-side, sensitive secrets should never be embedded directly into the application code.For scenarios requiring secrets or credentials, Siddharth recommends introducing a backend API that can securely access services such as Azure Key Vault while the SPFx frontend communicates only with that API.
SECURITY REVIEW DOESN'T END WITH YOUR OWN CODE
SPFx relies heavily on the modern JavaScript and npm ecosystem. Organizations therefore need to consider the security and maintenance status of third-party packages as well as their own application logic.Siddharth recommends reviewing dependencies, paying attention to package warnings and vulnerabilities, and including security assessment as part of the deployment process rather than assuming every dependency is safe simply because it is available through npm.
WHY IS YOUR SPFx SOLUTION SO SLOW?
When an SPFx application performs badly, Siddharth starts with the browser's network tools.Developers should examine how many API calls occur during page load, identify unnecessary requests, look for API calls accidentally executed inside loops, and inspect React components for excessive rendering or state changes.A seemingly simple application can generate dozens of requests when data retrieval is implemented inefficiently.
BATCH YOUR REQUESTS
Once unnecessary API traffic has been identified, batching can significantly improve how requests are handled.Instead of sending multiple individual operations from the client, developers can combine appropriate SharePoint operations into batch requests and reduce client-side request overhead.
FROM DEVELOPMENT TO THE SHAREPOINT APP CATALOG
Siddharth also walks through the SPFx deployment process, from packaging the solution into an .sppkg package to deploying it through the SharePoint App Catalog and approving required API permissions.Importantly, deploying a package does not automatically mean installing it everywhere. Organizations can control which SharePoint sites receive the application, and site collection App Catalogs can provide an even narrower deployment scope.
SPFx MEETS COPILOT AND AI AGENTS
SPFx is also moving into the agent era.Siddharth discusses SharePoint Copilot apps and how SPFx can provide interactive user-interface components inside Microsoft 365 Copilot experiences. Instead of returning only text or Markdown, an agent can potentially surface richer interfaces that users can interact with directly.He describes the concept as similar to taking the idea behind Adaptive Cards much further by enabling richer, more customizable application experiences.
THE BIG TAKEAWAY
The strongest SharePoint developers are not necessarily the developers who write the most code.They know when to use SharePoint out of the box, when Power Platform is sufficient, when SPFx provides the necessary flexibility, when Microsoft Graph is required, and when existing Fluent UI and PnP components can eliminate unnecessary development.The goal is not to reinvent another component. It is to combine the Microsoft 365 ecosystem into solutions that are secure, maintainable, performant, accessible, and capable of solving an actual business problem.
ABOUT SIDDHARTH VAGHASIA
Siddharth Vaghasia is a Microsoft MVP, consultant, founder, speaker, blogger, and community contributor specializing in Microsoft 365, SharePoint, Power Platform, Azure, and related technologies. He also discusses his company Binary Roots and its work with customers across multiple international markets.
Become a supporter of this podcast: https://www.spreaker.com/podcast/m365-fm-modern-work-security-and-productivity-with-microsoft-365--6704921/support.
π Want to be part of m365.fm?
Then stop just listening… and start showing up.
π Connect with me on LinkedIn and let’s make something happen:
- ποΈ Be a podcast guest and share your story
- π§ Host your own episode (yes, seriously)
- π‘ Pitch topics the community actually wants to hear
- π Build your personal brand in the Microsoft 365 space
This isn’t just a podcast — it’s a platform for people who take action.
π₯ Most people wait. The best ones don’t.
π Connect with me on LinkedIn and send me a message:
"I want in"
Let’s build something awesome π
Frequently Asked Questions
What is the SharePoint Framework (SPFx)?
SPFx is a page and web part model that enables fully supported client-side development for SharePoint and Microsoft 365, using modern web technologies like TypeScript, React, and Fluent UI.
When should you use SPFx instead of the Power Platform?
SPFx is ideal when you need deep user interface control, complex data handling across multiple sources, or sophisticated enterprise application experiences, whereas Power Platform is better suited for straightforward forms and citizen development.
What are PnP React Controls?
PnP React Controls are open-source, community-driven, SharePoint-aware and Microsoft 365-aware components that eliminate the need to repeatedly build common UI elements like people pickers, file pickers, and list views.
How does Microsoft Graph integrate with SPFx solutions?
Microsoft Graph expands SPFx applications beyond SharePoint, allowing them to interact securely with Microsoft 365 services like OneDrive, Planner, Outlook, and user identity resources using delegated permissions.
00:00:00,000 --> 00:00:06,320
Yeah, welcome everybody to a new episode of the M365 and podcast.
2
00:00:06,320 --> 00:00:10,320
SharePoint framework has become one of the most important technologies for
3
00:00:10,320 --> 00:00:17,000
developers who need to extend Microsoft 365 beyond what
4
00:00:17,000 --> 00:00:20,200
organizations can accomplish with configurations alone.
5
00:00:20,200 --> 00:00:23,880
But there's a major difference between simply building
6
00:00:23,880 --> 00:00:26,920
an SPF-X solution and building one that's made in
7
00:00:26,920 --> 00:00:31,320
a channel-resonable performance accessibility and ready for productions.
8
00:00:31,320 --> 00:00:36,160
And developers don't have built everything themselves.
9
00:00:36,160 --> 00:00:41,200
The Microsoft 365 community has created an enormous ecosystem around
10
00:00:41,200 --> 00:00:47,120
SPF-X and including PMP-REC controls and that can dramatically
11
00:00:47,120 --> 00:00:53,680
accelerate development by providing, providing proven building blocks for
12
00:00:53,680 --> 00:00:56,800
common SharePoint and Microsoft 365 sinners.
13
00:00:56,800 --> 00:00:59,040
My guest today is Shina Vagascha.
14
00:00:59,040 --> 00:01:00,680
Yeah, sorry.
15
00:01:00,680 --> 00:01:03,680
Sorry.
16
00:01:03,680 --> 00:01:07,040
He's a Microsoft MBB for office development independent
17
00:01:07,040 --> 00:01:09,920
console and freelancer, founders, speaker, blogger, community
18
00:01:09,920 --> 00:01:15,080
organizer and specialized Microsoft 365 SharePoint SPF-X
19
00:01:15,080 --> 00:01:16,720
Power Platform in Azure.
20
00:01:16,720 --> 00:01:20,280
Today we are going deep into modern SharePoint development SPF-X
21
00:01:20,280 --> 00:01:25,480
architecture, React, PMP-REC controls, Microsoft Graph, APs,
22
00:01:25,480 --> 00:01:29,360
modernification, power platform, integrations, product,
23
00:01:29,360 --> 00:01:32,320
architecture, performance governance, and so on.
24
00:01:32,320 --> 00:01:34,200
And especially also AI.
25
00:01:34,200 --> 00:01:37,880
So Shina, welcome to the M665 podcast.
26
00:01:37,880 --> 00:01:38,760
Thank you, Marco.
27
00:01:38,760 --> 00:01:41,080
And thank you for inviting me.
28
00:01:41,080 --> 00:01:47,960
Definitely this is going to be a good topic to have the discussion
29
00:01:47,960 --> 00:01:52,640
around considering the SPF-X is still relevant in terms of how
30
00:01:52,640 --> 00:01:55,400
SharePoint has been customized and everything.
31
00:01:55,400 --> 00:01:57,920
And as you rightly said, the community has, you know,
32
00:01:57,920 --> 00:02:03,520
bring a very good library around it, so people should be knowing about that.
33
00:02:03,520 --> 00:02:09,400
So how did you organically get into the Microsoft technology from,
34
00:02:09,400 --> 00:02:11,400
however you started?
35
00:02:11,400 --> 00:02:20,160
So I started around here, I mean, like since my career started, right?
36
00:02:20,160 --> 00:02:24,040
Like almost 18 years, I had been always working on Microsoft technology
37
00:02:24,040 --> 00:02:24,360
step.
38
00:02:24,360 --> 00:02:30,360
So I started as a .NET developer when I started my IT professional career.
39
00:02:30,360 --> 00:02:38,240
I was working on ASP.NET and Windows applications and that sort of thing.
40
00:02:38,240 --> 00:02:44,240
But gradually after couple of years, I was kind of introduced to SharePoint,
41
00:02:44,240 --> 00:02:46,600
which was SharePoint on premises back then, right?
42
00:02:46,600 --> 00:02:48,680
And then in a way, you know, the journey,
43
00:02:48,680 --> 00:02:53,080
basically kind of continued from SharePoint on premises from SharePoint
44
00:02:53,080 --> 00:03:00,760
most 2007 to SharePoint 2010 to SharePoint 2013 to 2019.
45
00:03:00,760 --> 00:03:03,960
It's only SharePoint 2016, I believe, which I have not worked on.
46
00:03:03,960 --> 00:03:07,480
Okay, but otherwise I have worked on all kind of version of SharePoint.
47
00:03:07,480 --> 00:03:11,360
And then of course, you know, when it gradually evolved into SharePoint online,
48
00:03:11,360 --> 00:03:14,200
cloud and Microsoft 365.
49
00:03:14,200 --> 00:03:17,520
But yeah, this was my, you know, first kind of experience with Microsoft.
50
00:03:18,520 --> 00:03:25,640
Yeah, when you say you have these all these SharePoint experience,
51
00:03:25,640 --> 00:03:30,600
was the moving from a say traditional SharePoint development to SPFX difficult?
52
00:03:30,600 --> 00:03:36,440
In a way, yeah, it took some time to grasp, you know,
53
00:03:36,440 --> 00:03:39,040
how when SPFX was introduced, right?
54
00:03:39,040 --> 00:03:43,360
Because the traditional way of customizing SharePoint was more or less in and
55
00:03:43,360 --> 00:03:47,760
around using JavaScript and using content editor web part.
56
00:03:47,760 --> 00:03:52,200
And if at all, we needed to have more advanced customization,
57
00:03:52,200 --> 00:03:58,240
we were going with custom web parts, which was basically built in .NET and that sort of thing.
58
00:03:58,240 --> 00:04:03,600
But as the technology evolved in terms of, you know, the web development and
59
00:04:03,600 --> 00:04:08,920
all the front end framework started coming in angular react and that sort of thing.
60
00:04:10,200 --> 00:04:13,800
It was little bit different than what we traditionally used to do.
61
00:04:13,800 --> 00:04:20,600
But then react because because people who would understand the HTML JavaScript very well.
62
00:04:20,600 --> 00:04:24,960
And because react was built on top of, you know, JavaScript to make the developers
63
00:04:24,960 --> 00:04:29,240
life little bit more easier than what we used to do with the JavaScript.
64
00:04:29,240 --> 00:04:33,040
It would take some time, but eventually once you understand the importance of it,
65
00:04:33,040 --> 00:04:34,680
you know, I mean, you will not go back like that.
66
00:04:34,680 --> 00:04:39,600
I have never went back to JavaScript or anything since I started using React.
67
00:04:39,600 --> 00:04:41,600
Yeah.
68
00:04:41,600 --> 00:04:45,960
Yeah, for someone who is new in Microsoft 365 development,
69
00:04:45,960 --> 00:04:49,680
what exactly is the SharePoint framework?
70
00:04:49,680 --> 00:04:56,240
Yeah. So consider that we, because SharePoint has so much of out of the box
71
00:04:56,240 --> 00:04:57,880
capabilities, which are available, right?
72
00:04:57,880 --> 00:05:00,080
We can create pages list.
73
00:05:00,080 --> 00:05:03,520
There are out of the box so many web parts, which are available.
74
00:05:03,520 --> 00:05:09,520
But ideally, whenever an organization choose a product or choose a workflow
75
00:05:09,520 --> 00:05:14,840
or an application or project to be developed, there are going to be the times when the
76
00:05:14,840 --> 00:05:19,080
business requirement from the business is going to be, which is not going to fit into
77
00:05:19,080 --> 00:05:23,800
the right out of the box available features, which are there, right?
78
00:05:23,800 --> 00:05:28,080
So there would be always the time where we need to customize it.
79
00:05:28,080 --> 00:05:31,200
And that is where SharePoint framework basically comes into the picture.
80
00:05:31,200 --> 00:05:36,120
So there are different different options in which we can customize the SharePoint.
81
00:05:36,120 --> 00:05:41,760
We can customize SharePoint with, you know, header and footer to put our custom content into
82
00:05:41,760 --> 00:05:46,920
a SharePoint site, which is basically called as application customizer.
83
00:05:46,920 --> 00:05:52,240
And then we have mainly our web parts, right, which basically allows us to customize and
84
00:05:52,240 --> 00:05:56,960
create our custom user interface and deploy it into a SharePoint page, more or less like
85
00:05:56,960 --> 00:05:59,280
out of the box web part, which we have.
86
00:05:59,280 --> 00:06:05,880
And then now we also have the SPFX extensions, which are available through which we would
87
00:06:05,880 --> 00:06:12,760
be able to add the command set into and out of the box SharePoint list or library view so
88
00:06:12,760 --> 00:06:17,080
that you can add your custom command button on top of it and then perform some operations
89
00:06:17,080 --> 00:06:21,640
if you want to make an API integration call and that sort of thing, right?
90
00:06:21,640 --> 00:06:29,280
And very, very new feature within SPFX is SharePoint, SPFX co-pilot apps.
91
00:06:29,280 --> 00:06:35,240
It means by using the same SharePoint framework, we would be able to create an app which would
92
00:06:35,240 --> 00:06:41,280
be surfaced into Microsoft 365 co-pilot by using, you know, the same kind of UI component.
93
00:06:41,280 --> 00:06:48,720
So rather than interacting with the agent or co-pilot with just, you know, text format,
94
00:06:48,720 --> 00:06:56,840
if we would have built an SPFX co-pilot apps and deploy it by using the MCP server and
95
00:06:56,840 --> 00:07:02,800
by using the tools, the co-pilot would be able to basically find the component and display
96
00:07:02,800 --> 00:07:06,680
it into co-pilot in the agent which would become interactive in nature.
97
00:07:06,680 --> 00:07:07,680
Awesome.
98
00:07:07,680 --> 00:07:10,080
That's cool.
99
00:07:10,080 --> 00:07:18,320
Is there, or, where would you say when people start with SPFX today, where can, can
100
00:07:18,320 --> 00:07:22,440
developers find, find a good way to start?
101
00:07:22,440 --> 00:07:29,320
So there are very good YouTube videos which are available, right, on SPFX on getting started
102
00:07:29,320 --> 00:07:34,640
with SPFX. That would be one of the channel which I would suggest, you know, to people get
103
00:07:34,640 --> 00:07:38,320
introduced to, if they wanted to get started with SPFX.
104
00:07:38,320 --> 00:07:43,160
Another thing is they need to definitely learn the basic of react, okay, because without
105
00:07:43,160 --> 00:07:49,520
having the react knowledge, it would become difficult for certain people to understand
106
00:07:49,520 --> 00:07:55,080
how, you know, the components can be created and how the components would be called from
107
00:07:55,080 --> 00:08:00,520
the different component, how you can create reusable components and all that sort of thing.
108
00:08:00,520 --> 00:08:04,000
So yes, YouTube channel is the right place to go for.
109
00:08:04,000 --> 00:08:08,800
There are lot and lots of videos which are available, which are free and then Microsoft
110
00:08:08,800 --> 00:08:13,600
documentation is also a good example to get started with and then, you know, some starting
111
00:08:13,600 --> 00:08:18,040
with some basic react understanding.
112
00:08:18,040 --> 00:08:24,400
And what kind of business recounts are ideal kind of the ads for SPFX and what showed
113
00:08:24,400 --> 00:08:28,080
absolutely not built with SPFX?
114
00:08:28,080 --> 00:08:37,240
So I would say that if, I mean, there's always been and, you know, kind of argument wherein
115
00:08:37,240 --> 00:08:40,960
do we want to customize SharePoint or not whenever a business requirement comes?
116
00:08:40,960 --> 00:08:48,520
So I mean, as everybody would suggest, a good baseline would be that if you wanted to build
117
00:08:48,520 --> 00:08:54,380
something in SharePoint, show something in SharePoint, does Microsoft provide it, right?
118
00:08:54,380 --> 00:08:59,200
If you have an yes and no answer, if you have a yes and sir, do not build it, right?
119
00:08:59,200 --> 00:09:07,240
If Microsoft doesn't provide it, but you are going to build it, but does it, is it solving
120
00:09:07,240 --> 00:09:10,180
a bigger problem or just a smaller problem?
121
00:09:10,180 --> 00:09:15,980
Are there any alternate ways for you to basically still use the SharePoint out of the box feature?
122
00:09:15,980 --> 00:09:21,780
Not give that kind of experience which the user is expecting, but basically work out with
123
00:09:21,780 --> 00:09:28,160
the user or the business user to make sure that they are okay with basically how they are
124
00:09:28,160 --> 00:09:30,180
interacting with SharePoint.
125
00:09:30,180 --> 00:09:34,640
If they agree, then just go without the box, don't do any customization, right?
126
00:09:34,640 --> 00:09:36,640
But you know how business users are, right?
127
00:09:36,640 --> 00:09:43,140
I mean, sometimes what they want, they want, they would not agree to something which is not
128
00:09:43,140 --> 00:09:46,780
available or any alternate solution which they wanted to propose.
129
00:09:46,780 --> 00:09:51,460
In that case, we do not have any choice and we should go with, you know, kind of SPFX.
130
00:09:51,460 --> 00:09:52,460
Okay.
131
00:09:52,460 --> 00:10:01,540
And how is it with main intents when I don't know, a SharePoint online 2.0 comes out or something?
132
00:10:01,540 --> 00:10:05,300
Is there anything I have to look when I customize?
133
00:10:05,300 --> 00:10:12,460
Yes, so just definitely because SharePoint framework gets quickly, you know, new new versions
134
00:10:12,460 --> 00:10:14,500
which are available, right?
135
00:10:14,500 --> 00:10:18,300
There might be, because it's a ProCode based approach, so there would be definitely at times
136
00:10:18,300 --> 00:10:23,580
where, you know, if your SPFX solutions are so too old with the older version.
137
00:10:23,580 --> 00:10:27,660
And if there are some methods, if there are some attributes or certain things which are
138
00:10:27,660 --> 00:10:30,900
getting depreciated, then you need to upgrade it.
139
00:10:30,900 --> 00:10:38,940
But otherwise, I have seen customers and organizations who have and SharePoint's, for Framework
140
00:10:38,940 --> 00:10:43,660
solution being deployed, which is like, you know, six, seven years old, right?
141
00:10:43,660 --> 00:10:49,140
And they are still on SPFX version 1.4, 1.5, 1.6, right?
142
00:10:49,140 --> 00:10:54,380
Now, we are around, you know, I think 1.21 or 22 is the latest version.
143
00:10:54,380 --> 00:10:55,660
But the solution is still working.
144
00:10:55,660 --> 00:11:02,420
So until and unless it is necessary for you to upgrade, does your organizations, policies,
145
00:11:02,420 --> 00:11:04,780
IT policies ask you to upgrade it?
146
00:11:04,780 --> 00:11:09,300
If there are any security loopholes which are being fined in the packages which you are
147
00:11:09,300 --> 00:11:14,060
using and all that sort of thing, then yeah, of course, it should be of, it has to be.
148
00:11:14,060 --> 00:11:18,540
But now with AI and everything, it is very easily to upgrade it also.
149
00:11:18,540 --> 00:11:23,660
You know, you just have to basically go to, you know, GitHub Co-Pilot or use Clod or,
150
00:11:23,660 --> 00:11:28,580
you know, Codex and just say that, hey, this, I'm using this version, I wanted to just upgrade
151
00:11:28,580 --> 00:11:33,140
it and it will just upgrade it basically for you.
152
00:11:33,140 --> 00:11:44,380
And when I think a little bit about, we have on one time, we have the, if SPFX project
153
00:11:44,380 --> 00:11:52,660
and we have also the power platform with power automate and power pages, when is SPFX the
154
00:11:52,660 --> 00:11:56,340
right decision and when should I build a power platform?
155
00:11:56,340 --> 00:11:58,700
Yeah, yeah, that's a really good question.
156
00:11:58,700 --> 00:12:04,580
And again, you know, same discussion start happening whenever we choose to customize something
157
00:12:04,580 --> 00:12:05,580
right?
158
00:12:05,580 --> 00:12:11,020
So if you think about it, in a way, whenever we want to customize their share point list
159
00:12:11,020 --> 00:12:16,020
or a library form, right, which is basically customizing that, then there is one option
160
00:12:16,020 --> 00:12:21,420
wherein we can customize the form with power apps and then we can basically, you know,
161
00:12:21,420 --> 00:12:26,540
customize the form and update the UI and everything according to the power apps controls
162
00:12:26,540 --> 00:12:31,340
which are available and within the boundaries of what power is basically allows us to do,
163
00:12:31,340 --> 00:12:32,340
right?
164
00:12:32,340 --> 00:12:37,420
And then there is an SPFX thing which is basically will, in fact, now with SPFX form
165
00:12:37,420 --> 00:12:42,260
customizer, you can still do the same thing but using a proc or approach, right?
166
00:12:42,260 --> 00:12:47,060
When it comes to power apps, because power apps has its own control, its own way of doing
167
00:12:47,060 --> 00:12:49,500
things, you have limitations there, right?
168
00:12:49,500 --> 00:12:54,180
In terms of how you are going to build the user interface, I know there are so many,
169
00:12:54,180 --> 00:12:59,420
you know, great people around who has built a power apps which you doesn't feel like it's
170
00:12:59,420 --> 00:13:03,060
a power apps, you know, they were able to basically make it more than that.
171
00:13:03,060 --> 00:13:06,980
But for a normal developer, sometimes it becomes difficult to basically get the required
172
00:13:06,980 --> 00:13:10,780
user interface and control and everything within power apps.
173
00:13:10,780 --> 00:13:15,940
Just giving one example, like for example, in the power apps, if you wanted to show data
174
00:13:15,940 --> 00:13:20,500
combined from two different data sources, two different share point list or two different
175
00:13:20,500 --> 00:13:25,020
data was tables, right? You can only associate one gallery with one data source.
176
00:13:25,020 --> 00:13:30,500
You cannot do it with multiple, in, by associating with multiple, you know, gallery or data
177
00:13:30,500 --> 00:13:31,500
source, right?
178
00:13:31,500 --> 00:13:35,380
So in this case, what you would have to do is you would have to first get the data, put
179
00:13:35,380 --> 00:13:39,780
it into collection and combine the data and then put it here, right?
180
00:13:39,780 --> 00:13:44,140
Same if we go with SPFX because you are doing it with, or an API call, you can merge the
181
00:13:44,140 --> 00:13:49,180
data, combining the data in the JSON format is far, far easier than, you know, what we do
182
00:13:49,180 --> 00:13:53,180
with the power apps and everything. So there is one difference there. So I would say if
183
00:13:53,180 --> 00:14:00,260
you need a very, very good user interface, you can basically go with SPFX and you can create
184
00:14:00,260 --> 00:14:05,180
a full-fledged application there, right? If you do with the power apps, if you have simple
185
00:14:05,180 --> 00:14:11,740
requirements in terms of, you know, showing some fields based on certain conditions and
186
00:14:11,740 --> 00:14:15,820
putting some business, simple business was around it, I would say go with the power apps,
187
00:14:15,820 --> 00:14:16,820
right?
188
00:14:16,820 --> 00:14:25,980
And then another thought would be that initially the time to develop an SPFX thing was higher,
189
00:14:25,980 --> 00:14:31,240
right? When I say higher, it was far more than a low-code platform and then people were
190
00:14:31,240 --> 00:14:36,220
choosing a low-code platform to customize something. But now it has definitely changed because
191
00:14:36,220 --> 00:14:42,140
now with AI, in fact, building something, AI with SPFX is far, far easier than when you
192
00:14:42,140 --> 00:14:46,780
are doing it with power apps. I mean, creating something in power apps with the AI and the
193
00:14:46,780 --> 00:14:53,020
pop-up, highlight and load, it gives us certain users to certain time, but not as, you know,
194
00:14:53,020 --> 00:14:57,100
we get with the SPFX. I mean with SPFX, you can do wonder with, you know, all this GitHub
195
00:14:57,100 --> 00:15:01,220
pop-up, highlight and load and all that sort of thing. So it also depends on as you rightly
196
00:15:01,220 --> 00:15:06,220
say it depends on how much time do you have? Do you want to maintain the code or not? Good
197
00:15:06,220 --> 00:15:10,260
thing about power apps is that you are not maintaining the code. You do not need a skill
198
00:15:10,260 --> 00:15:15,620
set with react or SPFX. Any citizen developer can go there, look at the code and see what
199
00:15:15,620 --> 00:15:20,580
has been done. But somebody who doesn't understand SPFX, they would not know until and unless
200
00:15:20,580 --> 00:15:24,100
they understand what the SPFX is about and all that short.
201
00:15:24,100 --> 00:15:34,780
Yeah, let's a little bit look inside and model SPFX projects. So there, I think, why technology
202
00:15:34,780 --> 00:15:41,620
is that actually so we have TypeScript, JavaScript, through-ends, UI, PNP, JLS, PNP, React
203
00:15:41,620 --> 00:15:52,620
controls. Let us start with TypeScript. What TypeScript knowledge is essential for project?
204
00:15:52,620 --> 00:15:58,540
So in a way, TypeScript knowledge wouldn't be required that much, right? Because ideally,
205
00:15:58,540 --> 00:16:04,180
what TypeScript is, TypeScript is a way for us to, it's an advanced version of JavaScript.
206
00:16:04,180 --> 00:16:08,700
In JavaScript, there was no strong type or interface which was available and hence Microsoft
207
00:16:08,700 --> 00:16:14,300
came up with a TypeScript saying that you can, if you are doing client-side development also,
208
00:16:14,300 --> 00:16:19,580
you can still kind of create an interface or class or models which would be strongly
209
00:16:19,580 --> 00:16:26,060
interface. You can create strongly typed classes, models and attributes so that if you are
210
00:16:26,060 --> 00:16:30,820
writing the code, it doesn't have any leak around what code has been written, what attribute
211
00:16:30,820 --> 00:16:34,820
needs to be written, what should be the type? If the date type is actually been assigned,
212
00:16:34,820 --> 00:16:39,700
the date type or not and we get all type of compile type errors, okay? So TypeScript in
213
00:16:39,700 --> 00:16:43,540
a way is just about, you know, it's more or less, she sharp on this. So anybody who understands
214
00:16:43,540 --> 00:16:49,660
she sharp somebody who understands Java, anybody can just get it, it's just this thing only.
215
00:16:49,660 --> 00:16:54,620
Awesome. And what's the role of through-end UI?
216
00:16:54,620 --> 00:17:01,260
Fluent EI is basically an UI framework for Microsoft to basically build the user interface, right?
217
00:17:01,260 --> 00:17:07,340
So if you think about it that if you are doing a customization in SharePoint, you need something
218
00:17:07,340 --> 00:17:11,100
which is not available out of the box but you want the user to still feel like they are
219
00:17:11,100 --> 00:17:16,820
in SharePoint itself. So Fluent EI is that library which basically gives you all the user interface
220
00:17:16,820 --> 00:17:21,580
controls which merely works similar to what SharePoint Control looks like. So you have
221
00:17:21,580 --> 00:17:26,540
buttons, you have drop-downs, you have checkboxes, you have gallery, all sort of things. That is
222
00:17:26,540 --> 00:17:35,580
something which is a front-end library which is available. And then we have also a PMP,
223
00:17:35,580 --> 00:17:43,420
JS, how to sit within. Yeah, right. So because whenever we are building an SPFX solution,
224
00:17:43,420 --> 00:17:49,660
right, more or less we wanted to get data from SharePoint, we want to get data from graph API,
225
00:17:49,660 --> 00:17:55,900
one drive, it can be anything, right? So what has happened was the way the PMP react controls kind
226
00:17:55,900 --> 00:18:00,860
of evolve, the same way PMP, JS kind of evolved because people were following the same pattern.
227
00:18:00,860 --> 00:18:05,340
Everybody like me or another developer who were building it, everybody needs similar kind
228
00:18:05,340 --> 00:18:09,980
of service class to interact with your SharePoint, to interact with your graph API, to interact with
229
00:18:09,980 --> 00:18:14,780
your any kind of you know, Microsoft 365 products which are available. So that was kind of becoming
230
00:18:14,780 --> 00:18:19,740
a pattern. Now we were repeating the same kind of code, right, you know, making a REST API call,
231
00:18:19,740 --> 00:18:25,820
takes file line of code. That code was been repeatedly written by everybody by in the same code,
232
00:18:25,820 --> 00:18:30,540
there is itself. And that is where you know, PMP, JS comes into picture. What it does, it gives us the
233
00:18:30,540 --> 00:18:36,060
wrapper library on top of it which takes care of authentication on its own, which takes care of
234
00:18:36,060 --> 00:18:41,820
the request object response and everything. Plus it is giving us an easy way to write the code,
235
00:18:41,820 --> 00:18:47,020
rather than writing 5, 6 line of codes, I can just write one line of code and get data from SharePoint,
236
00:18:47,020 --> 00:18:52,140
update data SharePoint into back and that sort of thing. And when I'm saying this, I'm just saying
237
00:18:52,140 --> 00:18:57,260
a very simpler and basic way of understanding PMP, it is so much more than that. I mean you would not
238
00:18:57,260 --> 00:19:03,740
imagine writing an SPFX code where you are directly making an HTTP request call, unless you are
239
00:19:03,740 --> 00:19:08,860
doing a proof of concept or basic, you know, the part, you should always go with PMP, JS basically.
240
00:19:10,060 --> 00:19:14,940
And then the last thing I see is the PMP react controls.
241
00:19:14,940 --> 00:19:22,300
Now what's, I mean the way PMP, JS, I gave the example, right, that people started writing,
242
00:19:22,300 --> 00:19:27,340
similar kind of code to get data from SharePoint and Graph API and everything. Same way,
243
00:19:27,340 --> 00:19:33,740
there were controls which has to be created, right? For example, you wanted to create a drop-down
244
00:19:33,740 --> 00:19:41,420
control, which is going to show you an item from a particular list, okay? Then what you need to do is
245
00:19:41,420 --> 00:19:46,380
you need to use fluent UI, you need to create the drop-down, you need to make an API call,
246
00:19:46,380 --> 00:19:51,820
bind the data with the drop-down and that sort of thing. Now because of that, what has happened was
247
00:19:51,820 --> 00:19:58,940
that in a way people were writing similar kind of code again and similar kind of controls were
248
00:19:58,940 --> 00:20:04,860
been created every time. So what community came up with, right? And I think it was in 2018 or something,
249
00:20:04,860 --> 00:20:11,420
right? SPFX came in 2017, the react controls kind of came in 2018 somewhere, you know, at the end
250
00:20:11,420 --> 00:20:18,140
of the year or something. And thanks to community, you know, like we now have so many controls which
251
00:20:18,140 --> 00:20:24,940
are available, which can be easily used to give some example, like for example, we wanted to create a
252
00:20:24,940 --> 00:20:29,660
folder thicker control. It means we want to allow user to basically select a folder value of building
253
00:20:29,660 --> 00:20:35,420
an SPFX solution, right? So if I have to build it and I have to build it in three different places,
254
00:20:35,420 --> 00:20:40,700
I'm kind of repeating the same kind of code. So rather than that, there are controls available,
255
00:20:40,700 --> 00:20:46,780
which are SharePoint-Aware controls, which are Microsoft 365-Aware controls. So rather than me
256
00:20:46,780 --> 00:20:52,460
writing the code again and again, the control has to be configured in such a way that I just say
257
00:20:52,460 --> 00:20:57,740
that hey, this control needs to point it to this library automatically makes the API call gets the
258
00:20:57,740 --> 00:21:02,060
data, bind the control and gives us all the customization options which are available.
259
00:21:02,060 --> 00:21:07,340
Another is File Picker. If you wanted to give a love user to select a file, upload a file into,
260
00:21:07,340 --> 00:21:12,940
you know, your SharePoint, okay? This kind of user interface. Then there is filter bar, icon bar,
261
00:21:12,940 --> 00:21:17,340
I mean, there are lots of controls which are available and through which you would be, it is
262
00:21:17,340 --> 00:21:23,420
going to be making your life easier to develop an SPFX solution because all these controls are
263
00:21:23,420 --> 00:21:29,740
readily available, tested, verified and available in the community for anyone to use without,
264
00:21:29,740 --> 00:21:35,260
you know, rebuilding the thing. So rebuilding is, you know, main point of PN-Payer controls.
265
00:21:35,260 --> 00:21:46,860
Awesome. And how do you decide between Microsoft components, PNP commands and building your own?
266
00:21:47,180 --> 00:21:57,260
Again, same concept. If Microsoft provides, yes, use that. Thus fluent UI provides that, yes, use that,
267
00:21:57,260 --> 00:22:03,980
but are you going to use, what is your use case, right? If you are creating a drop-down and
268
00:22:03,980 --> 00:22:09,580
that same drop-down is going to be reused after all different different section of your solution
269
00:22:09,580 --> 00:22:14,700
and what you want to do is you wanted to display for example, employee name or a people picker,
270
00:22:14,700 --> 00:22:19,980
right? That means you want to allow user to choose the name of the people within your organization,
271
00:22:19,980 --> 00:22:25,740
right? What you will do, you will have to, if you are just using fluent UI, there is a people
272
00:22:25,740 --> 00:22:30,540
control available, but behind this thing, you need to make the API call first. You need to get the
273
00:22:30,540 --> 00:22:36,300
list of the user, whenever user type searching my name like SIDAR, right? And they will say, SID,
274
00:22:36,300 --> 00:22:40,780
then I need to make the API call to get, okay, give me all the names starting from SID and then
275
00:22:40,780 --> 00:22:46,380
again render it back into this thing, but the people picker control is already available in React,
276
00:22:46,380 --> 00:22:52,300
VPN, TREA, Clivary, right? So, why don't we use it? Behind this, it is still using fluent only,
277
00:22:52,300 --> 00:22:56,300
behind this and it is still making the same API call which I was supposed to make, right?
278
00:22:56,300 --> 00:23:02,620
And then you do it. So, if you think the philosophy I generally take is, when we are building SPFx
279
00:23:03,340 --> 00:23:13,020
solutions, right? Okay, what is your need? Does that need being satisfied from PNP React controls?
280
00:23:13,020 --> 00:23:17,500
Yes, use it. If not, then only go with the custom component, then only go with your custom
281
00:23:17,500 --> 00:23:22,220
component or UI which is required. But if it is already available, always go for React controls,
282
00:23:22,220 --> 00:23:30,380
which is there. Yeah, that's a little bit deeper dive into the PNP React control. So, when I
283
00:23:30,380 --> 00:23:38,940
have here at the expert, so if you could choose for only 5 PNP React controls for SPFx development to
284
00:23:38,940 --> 00:23:47,420
learn, which would you choose? Five controls. Okay, people picker number one because it's definitely
285
00:23:47,420 --> 00:23:56,140
something, you know, where everybody is going to use. Second, I would say, taxonomy picker,
286
00:23:56,780 --> 00:24:02,300
right? You wanted to build a solution wherein you wanted to get a love user to select the taxonomy
287
00:24:02,300 --> 00:24:07,820
to associate some metadata with particular list or live, whatever. That is second one.
288
00:24:07,820 --> 00:24:16,140
Third, I would say list view. Why? Because more or less when you are going to build a solution with SPFx,
289
00:24:16,140 --> 00:24:20,140
you wanted to get data from SharePoint and display to in the similar kind of table view,
290
00:24:20,140 --> 00:24:24,220
what we have with out of the box. It is going to be very much easier to use.
291
00:24:25,020 --> 00:24:29,980
File picker is also very important because the file picker control, which is available in React,
292
00:24:29,980 --> 00:24:35,420
if you see the user interface, it basically merely depicts exactly the same
293
00:24:35,420 --> 00:24:39,820
picker control which SharePoint provides us when you are going to say attach a file, right?
294
00:24:39,820 --> 00:24:45,660
Where do we get in Teams also? Like on the left hand side, you see all the recent SharePoint sites
295
00:24:45,660 --> 00:24:52,300
or recent files. If you want to select a file, you select a file. If you wanted to upload a custom
296
00:24:52,300 --> 00:24:57,340
document, you get that kind of options also available within there. So file picker would be the one.
297
00:24:57,340 --> 00:25:03,500
Another is persona. Persona control is basically you wanted to display somebody's name,
298
00:25:03,500 --> 00:25:09,580
like who is there in Microsoft 365 in your organization tenant. It gives you the same experience,
299
00:25:09,580 --> 00:25:16,060
what you have it in your all SharePoint. So you can put a name, you hover over it, it will open the
300
00:25:16,060 --> 00:25:21,660
pop-up where it will display name and photo and email and whatnot. And then there are tabs and
301
00:25:21,660 --> 00:25:26,540
everything also available. So I think a person, Li-persona is also one of the good control which you
302
00:25:26,540 --> 00:25:34,860
can use. How many I said? People picker, taxonomy, list view, file picker, Li-persona. I think,
303
00:25:34,860 --> 00:25:36,380
yeah, top five should be there.
304
00:25:36,380 --> 00:25:49,340
When we look, let's build something conceptually. Imagine a customer ask us for
305
00:25:49,980 --> 00:25:54,700
sophisticated, prep management experience in such a app, where do you begin?
306
00:25:54,700 --> 00:25:58,060
What does, sorry, I didn't know what customer ask.
307
00:25:58,060 --> 00:26:04,460
For a sophisticated, project management experience in such a app.
308
00:26:04,460 --> 00:26:06,380
Project management experience, right?
309
00:26:06,380 --> 00:26:12,860
Yeah. So see, project management experience in the sense, like we can use SharePoint list,
310
00:26:12,860 --> 00:26:18,860
right, for creating the required database tables to store the project related information,
311
00:26:19,740 --> 00:26:26,060
to store client related information, to store the resources associated with your project,
312
00:26:26,060 --> 00:26:29,900
to store the task associated with your project, you know, that's sort of thing.
313
00:26:29,900 --> 00:26:35,900
All this experience, if you think about it, yes, SharePoint would be there available for us to
314
00:26:35,900 --> 00:26:40,380
basically store the data in SharePoint, list, and Li-person everything. But now when you're talking
315
00:26:40,380 --> 00:26:44,940
about an experience where you wanted to give it and use a single place wherein they would be able
316
00:26:44,940 --> 00:26:51,180
to see a dashboard, how many projects are there in the system, how many projects are in progress,
317
00:26:51,180 --> 00:26:55,740
how many projects are at high risk, how many projects are at low risk, that's sort of data,
318
00:26:55,740 --> 00:27:01,740
right? So and for each project, when I click on one project, I wanted to see what are the resources
319
00:27:01,740 --> 00:27:07,740
associated with that project. Now, we would not be able to store all this information into a
320
00:27:07,740 --> 00:27:12,620
single list. So if you use SharePoint out of the books, you will not be able to go and give the
321
00:27:12,620 --> 00:27:17,500
user an experience that you click on a project, now you're seeing all the resources associated with,
322
00:27:17,500 --> 00:27:21,660
if you click on a project, now you're seeing all the tasks associated with that project, right?
323
00:27:21,660 --> 00:27:27,420
So in this case, if you think about it, what we will build, we will build a project management
324
00:27:27,420 --> 00:27:32,940
dashboard, a PM or dashboard, which is getting data from SharePoint, a dashboard is going to see,
325
00:27:32,940 --> 00:27:38,940
give you an high executive level view of all the projects which are there, how many projects are
326
00:27:38,940 --> 00:27:43,660
completed, how many projects are at risk, high level and everything. In fact, if you want, you can put
327
00:27:43,660 --> 00:27:48,140
the charts also, right? Then because there are all the chart library controls which are available,
328
00:27:48,140 --> 00:27:53,740
so you can put the charts and everything also on top of it. You can show some recent updates or
329
00:27:53,740 --> 00:27:58,540
recent activities related to certain projects, certain tasks been created and that sort of thing.
330
00:27:58,540 --> 00:28:02,940
So this is like, you know, hold dashboard experience. And then on the left hand side or on the top,
331
00:28:02,940 --> 00:28:07,580
you can give a navigation that all projects. So where you go, there you see list of all the projects,
332
00:28:07,580 --> 00:28:12,300
which are available. You would be able to give them crude operations on the project. So use a
333
00:28:12,300 --> 00:28:17,340
click on it, they would be able to update the metadata of that particular project. They can change
334
00:28:17,340 --> 00:28:23,340
that you date, status and whatnot. Plus you can control it, right? You can security control it,
335
00:28:23,340 --> 00:28:27,660
raw. It means that based on your business requirement, you want certain fields only to be
336
00:28:27,660 --> 00:28:33,500
editable to certain set of users. You can program it in your code that okay, this five fields only
337
00:28:33,500 --> 00:28:39,260
would be editable when the user logged in user is a project manager. If it is just a team member,
338
00:28:39,260 --> 00:28:44,220
then they should not be able to update the project name or project details or whatnot, right?
339
00:28:44,220 --> 00:28:48,460
They should only be able to access the task and everything. So that can also be program.
340
00:28:48,460 --> 00:28:51,820
You can have a task view, sorry, go ahead.
341
00:28:51,820 --> 00:29:00,540
So if you can have a task view there, you know, like a planner, you can have drag and drop, you can
342
00:29:00,540 --> 00:29:07,100
change the status of the task, you can create your task, assign task. If you want to put some
343
00:29:07,100 --> 00:29:13,180
billing information or you know, some hours associated with task, that sort of thing, you can do it.
344
00:29:13,180 --> 00:29:17,340
If you want to use behind the scene planner, you can do that also, like not using SharePoint
345
00:29:17,340 --> 00:29:23,020
list, but you getting data from the planner, plan and task and all sort of thing, but displaying it
346
00:29:23,020 --> 00:29:29,820
into a single unified user experience which you can get. And is there also
347
00:29:30,140 --> 00:29:38,540
cases when you say I put my data into data rules or SQL or that you ever use SharePoint list?
348
00:29:38,540 --> 00:29:45,580
No, you can, right? Because SharePoint is going to give you what? SharePoint is going to give you
349
00:29:45,580 --> 00:29:51,820
a way for user to basically come to a place which is familiar to them because they are already
350
00:29:51,820 --> 00:29:57,180
using SharePoint. But now you wanted to build something which is going to get data from outside of
351
00:29:57,180 --> 00:30:02,860
your SharePoint system. So, if you wanted to do it, you can basically make API calls to data
352
00:30:02,860 --> 00:30:08,300
rules, right? Because the SharePoint framework solution is associated with and as your
353
00:30:08,300 --> 00:30:15,260
intra-ID app registration, whatever permissions would be required for your solution to be access to
354
00:30:15,260 --> 00:30:21,180
data to be access within Microsoft 365 ecosystem. You can just put it in your configuration file.
355
00:30:21,180 --> 00:30:26,780
Once you deploy the solution, your SharePoint admin would be able to come, they would be able to
356
00:30:26,780 --> 00:30:32,940
approve that, okay, this solution is accepted to basically make this API call and get this data.
357
00:30:32,940 --> 00:30:38,620
And then you can make the calls and bring data from the data rules and everything, right?
358
00:30:38,620 --> 00:30:46,220
In fact, I had recently submitted one dashboard, okay, which basically shows you,
359
00:30:46,220 --> 00:30:52,780
you would know power automate approvals which we do, right? Now anybody who user who wanted to see
360
00:30:52,780 --> 00:30:58,380
what are the approvals which are available, they would go to flow.microsoft.com and see in the
361
00:30:58,380 --> 00:31:04,300
approval URL or they would use Microsoft Teams approval app, they would be able to see all the
362
00:31:04,300 --> 00:31:09,740
approvals which are there, right? There was one ask from a customer that, hey, I don't want to go
363
00:31:09,740 --> 00:31:16,540
to flow, right? It's confusing for the user. For user, SharePoint is the place where they wanted to go
364
00:31:16,540 --> 00:31:21,340
because they are very much familiar, okay? But there is no web part out of the box web part available.
365
00:31:21,340 --> 00:31:28,540
So, I build a web part for them to basically display the approvals in the SharePoint as an SPFX
366
00:31:28,540 --> 00:31:32,700
web part plus give them ability to approve and reject also from there, okay? And that I had
367
00:31:32,700 --> 00:31:39,500
contributed in the community also, but yeah, so this is one a good example, right? You can get data
368
00:31:39,500 --> 00:31:44,780
from your data was three balls also. You also talked about SQL, right? So, if your data is in your
369
00:31:44,780 --> 00:31:51,020
SQL, ideally, when we are running a client side application, right? We cannot directly make API
370
00:31:51,020 --> 00:31:57,340
calls to any back and database, right? Like SQL or anything, unless there is an API which is available.
371
00:31:57,340 --> 00:32:03,580
So, if there is a database in SQL, it is same for every modern application which are
372
00:32:03,580 --> 00:32:08,780
been built, right? Nowadays, nobody is directly interacting, the front has never interacting with
373
00:32:08,780 --> 00:32:13,500
the database or anything. There would be always an API middle layer which is created. So, you build an
374
00:32:13,500 --> 00:32:19,340
API, the API is going to talk to your SQL, your SPFX is going to talk to your middle layer,
375
00:32:19,340 --> 00:32:24,380
which is your API and then building the user interface. So, in that case also, you know, SPFX
376
00:32:24,380 --> 00:32:33,500
definitely box. Awesome. I think another topic, a lot of developers speak, it's the Microsoft Graph API,
377
00:32:33,500 --> 00:32:42,620
when can the Graph API to SPFX development? Yeah. So, as we say, right? I mean, you, the last question
378
00:32:42,620 --> 00:32:47,740
also, you ask is that if you are building an SPFX solution, it is not just about SharePoint.
379
00:32:47,740 --> 00:32:53,420
It means that your data might reside outside of SharePoint also. You wanted to get data from outside
380
00:32:53,420 --> 00:33:00,060
of the system like data was like SQL and third and big graph. Now, for example, you are building an
381
00:33:00,060 --> 00:33:07,420
SPFX solution, which is, which wanted to get data and show data from your one drive file, right?
382
00:33:07,420 --> 00:33:12,860
It means that you wanted to use us one drive, it goes to users one drive and then get data from
383
00:33:12,860 --> 00:33:21,100
users one drive and display it there. As Graph API is basically an unified way for us to make API calls
384
00:33:21,100 --> 00:33:28,380
to Microsoft 365 ecosystem across all the products which are available. Same Graph API can be
385
00:33:28,380 --> 00:33:33,900
integrated into your SPFX. So, if you wanted to get data from your one drive, if you want to get data
386
00:33:33,900 --> 00:33:40,860
from planner, if you want to get data from your emails like Outlook, right? You wanted to get the data
387
00:33:40,860 --> 00:33:45,820
for the user, you want to get your meetings, for example, you want to get your meeting recordings,
388
00:33:45,820 --> 00:33:51,980
you know, that sort of thing. Anything which is possible in the Graph API, which you wanted to get
389
00:33:51,980 --> 00:33:57,260
data from plus you wanted to update also, that is possible within SPFX. So, you basically use the
390
00:33:57,260 --> 00:34:04,220
graph library, which is available, the graph client factory library, which is available,
391
00:34:05,100 --> 00:34:12,860
that is a native way of accessing the graph API in the SPFX. But if not, PNPJS also has the same
392
00:34:12,860 --> 00:34:16,780
thing. So, I would say go with PNPJS, it has easier way to basically do it.
393
00:34:16,780 --> 00:34:27,420
That's, is there anything the SharePoint APIs, APIs, cannot provide what Graph API,
394
00:34:28,460 --> 00:34:37,420
provide or when issues what? Yeah, so, as I said, you know, the choice of using SharePoint
395
00:34:37,420 --> 00:34:43,820
REST API versus Graph API lies in that whether you are doing certain operation in SharePoint or
396
00:34:43,820 --> 00:34:50,940
outside of SharePoint, SharePoint REST API are also so much of having so much of operations, which
397
00:34:50,940 --> 00:34:56,060
are available, right? I mean, with using SharePoint REST API, you can create list also, you can create
398
00:34:56,060 --> 00:35:01,340
libraries also, right? You can set the site properties, you can set tenant level properties,
399
00:35:01,340 --> 00:35:06,460
there are so vast APIs which are available. But the choice between SharePoint, S,
400
00:35:06,460 --> 00:35:12,300
API and Graph API, one would be when you are doing certain things in SPFX, which is outside of
401
00:35:12,300 --> 00:35:21,420
SharePoint, like the example which I gave. Second, I mean, another thing is previously we used to
402
00:35:21,420 --> 00:35:26,860
have a send email API available in SharePoint, so which you can send an email. Now Microsoft is
403
00:35:26,860 --> 00:35:31,020
basically depreciating it. It means you now you cannot send an email from SharePoint REST API,
404
00:35:31,020 --> 00:35:37,900
then you have to rely on the Graph API, right? Basically, so that's the, you know, ideal distinction
405
00:35:37,900 --> 00:35:43,260
that, okay, if something is available in SharePoint REST API to do certain operation, which is available
406
00:35:43,260 --> 00:35:48,300
and you are doing it with SharePoint, go with SharePoint. If not, obviously you have to go with Graph API
407
00:35:48,300 --> 00:35:56,140
only. Yeah, and how do permissions work when SPFX solutions call Microsoft Graph?
408
00:35:56,140 --> 00:36:02,220
Yes, so good thing about SharePoint framework is that it basically respect the same
409
00:36:02,220 --> 00:36:08,060
delegated permission of current logged in user, right? So when you are building an SPFX
410
00:36:08,060 --> 00:36:14,460
solution based on what operation you are doing, right? There is a manifest file which is available
411
00:36:14,460 --> 00:36:20,540
in which you have to actually configure the permissions, okay? And once the solution gets deployed,
412
00:36:20,540 --> 00:36:26,780
the SharePoint admin has to approve that solution, okay? In the SharePoint admin center that
413
00:36:26,780 --> 00:36:33,020
there is a tab called API access. Now you go there, you see that as soon as the solution is deployed
414
00:36:33,020 --> 00:36:37,180
and the permissions are not there, you would see something called as, you know, pending API
415
00:36:37,180 --> 00:36:43,020
approvals. Admin has to choose and give the approval. Once that approval is only given, then only your
416
00:36:43,020 --> 00:36:48,060
code would be able to make the actual API calls, whatever they are asking, right? Second thing is,
417
00:36:48,060 --> 00:36:54,380
by default an SPFX solution always works with the delegated permission. It means that no matter what,
418
00:36:54,380 --> 00:37:00,460
though your solution has permission to do certain operations, but if you as a user who is browsing a
419
00:37:00,460 --> 00:37:07,740
SharePoint page, who where the SPFX code is going to run, it is always going to run from your
420
00:37:08,540 --> 00:37:14,540
consent from your delegated permission, from with your access token, with your identity token.
421
00:37:14,540 --> 00:37:20,940
So if your code is trying to access the data on which you do not have permission, the code will not run.
422
00:37:20,940 --> 00:37:25,820
For example, your code, you got an access to a page where an SPFX solution is deployed,
423
00:37:25,820 --> 00:37:31,980
but that SPFX solution is getting data from a different SharePoint list from a different SharePoint site,
424
00:37:31,980 --> 00:37:37,660
and on which you do not have permission, right? In that case, the data will not work. So by default,
425
00:37:37,660 --> 00:37:43,580
it is a security-treamed one. So it is very much secure and you won't be able to make an API calls
426
00:37:43,580 --> 00:37:47,180
on which you do not have access to. At plus, you will be only able to get the data
427
00:37:47,180 --> 00:37:52,220
within SharePoint lists itself, right? If you have item-level permissions, if you have document-level
428
00:37:52,220 --> 00:37:58,300
permissions, you will only get an able to access the data, which is available for you, which you have
429
00:37:58,300 --> 00:38:03,740
access to. There is no application-level permission is possible. If you need to do that,
430
00:38:03,740 --> 00:38:08,060
then you don't need to go with the API route, which I discussed previously. They talk about
431
00:38:08,060 --> 00:38:14,060
a bill you're on API. The API is connecting with these all data source with an application permissions,
432
00:38:14,060 --> 00:38:20,620
and the front-end is calling your application API basically. Yeah, cool, cool, interesting.
433
00:38:20,620 --> 00:38:29,260
Also, the second question, but yeah, you have explained it, but the difference is between
434
00:38:29,260 --> 00:38:40,780
delegated and application permissions. Yeah, right. So I will let's go a little bit deeper into
435
00:38:40,780 --> 00:38:49,420
the security topic. What are the biggest security mistakes you see in custom Microsoft 65 solutions?
436
00:38:49,420 --> 00:38:56,460
So when you say big security means as a developer, right? I mean, as a developer, people do.
437
00:38:56,940 --> 00:39:08,060
Correct? Yeah, yeah. So yes, I mean as a developer, right, what we generally use to do, we basically use
438
00:39:08,060 --> 00:39:15,660
to get the higher permission than it is required, which is a very, very big mistake any developer,
439
00:39:15,660 --> 00:39:21,260
you know, who doesn't understand the permission, well, do that. Let me give you an example.
440
00:39:21,260 --> 00:39:29,740
So for example, your part is supposed to basically get data from a share point list, right? And
441
00:39:29,740 --> 00:39:35,660
it's a read-only operation. You do not, the business requirement doesn't allow you to or want you to
442
00:39:35,660 --> 00:39:42,140
update anything from your SPFX solution. Now, what you did is you did it, right? But what you did is
443
00:39:42,140 --> 00:39:48,460
the permission which you have asked into your solution is read, right? Rather than just read, okay?
444
00:39:48,460 --> 00:39:55,420
So when nothing is going to be harmed, why? Because your code is not doing it, but you,
445
00:39:55,420 --> 00:40:00,460
you as a developer has given the solution and extra permission, which is not required.
446
00:40:00,460 --> 00:40:04,940
How do you know the next developer who is going to come is going to do something,
447
00:40:04,940 --> 00:40:10,700
you know, and write a code which mistakenly is going to update something which was not required,
448
00:40:10,700 --> 00:40:15,580
right? So this is the common mistake which people do that they always start with the higher
449
00:40:15,580 --> 00:40:20,380
permission. But rather the recommendation is always start with the lower permission.
450
00:40:20,380 --> 00:40:26,620
First, only get the permission which is minimal permission which you would require and do not get
451
00:40:26,620 --> 00:40:32,620
the higher permission which would be required, right? Second thing is while they are building the
452
00:40:32,620 --> 00:40:40,060
solution, they generally do not consider the actual users permission. So what, like I have seen
453
00:40:40,060 --> 00:40:48,060
and I mean, solutions were in it just, you know, blindly assume that when I am developing it,
454
00:40:48,060 --> 00:40:54,060
I am having access to this list, this library, this site, the user is also going to help.
455
00:40:54,060 --> 00:40:57,580
So what they do is they develop it, they test it from their side and they're saying yes,
456
00:40:57,580 --> 00:41:03,100
it is working fine. But now when you are exposing it to the user, they have not taken care of the
457
00:41:03,100 --> 00:41:07,900
actual permission of giving that user permission to the list or library on which they have.
458
00:41:07,900 --> 00:41:12,380
And then user will say that, okay, you are seeing that is fine, but you are seeing something different.
459
00:41:12,380 --> 00:41:16,860
I'm not seeing it. I'm just seeing a blank screen or I'm not seeing the required data which I want
460
00:41:16,860 --> 00:41:22,860
to see. So they have considered the permission in the SPFX code, but overall as a solution
461
00:41:22,860 --> 00:41:28,700
designer, they have not given the right permission to the right component within SharePoint,
462
00:41:28,700 --> 00:41:33,500
within DataWars and that sort of thing. And that is, you know, a common mistake, yeah?
463
00:41:34,780 --> 00:41:44,700
And I work more with Fabric. So I have a lot, I use often as a key world. Is it also a topic for
464
00:41:44,700 --> 00:41:52,460
SharePoint development? And no, because SharePoint is a client side development tool, right? Key world
465
00:41:52,460 --> 00:41:59,500
basically will not work here. Why? Because if you, whatever code you are going to deploy
466
00:41:59,500 --> 00:42:06,460
and the user is going to browse your code from the browser, right? Anything which you are going to
467
00:42:06,460 --> 00:42:11,420
put, right? Within your code, in a way is going to be converted into JavaScript and then rendered
468
00:42:11,420 --> 00:42:17,580
into the browser. So never, never, ever put any key world or secret information in your
469
00:42:17,580 --> 00:42:23,580
SPFX code. If you want to do it, the right way to do it is via API, right? So your API is running
470
00:42:23,580 --> 00:42:29,100
behind the scene, behind the server, hosted somewhere, where it is accessing the Azure key world.
471
00:42:29,500 --> 00:42:33,900
Getting the required secret key, all the permission and your front end is only able to
472
00:42:33,900 --> 00:42:41,100
make call to the API is basically. And do you try the and the PubeView
473
00:42:41,100 --> 00:42:48,540
play a place or role in SPFX development? InterID does not the PIP. The intri-dy because as I said,
474
00:42:48,540 --> 00:42:54,700
by default, whenever in a particular tenant, if you are deploying the first SPFX solution,
475
00:42:55,260 --> 00:43:01,180
what it does is it provisions and app registration or intri-id app registration into your tenant.
476
00:43:01,180 --> 00:43:07,500
It is called as SharePoint Framework Extensibility, something I don't remember the exact name,
477
00:43:07,500 --> 00:43:12,700
but that intri-id is by default created there. And any further solution which you are going to
478
00:43:12,700 --> 00:43:22,060
deploy basically use the same intri-id. And how can we, I think,
479
00:43:23,740 --> 00:43:34,140
can we have a process for security, I think, like, yeah, and how I ask it.
480
00:43:34,140 --> 00:43:41,100
Should organizations have a formal security review for a custom SPFX page or
481
00:43:41,100 --> 00:43:49,580
all every time secure? No, no, it has to. The reason being because SPFX framework is
482
00:43:51,340 --> 00:43:57,820
supported or developed using all the modern open source tooling chain. So, which MPM package you
483
00:43:57,820 --> 00:44:05,580
are using? Your developer is using whether that package is something which is a stable package,
484
00:44:05,580 --> 00:44:14,540
whether that package which is available is from a trusted developer because it is an open source
485
00:44:14,540 --> 00:44:20,460
tool. So whether it is by a trusted developer or not, if it is by a trusted developer, then you
486
00:44:20,460 --> 00:44:27,020
should use it. Some organization also restrict that you cannot publicly use any MPM package which
487
00:44:27,020 --> 00:44:32,140
is available because SharePoint Framework is based on that. You will be able to use any package
488
00:44:32,140 --> 00:44:38,060
which is available in the node.js, you know, like the whole library. MPM package library, sorry.
489
00:44:38,060 --> 00:44:47,740
So as an organization governance tool whenever an SPFX solution is been deployed,
490
00:44:47,740 --> 00:44:55,260
it has to be checked through various processes in terms of security, vulnerability and all of that.
491
00:44:55,260 --> 00:45:02,380
Good thing is that what I have personally seen is that when you are building a node.js
492
00:45:02,380 --> 00:45:06,620
based application, what you are trying to build a package or trying to run the package in any
493
00:45:06,620 --> 00:45:15,500
node.js based thing which SPFX also use, it will give you some warnings when you are compiling it.
494
00:45:15,500 --> 00:45:21,100
It will say that hey, you are using an MPM package which is so outdated. If you are using an MPM package
495
00:45:21,100 --> 00:45:28,060
which has somebody has flag a security vulnerability into this package. So the good thing is if you
496
00:45:28,060 --> 00:45:34,700
do not ignore the errors and you focus on the warnings. What does warning says is the warning
497
00:45:34,700 --> 00:45:40,620
serious is the warning is supposed to be not neglected, but you know, we need to do something about it
498
00:45:40,620 --> 00:45:46,140
that is going to basically help you. But because it is a pro code tool, there are tools also which are
499
00:45:46,140 --> 00:45:52,140
available which is going to do you a code review assessment for you within your SPFX and identify
500
00:45:52,140 --> 00:45:57,180
all the security vulnerability on this all these packages which you can basically gives you the
501
00:45:57,180 --> 00:46:03,020
report around that and once you basically get the report, it would be up to you as a developer for
502
00:46:03,020 --> 00:46:08,380
you to kind of you know fix it depending on how serious the security vulnerability is.
503
00:46:10,060 --> 00:46:21,180
Yeah, I think security is a good keyword. I have worked on a big company and they have also an SPFX
504
00:46:21,180 --> 00:46:30,940
solution built in SharePoint for security trainings and this was so so amazing slow that you have
505
00:46:30,940 --> 00:46:37,740
to get 50 minutes before the course started. You have to click lock into the course.
506
00:46:38,940 --> 00:46:45,980
Okay. So then slow. Where did you start when people give the feedback
507
00:46:45,980 --> 00:46:55,180
just this SPFX is then they can restart? Okay. Yeah. What I would do, right? If people, I mean,
508
00:46:55,180 --> 00:46:59,980
I had solved that similar kind of problem as you say that somebody developed it and said it is slow.
509
00:46:59,980 --> 00:47:04,460
We wanted to identify why it is slow, right? Where I would start is I would start
510
00:47:05,580 --> 00:47:11,180
browse the page in the browser while I am browsing the page, I will open the network tab, right?
511
00:47:11,180 --> 00:47:17,340
And I will see in the network tab whenever the user is refreshing the page, how many APA calls are
512
00:47:17,340 --> 00:47:24,620
being made? If for example, there are you know 10 calls which we identified, okay, which are being made.
513
00:47:24,620 --> 00:47:31,900
Is that 10 calls necessary or not? Why? Because sometimes what the developer does, he just feels,
514
00:47:31,900 --> 00:47:38,060
you know that whatever data I wanted to get, I will get it on the page load itself while the
515
00:47:38,060 --> 00:47:42,540
reaccomponent is getting loaded itself, okay. That might not be necessary, right? There might be
516
00:47:42,540 --> 00:47:47,260
three API calls which you would need only when the user is doing some operation on the screen.
517
00:47:47,260 --> 00:47:53,180
So first identify what are the unnecessary API calls. Second thing is when you are seeing the
518
00:47:53,180 --> 00:47:58,700
network tab, you might sometimes I have seen that what people do is by mistake people would have
519
00:47:58,700 --> 00:48:03,900
made an API call in the loop itself, right? So for example, you have a parent and a child
520
00:48:03,900 --> 00:48:11,340
list or a data or table relationship which you have. So what you want to do is you wanted to basically
521
00:48:11,340 --> 00:48:16,460
get all the items from your parent list, but for each parent list item, you also want to get data
522
00:48:16,460 --> 00:48:22,380
from the child list to bring some attribute or columns in it, right? What people would have done
523
00:48:22,380 --> 00:48:28,700
rather than calling both the data and making two API calls, people what they would have done,
524
00:48:28,700 --> 00:48:35,340
they would have make the first API call, get data from the parent, may they for loop each look
525
00:48:35,340 --> 00:48:40,620
for each item in the parent, they would be calling a child list, okay. So for example,
526
00:48:40,620 --> 00:48:45,740
wondering, you know like if there are 50 items which are there in the parent list,
527
00:48:45,740 --> 00:48:50,300
what you are doing is you are making one API call to your parent items, then for each 50 items,
528
00:48:50,300 --> 00:48:54,940
you are making a child API call. So there are 51 API calls which are going and then you are waiting
529
00:48:54,940 --> 00:49:01,100
because all the 51 items has to be processed, then you are combining the data and then you are
530
00:49:01,100 --> 00:49:07,900
displaying it to the user, right? Rather than that, you have to optimize your code, get the data
531
00:49:07,900 --> 00:49:13,100
from the parent, get the data from the child as in required and then do the operation at the
532
00:49:13,100 --> 00:49:18,700
client side, whatever combination you have to do, the mappings you have to do because you said you
533
00:49:18,700 --> 00:49:22,940
are working with fabric, right? Like that is what we do with the DAX formulas and everything,
534
00:49:22,940 --> 00:49:28,300
that okay, how the data should be associated, club together and then you point it to a particular
535
00:49:28,300 --> 00:49:33,340
chart or dashboard rather than keeping to both separately, right? So exactly the same way,
536
00:49:33,340 --> 00:49:39,340
you know, you should do. Network tab is your best friend, second thing what you want to do is
537
00:49:39,340 --> 00:49:46,220
nowadays there are also extensions available in the browser which will allow you to also
538
00:49:46,220 --> 00:49:51,820
debug your react components, right? So there might be certain things wherein within the loop itself,
539
00:49:51,820 --> 00:49:57,340
there might be so much of, so many times you are actually rendering the react control, you know,
540
00:49:57,340 --> 00:50:02,780
one by one because react is a state management control. It means what you are doing is you are
541
00:50:02,780 --> 00:50:06,940
rendering a react control and then changing the state and as soon as you are changing the state,
542
00:50:06,940 --> 00:50:12,140
you would have written a code to make another API call or it would go into, you know, some kind of
543
00:50:12,140 --> 00:50:17,020
loop until a particular condition is met and that is where your screen will freeze and user is going to
544
00:50:17,020 --> 00:50:23,420
see. So that is also something important that go to the react component extension library, see
545
00:50:23,420 --> 00:50:29,660
that how your react components are basically kind of behaving. And the topic is matching and catching.
546
00:50:29,660 --> 00:50:37,180
The catching? Yes, yes, yes, yes, always, always, right? Good, good, that you brought up, I almost forgot it,
547
00:50:37,180 --> 00:50:43,580
right? Yes, what you can do is once you identify this kind of issues, right? I mean, I said how to
548
00:50:43,580 --> 00:50:49,900
identify, I never said how to fix it. So once you identify this kind of issues, then you know that
549
00:50:49,900 --> 00:50:56,140
based on your business logic on how you wanted to make these calls, you can basically batch your API
550
00:50:56,140 --> 00:51:01,660
calls. So rather than, you know, sending one by one, you can create a single request object and
551
00:51:01,660 --> 00:51:07,740
do the batch operations and the share point would respond based on that, okay? If it is a patch,
552
00:51:07,740 --> 00:51:13,100
for example, you are updating data into five different lists, okay? Prepare everything together
553
00:51:13,100 --> 00:51:20,300
and make one batch API call so that all the five operations which we are doing are going to be
554
00:51:20,300 --> 00:51:25,980
taking care in the one operation, etc, right? At least from the client side, behind the scene,
555
00:51:25,980 --> 00:51:31,260
the batch operation still makes all the different calls. But we are not doing it at the client side,
556
00:51:31,260 --> 00:51:35,580
that is happening at the server side because share point support the batching operations and all that
557
00:51:35,580 --> 00:51:47,100
sort of thing. Yeah, we, we, as the world, I think a lot of developers of, yeah, heavily focused on
558
00:51:47,100 --> 00:51:54,060
fine genality. And I think the other topic is, it's for the users, it's the accessibility.
559
00:51:55,580 --> 00:52:00,940
Where do you hear the fluent UI and the PNP, React controls help?
560
00:52:00,940 --> 00:52:13,260
So, I mean, there are certain controls, at least in the fluent UI, I know, which are basically having
561
00:52:13,260 --> 00:52:19,820
some attributes and properties which are available to make it, you know, accessible across, you know,
562
00:52:19,820 --> 00:52:26,380
for the, like considering all the accessibility point of view, right? So, depending on if you wanted to
563
00:52:26,380 --> 00:52:31,500
do it, what it will do is there are properties or attributes available, which you can set so that,
564
00:52:31,500 --> 00:52:36,700
you know, your control is basically rendered and it's basically supported with all, you know,
565
00:52:36,700 --> 00:52:42,700
all kind of accessibility mechanism and all of that. For PNP, React control, I am to be very transparent,
566
00:52:42,700 --> 00:52:49,260
I am not sure whether that is there or not. But I am assuming it will be the reason being behind
567
00:52:49,260 --> 00:52:55,180
the scene, most of the React controls are still using the fluent UI, only to render it. So, eventually,
568
00:52:55,180 --> 00:53:00,140
what the React controls are doing, they are a wrapper around your API calls, you know, bridge between
569
00:53:00,140 --> 00:53:05,820
your API calls and your fluent controls, right? Eventually, it is the fluent control only which gets
570
00:53:05,820 --> 00:53:11,580
displayed. So, I think indirectly that also should be supported, that is what I know. But that is a
571
00:53:11,580 --> 00:53:17,180
good point which you brought in, which I would definitely go back and, you know, look and see that,
572
00:53:17,180 --> 00:53:22,220
okay, how we can make, you know, accessibility also supported when we are building an SPFx solution.
573
00:53:22,220 --> 00:53:35,740
And when I have my app ready, all is fine, how get my components into the app catalog?
574
00:53:35,740 --> 00:53:44,460
Yes. So, as an SPFx solution can have multiple web parts, multiple extensions, you know,
575
00:53:44,460 --> 00:53:51,500
you can build a whole solution around it, right? As and when you are ready for deploying, right,
576
00:53:51,500 --> 00:53:56,460
what you do is there are commands available, you know, previously it used to be called, now,
577
00:53:56,460 --> 00:54:01,900
which is heft, which is going to package the solution. So, when you package the solution,
578
00:54:01,900 --> 00:54:07,100
what it will give you, it will give you an SPPKG file, okay, the extension of the packages,
579
00:54:07,100 --> 00:54:14,380
SP.PKG file, what you do, you copy the file, right, and you go to your SharePoint admin center,
580
00:54:14,380 --> 00:54:20,220
and there is an app catalog. Now, this app catalog is a tenant-level app catalog, where you are actually
581
00:54:20,220 --> 00:54:25,660
deploying the package, okay. So, this is where also, we have to understand that deploying is not
582
00:54:25,660 --> 00:54:31,740
installing, okay. It is just deploying, deploying means you are making it available for the people to
583
00:54:31,740 --> 00:54:37,340
install it into the targeted SharePoint site. So, you deploy your package into a tenant-level app
584
00:54:37,340 --> 00:54:43,500
catalog. I will talk about SharePoint site collection level app catalog also later, but, okay,
585
00:54:43,500 --> 00:54:48,140
the, ideally you deploy it into the tenant-level app catalog. If your
586
00:54:48,140 --> 00:54:54,460
solution needs some extra permissions, you go to admin centers, you approve the permission as
587
00:54:54,460 --> 00:55:01,260
a SharePoint admin, then you go to target SharePoint site, and then you basically install it, right.
588
00:55:01,260 --> 00:55:05,820
Now, what does install means? It means the package you have deployed, and you know, SharePoint is more
589
00:55:05,820 --> 00:55:09,820
than just document management system, right. It can be used for so many different ways,
590
00:55:09,820 --> 00:55:14,940
and organization can have thousand sites. You don't want to deploy your solution into thousand sites
591
00:55:14,940 --> 00:55:20,060
until and unless it is necessary. You only want to deploy it into one site, two site, or wherever it
592
00:55:20,060 --> 00:55:25,820
is, right. So, what you do is you go to a SharePoint site, and then you install it as an app. And once
593
00:55:25,820 --> 00:55:32,380
you install it as an app, that is when all the vipads and components would be available for you to
594
00:55:32,380 --> 00:55:37,820
add it into your SharePoint page. That is where your custom vipads started showing up in this SharePoint
595
00:55:37,820 --> 00:55:43,980
page for their targeted site. So, this is how, you know, the deployment work. I talked about
596
00:55:43,980 --> 00:55:49,900
tenant-level app catalog, but there are organizations who would say that I don't want to deploy at all
597
00:55:49,900 --> 00:55:54,940
at my tenant-level, because I am building an, for example, an intranet solution, or I am just
598
00:55:54,940 --> 00:56:01,020
building an contact management solution. I want my solution to only deploy it into the targeted
599
00:56:01,020 --> 00:56:06,860
SharePoint site, nowhere else, right. What you can do is you can enable a site collection-level app
600
00:56:06,860 --> 00:56:12,780
catalog. There is a power-sale script, which is available. Once you do it, it creates a library
601
00:56:12,780 --> 00:56:17,660
within your SharePoint site. And then rather than deploying it into a tenant-level app catalog,
602
00:56:17,660 --> 00:56:23,340
you deploy it into a site collection-level app catalog. Still, you install it, right, because
603
00:56:23,340 --> 00:56:28,220
now again, you have just deployed it in your site collection. Still, you install it,
604
00:56:28,220 --> 00:56:31,740
and then you go ahead and, you know, use it in your web-part and everything.
605
00:56:31,740 --> 00:56:39,660
That's, this is amazing. So, I think I have so much more questions when we are running out of time.
606
00:56:39,660 --> 00:56:45,180
So, yeah, you're in independent consulting. Who looks your ideal client?
607
00:56:45,180 --> 00:56:51,660
So, yeah, I mean, my LinkedIn definitely says independent consultant, which I am still. So,
608
00:56:51,660 --> 00:56:58,780
what I do is I am also a founder of company called Binery Roots. So, I have team of about 25 people,
609
00:56:58,780 --> 00:57:05,180
you know, back in offshore in India. And we provide services on Microsoft 365,
610
00:57:05,180 --> 00:57:11,420
Power Platform, SharePoint, you know, Azure, Copylastory, and everything. You say about clients,
611
00:57:11,420 --> 00:57:19,180
so I have client in US, I have client in Australia, I have client in UAE, I have client in Israel,
612
00:57:20,780 --> 00:57:28,220
and also I have also client in Europe, you know, like couple of friends which are there in Europe also.
613
00:57:28,220 --> 00:57:32,940
But yeah, this is, you know, like different client base, which we have, which we support.
614
00:57:32,940 --> 00:57:40,140
And we, we kind of do the similar kind of exercise, which we do with, you know, any Microsoft 365
615
00:57:40,140 --> 00:57:41,980
based ecosystem.
616
00:57:41,980 --> 00:57:49,900
And a lot of people actually now speaking about
617
00:57:49,900 --> 00:57:58,140
I think Copylastory was yesterday, actually, I'll speak about agents. What role do agents feel
618
00:57:58,140 --> 00:58:00,540
plays in SPF exactly?
619
00:58:00,540 --> 00:58:07,740
Yes. So, as I said, right, like Microsoft recently with the last release, they have released
620
00:58:07,740 --> 00:58:16,060
for the public preview the SharePoint Copylast apps. Okay. So, it still says SharePoint Copylast apps,
621
00:58:16,060 --> 00:58:22,300
and they are saying that they might re-brand it to something else as always. But Copylast apps is
622
00:58:22,300 --> 00:58:29,980
basically allowing us to build an user interface, which can be embedded into agents. Now, that agent
623
00:58:29,980 --> 00:58:35,660
can be a copylate agent. In fact, they can be a copylate, that would be only the agent. I mean,
624
00:58:35,660 --> 00:58:40,380
the copylate user interface one which you are going to do. So, what you are doing is now the same
625
00:58:40,380 --> 00:58:46,060
SharePoint framework is allowing you to actually customize your copylate user interface. So,
626
00:58:46,060 --> 00:58:51,980
rather than showing the responses just in the text format, in the markdown language and what not,
627
00:58:51,980 --> 00:58:57,980
you are actually building a component, which would be rendered in the Microsoft 365 Copylate,
628
00:58:57,980 --> 00:59:03,740
where user will ask something, the component would be rendered, but then now they can interact
629
00:59:03,740 --> 00:59:07,900
on it, right. They don't have to say, okay, I want to submit it, rather than that, they are going to
630
00:59:07,900 --> 00:59:12,060
get the form, they are going to fill in the form, and then they are going to kind of submit it.
631
00:59:12,060 --> 00:59:19,180
The way I relate it to is basically an advanced version of adaptive card, right. With adaptive card,
632
00:59:19,180 --> 00:59:25,020
what we get is we get few controls, but we don't know, get a fully immersive or UI experience,
633
00:59:25,020 --> 00:59:30,460
or customization experience, right. But with SPFX copylate apps, we do look at that. So,
634
00:59:30,460 --> 00:59:36,460
that is what the role is going to be of SPFX into the agent development, and that sort of thing.
635
00:59:37,740 --> 00:59:42,780
Cool. Yeah, we are running a little bit off time. I have every session of rapid fry around. I give
636
00:59:42,780 --> 00:59:51,020
a short question, you give me a short, start with the local or pro code. I would say pro code.
637
00:59:51,020 --> 00:59:55,180
Most underrated SPFX feature.
638
00:59:58,780 --> 01:00:09,660
Underrated SPFX feature. I would say extensions. Yeah. And if such a little bit calls you today,
639
01:00:09,660 --> 01:00:17,020
I say, is that you get all the money and resources you need. What SPFX feature ability build?
640
01:00:17,020 --> 01:00:26,860
What I would build, okay. Yeah, I would build some kind of power automate workflow, automation kind of
641
01:00:26,860 --> 01:00:33,180
capability within SPFX itself so that we do not rely on the power automate if you want to build it.
642
01:00:33,180 --> 01:00:37,420
Is there any myth you will bust about SPFX?
643
01:00:37,420 --> 01:00:47,420
Yeah, now I mean at this point in time, yes, I can, that SPFX is faster to develop than power apps.
644
01:00:47,420 --> 01:00:52,940
Some people are still under the myth that it's the other way around, but now with the
645
01:00:52,940 --> 01:00:57,660
generative AI and AI and everything, that is the myth SPFX is faster than developing power apps.
646
01:00:57,660 --> 01:01:01,820
Coffee tea or energy thing during development.
647
01:01:01,820 --> 01:01:08,940
What's the one skill you develop as under estimate?
648
01:01:08,940 --> 01:01:13,980
What is the one skill? Sorry, I didn't know. What is the one skill?
649
01:01:13,980 --> 01:01:25,660
Usually, but I pass under estimate. I would say react. I don't know. I mean people generally don't
650
01:01:25,660 --> 01:01:34,860
feel it, but I would say that yeah, okay. And who should I invite next and what questions should I ask?
651
01:01:34,860 --> 01:01:43,260
I would say you can invite Nandip, okay, Nandip, I'll give you the reference and
652
01:01:43,580 --> 01:01:50,540
what questions you can ask. You can ask questions about Azure AI Foundry. I mean he is exploring it
653
01:01:50,540 --> 01:01:53,740
and he is very good at it. So that would be my choice.
654
01:01:53,740 --> 01:02:04,380
So I would say thank you for this amazing session and joining me today.
655
01:02:04,380 --> 01:02:11,420
And yeah, I think one of the biggest lessons from this conversion is that professional
656
01:02:11,420 --> 01:02:16,620
development doesn't mean building everything yourself. There's a lot of great stuff. The Microsoft
657
01:02:16,620 --> 01:02:22,940
365 ecosystem already gives developer enormous foundations through SharePoint framework,
658
01:02:22,940 --> 01:02:29,260
ReactRef, API, Power Platform, PMP, you know, SPMP, React controls, Flan,
659
01:02:29,260 --> 01:02:41,340
Azure and yeah, also the community. The real skill for me is knowing how combine those
660
01:02:41,340 --> 01:02:46,780
building blocks into a solution that are security, maintainable, performant and actual exhaust,
661
01:02:46,780 --> 01:02:54,220
a business problem. And yeah, I think yeah, there's a lot of new AI, yeah,
662
01:02:56,460 --> 01:03:07,900
brings a lot of new, better ideas how we can make things better faster and so on. And yeah,
663
01:03:07,900 --> 01:03:17,420
for everyone, you find all the information of the show notes on the MC35 and podcast. And yeah,
664
01:03:17,420 --> 01:03:23,100
so I say thank you again for being part of the show. Thank you for inviting. Thank you. It was nice
665
01:03:23,100 --> 01:03:24,100
talking to you.
666
01:03:24,100 --> 01:03:44,660
[outro music]
