 I guess we can get started now. Thanks everybody for joining me. I got a handful of people here for the first time. It'd be great if someone in the chat, even though I know I'm on a bit of a delay, if someone in the chat would just let me know that you can hear me and you can see me just to make sure everything is good. It looks like it is, but just gonna come back to it. Again, welcome to everybody who's joining me for this office hours today. I'm really looking forward to moving these office hours from what I used to do with just my customers and kind of a private scenario. And I wanted to open it up to more people. So with that, I'm gonna go ahead and kind of dive into it and I can see that we just go ahead and dive into it. I wanna start first by just running through a couple slides that I have here that I wanna run through. So we'll just keep this though very brief as much as I can keep the slides as brief as I can here. So put me over there, there we go. All right, so I'm gonna kind of frame this a little bit the same way that I've done my previous office hours that I did for all of my students, which just as a little bit of history for those of you who are new here, I did my office hours for the students of the ultimate bundle of my SharePoint framework course. And what I did is in doing that, I would just host it just for like a private group of people. We had like anywhere from 10 to 15, 20, 25, 30, it really depends on the month that we did it. How many people were gonna show up? But again, like I said earlier, I wanted to open this up to more and more people. And I thought that this time around, I thought that a YouTube live stream was the best way to do it. But this is the first time that I'm doing it kind of like as open to everyone. And so I'm gonna kind of model this a little bit like the office hours I used to do for my ultimate bundle subscribers, to be honest, because I didn't expect many people to show up. So if we get a bunch of questions, then hey, great. I will do my best to answer everybody's question that comes in. I did have a few questions that were submitted ahead of time from some students. So I'm gonna cover those first, but I also was just gonna throw out here and just say that there's a few things that I usually do to give you like an update on like SharePoint framework stuff or Microsoft 365 news, et cetera. Although I already see a couple of questions that are being posted in the chat. So I think we'll just start with the questions then and I'll come back to doing the SharePoint framework stuff if it makes sense a little bit later on. So bear with me. This is gonna be a little bit of a, I guess, an experiment or just kind of see how it works on my side and kind of let you also help kind of drive the discussion on where we're gonna go with everything. So again, I'm just gonna start you with the different slides, I'm gonna skip through some of the SharePoint framework stuff that I normally would end up doing. And I wanna just cover a couple other things first. Just a couple of little highlights here. First of all, if you're not aware of this, there's a developer summit coming up at the end of March around SharePoint Embedded. You might have seen this slide shared from Microsoft in the last, I don't know, a couple of weeks or so. It's an open thing that anybody can enroll or opt in to do this. I would recommend that you RSVP sooner rather than later. It's a free thing, you pay your own travel, but it's gonna be essentially just a two-day kind of immersive experience for full-stack developers who wanna learn more about working with SharePoint Embedded. Little bit of a kind of a secret thing or I guess it's not too secret if you end up joining this is that I'm the one that's teaching this. So I'm building the content for it. I'm gonna be teaching it along with some people from the product group explaining what SharePoint Embedded is. So if you're interested, go check out that link. It looks like the registration is gonna close in just a few days later this week. So you gotta make sure that you RSVP really soon using that link there. And if you wanna hear a little bit more about it, I guess if I can answer questions about it, I'll answer the best I can, but I really should direct you to Microsoft and answering any questions about that. So let's kind of go dive into the questions. So here's how I like to do these questions here. Questions from my students are gonna take the priority. They have options on the availability to post questions into a Discord chat that I'm monitoring during our session today. So if you have a question and you're familiar with how we normally do it, go post your questions in the Discord chat. I do have a few questions that were submitted ahead of time, like I said, that I'm gonna tackle first from some students and then we'll come back and I'll answer the questions that are in the chat. And I already noticed one question that was posted by Eric. I see your question or your two questions. So I'll touch on those things. I'll touch on those as well. So let me slide in where I have these questions from students, if I can find my mouse again. There we go, just kind of slide this in. And I'll cover them this way first. So let's go ahead and make this a little bit bigger. Okay. So I got three questions here, one from Michael P, one from Michael V, and then one from Ivan who submitted the different questions here. All right, so I'm just showing them as screenshots because some of them came across as emails and I don't wanna share their email addresses first. But hey, if you got questions, best place to post them is just post them in the chat for, in the YouTube, in the live stream chat and I'll answer them that way. Okay, so first questions from Michael Potter. He asked, should we be using, he says SPPMP instead of the SPHP client? And is that covered in Ultimate? So my understanding is what he's asking is, when he says SPPMP, I think he's talking about the PMPJS library from the Patterns and Practices Group, the JavaScript library that we have. And what this is, is an open source, community-based JavaScript library, works on both client, so browser, and then it also works in Node.js as well. And the idea here is that it makes it a little bit easier working with like a fluid-based API to make calls against the SharePoint REST API and or the Microsoft Graph, among any other endpoints that it works with as well. The other option, and when you're working with the SharePoint framework, we have a couple of native APIs. We've got the HTTP client for talking to any REST-based endpoint. We have the SPHP HTTP client, which is a configured HTTP client that's got a bunch of configuration stuff added to it, specifically for SharePoint Online. So that's gonna be like, including the cookie for the authentication because you're already logged in, you're working client side. Also for, let's see, it's gonna have things for like saying that you wanna use OData V3, that you want minimal metadata, et cetera, just some stuff like that. So his question was basically, should we be using the community one, the PMPJS over SPHP client? Do you have two options? And the answer is, I can't say that. I can't answer that question for you because this is a 100% preference thing. You can choose to do it. You can choose to use the community-based PMPJS library, or you can choose the SPHP HTTP client, or you can even use the Microsoft Graph client that we have in the SharePoint REST API, the MS Graph client V3, I think, is what it is. They all are gonna get to the same data. It's just really what your preference is. So the second part of his question was, is that covered in Ultimate? So he's asking, is that covered in the Ultimate bundle of my SharePoint Framework course? And the reason why I don't wanna take sides here is because my preference is absolutely not something that you should say that, oh, Andrew does do this or doesn't do this, and so this is what I should do. That's not really what I wanna push here. Personally, I don't use PMPJS. And the only reason why is because I prefer to work with the raw REST endpoints. I prefer to build up my request using the raw endpoint and instead of going through some abstraction layer. That does not, that is not me passing judgment on PMPJS. The people that have built it are very smart and very reliable, Julie Turner and Patrick Rogers. Beau Cameron's involved in it as well, and a lot of the people I'm sure are involved I have nothing but good stuff to say about it. I just prefer not to work with an abstraction layer and I'd rather go straight to the REST endpoint because to me, when you have a problem with the request that you're making, the last thing that you want is to have to figure out is the problem with my REST request or is it a problem with what the library's doing? And I mean, I'm not saying that doesn't happen often or all that much, but it's something you have to think about, right? Is the problem with the abstraction layer or is it with the actual query that I'm running? That's just my preference. So I wouldn't say that one is better than the other. I'd say what I would recommend that you do is try out PMPJS and see if you like it. A lot of people use it. A lot of people are prefer it. The second part of your question, Michael, is it covered in my ultimate bundle in my course? The answer is no. And the reason why is because I don't want to take third-party stuff and show it and teach it in my course for the SharePoint framework really for two reasons. One is I gotta draw the line somewhere on the scope and I choose to focus on stuff that is core to the SharePoint framework. I have kind of blurred that line a little bit and the fact that I have a chapter that talks about CI and CD and using Azure DevOps Pipelines or using GitHub Actions, I talk about how to do testing with your SharePoint framework project and your React-based SharePoint framework projects. And in there, I show how to use a library called Enzyme from Airbnb for doing the UI-based testing. I mean, you could argue that, hey, that's not really core SharePoint framework stuff. And you're right. But I thought that that was kind of more like, kind of show how you would do it if I was gonna end up doing it. In fact, I wouldn't use Enzyme now. I mean, I actually overdue on re-recording that chapter because I think you should be using something called testing library. So that's an update I'm gonna have to the course soon. But, you know, I don't cover PMPJS as well because frankly, if I show it once, then since I've recorded, if I've recorded it, then I have to keep recording it every time they do an update and it's a communities project, lots of updates. I don't cover it. It's the same reason why I don't cover like the PMP React controls that you can use in a web part. It's the same reason why I don't show the PMP property paying controls that are also available because they just get updated all the time. So I don't, I don't, that's the reason why I don't end up doing that stuff. So that's Michael's question. The next question is from Michael V. And now this is a big question and I'm gonna kind of summarize what he's got here and I'll let you read it if you're interested. But essentially he's trying to take the Monaco editor, which is the same editor we have the VS code. And he's trying to use it inside of a, inside of a SharePoint framework project. And my guess is within a React-based web part. So what he's doing here is he's talked about how he tried to use the one that's coming from the SPFX React controls. And he's pointing to the source code, but the problem that he's having is that his customers are in an environment where they can't use an external CDN. So they're US government customers and so they block access to public CDNs. And when you look at the source code to this library here, which, let me pull that up real quick and I'll just slide that into the chat. So give me a second, let me find his question. I meant to have that up earlier. Here we go. I'll just paste that in the chat and we'll slide that in. So this is the link that I was pointing to in the source code. And the part that he specifically is referring to is right, let's see. So this is the library he's using, but let me back up here, because I think it's right, is it here? Nope. This is the problem he's running into. All right, there you go. So the problem he's running into is the way that the one that's written from the PMP JS guys is that it's pulling the library from the bundle from jsdeliver.net, from that CDN. His problem is he can't do that. So his question was about a couple of different things that he's tried in trying to use the one from the PMP group. It's not gonna work because it's coming from a CDN. He's also found this other place where he could use it as an NPM package. Also, his ideal goal is to dynamically import it and then also try to bundle it up using webpack and following, using the one that's provided. There's a webpack package that's allowing us to do that. I didn't put it in the screenshot here, but he showed the webpack configuration changes he made to make it work. This one is, this is just simply telling me that there's something with the configuration object that you see right here, that his initialization of the configuration object using webpack wasn't working. There's something malformed in there. So it's a problem with the webpack configuration that we'd have to look at here. And this is telling us the problems where the problem is. So that's one piece, but then he's also referring to another example using the Monaco editor slash React project and trying to get this up and working. And so what the guidance was is like, do I have any guidance on how he could do this? And so one way is you could, is there a way that we can take the Monaco editor and embed it as part of the bundle? Or ideally, can we just put it somewhere else that's inside a SharePoint, like for example, his client assets folder because they don't have access to the CDN because they can't even use, I think I saw somewhere where he wasn't able to use even the, yeah, it can't even use the Office 365 CDN. So my take on this is how would I address this is I would go right back and look at the Monaco editor control from the patterns and practices project that is from the PMP group. And you can see here how much code it is. It's not a whole lot of code. When you look at the control that's being defined here, it's only a hundred lines of code. When you look at the rest of it though, from like the hook that they've created or the styles that they've created for it, I would use, this is the baseline and I would just recreate your own react control in your own project and use it that way. You can even see inside of the hook where it can define where the file is coming from. So you could point to your own location of that and even better yet, this is outdated. If I'm not mistaken, the Monaco editor project is like 0.46. So in this case here, I know that when in his question, he was saying that he was trying to use the control Monaco editor slash react. Go to the actual root of the main project. So Monaco editor, so what is that? Actually we should be able to find it because inside of the PMP group, I'll betcha in his package.json, I'm referring to his, I'm referring to a guy named Alex who is on the SharePoint framework team. Yeah, so there's a package for the Monaco editor. So I would just go to npm.js Monaco editor. So there's the raw editor. So there's the one, actually let's go back. You can see that this is the one that he was using trying to get to work. I would instead just go straight to the main one, use this one, the same one that the PMP group is using. You can see there's a more updated version than the one that was zero dot 36, which is, let's see how old that is, zero dot 36, which is a year old. So that one shipped in almost to the day, almost a year ago. So February 24th of 2023, I'd use that and then just take the bundle and stick the bundle into your client-side assets and just mirror what he's done here. In fact, you could probably just copy all of the source code and use it inside your project the same way he's done it. So that's the approach that I would take for it. The last question I got, so let's hide up Michael's, the last question I got ahead of time was Ivan's. So let me open up Ivan's question. He opened that, he submitted that via Discord. So let me come over here and show you our Discord community. If you're not a student of mine, then you may not see, you're not gonna see all of these channels, like just my students in my ultimate bundle of my course can see the office hours channel because that's for them to be able to submit questions ahead of time. And then there's some other channels in here that are specific just to that as well. So Ivan's saying, seeing some weird behavior. Okay, so I got this one this morning. So Ivan, good friend. Haven't seen you in a long time, buddy. Ivan is in Australia, if I'm correct. Things haven't changed. We haven't talked in a while, but good to hear from you, Ivan. He's saying he's got a weird behavior with a tenant deployed SharePoint Framework app that's been deployed to the SharePoint Store. They published a new version to the SharePoint Store and they have a client that upgraded the app to their tenant app catalogs. So they've got the newest version. And then at the site collection app level, the app shows the latest app number. So app version, I assume, but it's still running the previous version of the app. Removing and reinstalling the app at the same site collection doesn't help. So I know you've already said this, but let me just kind of say the way that I approach this is that one, there's a spot where you can go in and check to see, is there an updated version? Do I need to install that? And if so, I would install that. However, it looks like you've already done that. The only thing I can say here is that there's not much you can do with this. I've seen this before. The problem usually is a SharePoint related issue and there's not much that we can do about it. It's usually a caching issue. So I'm not sure when you did the update or when you rolled it out or when the client updated it inside their tenant or what their caching story looks like in a client-side caching, but I think it's just a caching thing. It could be a caching thing at the client-side level, but it's probably a caching thing at the SharePoint level, at the SharePoint online level, which unfortunately you can't do anything about that. There's nothing you can do other than just file an issue with Microsoft. So I would have the client submit a ticket or have them link you into it or I would try posting something to the SP DevDocs issue list on GitHub and report the problem there. I've seen it before though and there's nothing you can really do with this. There's nothing that we can do from our side. It's something that's on the Microsoft side, which is either wait until the cache expires or open up a ticket. So not the best story, but it is what it is. Okay, so that answers the questions I got ahead of time. I can see a handful of questions from a bunch of other people, so I'm going to do the questions in the chat. I'm not gonna do all the stuff that I have in the slides. We'll come back to the slides at the very, very end of this. First question though that I got was from Eric. Actually, first two questions from Eric. So Eric, thanks for joining us. And if you guys are joining us, I would love it in the chat if you would just, where are you connecting in from? So I saw Adams from Poland. I'm from Florida in the United States. Yes, it's actually cold in Florida right now or at least where I am. I'm in Northeast Florida up near a place called Jacksonville or St. Augustine. I saw Don joined us. He's in Texas, Arlington, Texas. That's near Dallas, right Don? I hope, I think that's right. And I saw Adam from Poland and Shelaka from India. So thanks everybody for joining us. All right, so Eric, your two questions in the chat. Let's actually get back, let's put me on there again. So first question was, does the SharePoint framework, does SharePoint framework support reading lists and folders with more than 5,000 items? Absolutely, in fact, everything does. You can definitely read items from a list that have tens of thousands of items in the list. That 5,000 limit is only kicking in in terms of the, when there's fourth, 5,000 items are gonna be returned back to you, that's when that kicks in. So it's not, if you can apply a query, write a query that does filtering, or if you go back to the old school stuff and using like Camel and you have a view and you can query the view, you'll still get the data back. You'll definitely still get the data back. The problem comes in in the total result size that's returned by the query that you're running. So yes, you can definitely get items back from the list. I've worked with lists with well over 100,000 items in it. And as long as you write the query, as long as you write the query the right way, then you should be able to, in terms of like with the filtering applied, then you'll get items that come back and you'll be able to see it. So definitely end up working. Second part of your question is the SharePoint framework support file uploads of greater than 50 megs. And the answer is yeah, and actually it's not even SharePoint framework that you're using to do the upload because the SharePoint framework is just an API. You're gonna be making calls directly to either the SharePoint REST API or what I would recommend that you do is use the Microsoft Graph to upload the file. And you're gonna be working with the drive or the drive item endpoint. So let me show you what I mean by that. So if I go over here to graph.microsoft.com, which I know isn't correct, but it'll at least redirect me there. And I go to the API and go to the API reference. And if I look in the navigation on the left, I'm looking for files, drives and drive items. And you can upload an item. There are, this is gonna have some information about how you can upload large files. So this method only supports 250 megs, but if you wanna upload something even bigger than 250 megs, so you said 50 megs. So this is gonna work for you, but you see there's a link here about uploading files that are even bigger, which I think I'll let you go up to, I wanna say like it's a lot. I don't see the exact number listed there, but regardless, you can go as big as you, you can go really, really big, like hundreds of gigabytes, if not like a terabyte, maybe, I don't know. But if you're uploading a terabyte through the browser, you know, we maybe wanna re-evaluate that. But at any rate, yes, you can. The way it's done if you have files that are even bigger than 250 megs is you create this thing called a, and I'll drop this in the chat. All right, so I just posted the link to what I'm looking at in the chat. This option for using this upload session option is you basically create a session and then you start like adding chunks to it and each chunk is being added to the session. And then when you're all done, you end the session and Microsoft Graph then like kinda packages it all together and saves the file. So yes, you can definitely upload more than 50 megs using SharePoint Framework because you're really, it's not even SharePoint Framework, you're really using whatever rest endpoint is what you're supporting. But the SharePoint Framework, you can use the SharePoint Framework's Microsoft Graph client to upload a file and you'll have a nice rich, like, what's it called, like a fluent UI that you can use to be able to create these uploads using their JavaScript SDK. Cool, so let's see, Adam's got a question. Adam is saying, if I could point out the three most problematic or confusing things in the SharePoint Framework development, what would that be? Consider a beginner SharePoint Framework dev, what would you advise to him or her to watch out or not do? Great question. Number one, because Adam and I were talking about this this morning and because it was the subject of my newsletter, which if you're not subscribed to my newsletter, go to voitanos.io slash newsletter and sign up. I send a newsletter every two weeks on Tuesdays related to Microsoft 365 full stack development topics. And I say full stack because I don't wanna say pro developer. I really don't like that term. That really implies that like junior level people or beginners or intermediate aren't welcome. And that's not true. I say full stack because, well, that buzzword is now a real thing when you look at all the job boards. But I think what that does too is that what the definition of full stack says, you build like client side solutions and then all the server side infrastructure that implements that client side solution. That's what we do with Microsoft 365 development. It also, I think makes it very clear on what the difference is between low code, no code, power platform style development. And if I'm using like visual studio code or TypeScript or React or something like that. I hate the term pro code though. Anyway, we were talking about it this morning and it was also the subject of my newsletter this week. And that is when you are granting a permission in a SharePoint Framework solution. So going back to Eric's question about can I upload a file? And I said, yeah, use Microsoft Graph. So you're gonna want to use the files.write permission or scope. I think that's what the scope is, files.write. If or drive item, one of the two, whatever it is when you're uploading a file, you have to grant that permission. The SharePoint Framework gives you a way to be able to grant that permission inside of your, what's it called? Inside of your package solution.json file. So just show you where that is. Let me just go into a project that I've got. So just grab one from my class. Let's see external APIs, materials. Actually let's use graph. The graph one would be a better one to use. So graph, materials, and let's do this one. And in the config file and package solution, you have a spot, write. Oh, it doesn't have it on that one. That's okay. I need to fix that, but it should be write, see an example of it. That one really doesn't have it. Am I in the right folder? I'm in the right folder. Something's missing. That's okay. Let's go over to this other one. How about this one? How about this one? How about out of the box? Because that's the one that's got graph on it. And that one doesn't have it either. Great. Love it. Bad time for a demo. Anyway, glad I didn't share my screen. Anyway, the package manifest, and the package solution.json file, there's a place where you can specify the permission that you want to grant the user. Or the user is going to grant. That implies that that permission applies to that specific SharePoint framework solution, and it doesn't. It applies to the entire SharePoint online tenant. So if you grant that permission, if you have that in your package, when you deploy your solution, an administrator has to go to the SharePoint admin center to go find that request for that permission scope. And when you grant that, when the admin grants that permission request, they're granting that scope request to the entire SharePoint online tenant, not to your SharePoint specific application that you've built. So I could write, if you did that, then I could write a different project that I deploy it. I don't request any permissions, but I can go get an access token with that permission scope because it's been approved for every client-side solution in SharePoint online. I don't like that. And I hate that approach that Microsoft does. And the reason why I don't like it is because I think that what it does, let me see if I can grab the URL for this. Yeah, there it is. So this is the article that I published this week. And the reason I don't, whoa, it got too big. The reason I don't like this, let me show you where that permission scope was. There you go. So it looks like this right here. And the reason why I don't like it is because when that permission scope is granted, like I said, it grants it to the entire tenant, right? Notice that it says tenant-wide. These are tenant-wide permissions. Admins don't pick up on that, generally speaking. Instead, what I recommend you do is I would recommend that you grant those permissions using the command line, using either the SharePoint online PowerShell or I prefer the CLI for Microsoft 365. So the way you would do that is you can go grant that permission. So in this case, I'm doing mail.read on Microsoft Graph. And the reason why I would do it like that is because that's clear to an administrator that this has nothing to do with a specific SPFX solution. This is for an entire tenant. So that's a big thing that I see people get tripped up with. So that's number one. The second thing I see people get tripped up with related to SharePoint framework is they think that when they install the SharePoint framework generator, they're installing the SharePoint framework on their laptop. Not true. You're only installing the thing that creates new projects. Full stop, that's it. So when they say, well, I installed the last version of SharePoint framework, why aren't my projects getting updated? It's because each project has its own kind of configuration that says what it needs. So that's another big thing is that the version of the SharePoint framework that you install, you're really installing a generator. You're not installing something across the board that everybody can use. So that's why I would, that's another big thing that I see people get tripped up with. The third thing, third most problematic or confusing thing that I would say don't do. I think it's with people trying to jump between, I'll tell you, okay, here's one. I could ask me on a different day and I could probably give you a different one. But for this one is most people build their projects and they don't think about externalizing libraries to a CDN. I know Michael asked a question earlier, said it wasn't available to him, but I see fewer people that run into that scenario than what I see otherwise. And that is I see more and more people create these gigantic bundles when they should be externalizing those resources. And the way you do that is through a, again, you would use your, let me go back to find a SharePoint framework project real quick. No, that's my website. I don't want to do that one. Let's go here and let's go, let's just look at a externals. And I will find in my class, let's do the jQuery data tables one and look at config. So here is the, here's the money shot right here. So this is basically saying whenever you see an import for jQuery or an import for data tables inside the package, this tells the webpack bundler, don't suck all that stuff into my bundle. Instead, just skip it, but make sure that these two libraries, specifically this one and this one, are downloaded into the current page before you go load this component that expects them to be there. So that's another big one that I see people get tripped up with. And I saw a follow up question from Eric. You said, from the question we did earlier, you said, if you want more than 5,000 items, is there a way to do request in chunks? Yes, there is. You can get, basically if you do the request, you wanna do it in page, you wanna like page the request together and say like, I only want like, do your request, I only want and have a sort set up and say I only want the top 50 or something like that. If you do it with graph, I don't remember off top of my head, but you might get a continuation token where you can say, okay, give me the next page and the next page and the next page. Because I think that with graph, you can tell it how many items per page. So if you have lots of items, it's only gonna get a certain amount of them, you might be able to go through and page through it that way. Let's see, Adam also asked a question, how do you go about a SharePoint framework solution that should be compatible with on-prem and online? For example, you maintain all of your login in an external NPM package and then have two SharePoint framework solutions. I honestly, I would do that as two separate projects. Today, I would do two separate projects. And the reason why is because the highest you should go with any project that's gonna run on-prem is the SharePoint framework version 1.4.1. And that thing is so old, like I think it's six years old by this time right now. Let me see real quick. I have this giant matrix that I maintain and 1.4.1. Yeah, this thing came out in February 15th of 2021. So this thing is over six years old actually by now. I would have one version that you use for all of the stuff that you do for on-prem stuff. Well, it doesn't include SharePoint 2016. You gotta go even farther back for that, but I would, at some point, you gotta decide where that cutoff is for what you maintain. I would go no farther back than 1.4.1. And then I would have one for SharePoint online, which is using whatever version you prefer, ideally the latest one, but yeah. So that's my take on it. Let's see, what else do we got here? So that's Adam's, Adam, another question. Looking at the SharePoint framework tool chain, what do you see as the most problematic thing that we think should be fixed today, improve or fixed today? For example, a SharePoint framework scaffolding projects default to react hooks instead of class components. Oh boy. I'll be completely honest, is that it should be thrown away. I think that this style of building SharePoint framework projects that we have today is so outdated, but it is what we have today. I think that the way that the team's toolkit has done things with projects and does not have a very rigid scaffolding, like what the SharePoint framework team has done, has created a problem. And I think that the dependency tree that they've created has made it incredibly complicated. So I'm personally, I don't think there's an easy fix for anything. I mean, we're still using Webpack. We're still using Webpack and Gulp. And those tools are like, the world has moved on from when this initially was introduced in 2017. So to me, I would like to see things be a little bit more flexible. I've got a pretty sizable hot take on how I feel about the SharePoint framework modernization type stuff. But I prefer to kind of wait for a couple months and let's just see what Microsoft says at the Microsoft 365 Community Conference in Orlando at the end of May, which by the way, if you're going to that, make sure you can, actually I should show this really quick, sorry for the plug. But if you're going to that, I've got some stuff I'm presenting but make sure that you use the code Connell 100 to save $100 off your registration. Okay, it was a quick plug. I'm not gonna stay there. Anyway, I don't think there's one easy thing to fix with this. I would love to see them in terms of the tool chain. I would love to see them default the React projects to using React hooks instead of using class components. But then you're gonna tick off people who are still using class components. I still see people in the community submitting samples to the PMP sample library that are using, I mean, I've seen some for like open, Azure open AI samples that are still using class components. Class components are, in my opinion, and I know people disagree with this, in my opinion, class components, they're old, they're dated. And if we're working in SharePoint online, there's no reason you should be using them. You should be using hooks. Hooks are forward compatible. They're faster in terms of performance. You write less code. They're easier to maintain. They're easier to reuse and they're fully supported because we're on a version of React that leverages them. So that would be one thing I would like to see them do. But really, I wanna see a complete reset on the project scaffolding projects. That's one of my feedback things. Like, I can't say what happens at the MVP summit that's coming up in March. I finally get to attend it after a couple, after, gosh, it seems like six years I've been, maybe five years. But it's the first one I'm gonna attend since all the COVID stuff. And in the SharePoint framework session, they're like, what's on your mind? And I'm like, my hand's going up right away. I'm like, when you can update the version of React, we are way old still in the version of React that you support. But anyway, let's see. Don has a question here. What if you want more info? You want more info into REST versus SharePoint REST? Oh yeah, so Don, did you post the link to that, Don? I don't think you did. Let me pull that up here. So Don had a follow-up there in the chat about a discussion that Julie Turner and I had about SDKs. We had a show that we were doing for a while. It's currently on a hiatus because we're both swamped. And let's see, REST versus SDKs. So there's a video that I just posted a link to for a discussion that Julie Turner and I had on REST versus SDKs. That goes back to Eric's question. Oh no, Michael's question about that. Interesting, Don, if you did post that, it didn't show up in my chat. That's okay, it's in there twice. But thank you for doing it. Jono, cool, glad to see you join us. Let's see, Arjun from India, thank you for joining us. Dan from California, thank you. Eric was from California, Folsom California, not the prison. Well, if it was the prison, you got some good wifi. Jono's got a question. I want to create a hierarchical export of all users below the selected user. Would I need to use the direct reports endpoint over and over to get all the users below the selected user? So you want to create an org chart and you want to show direct reports and their direct reports and so on. I don't know of a control offhand that or if there's a query offhand that you can say, give me everything. You may be able to create a graph query, sorry, a graph, a Microsoft graph query where you can use the expand operator to go one or two levels down, but I don't know how effective that's gonna be. I might, what I would do, like what I would do is I maybe not show it. I maybe, I would try to make it a little bit more like, think about the user experience. So let's say you've got like, let's say you've got like three levels in, then maybe when the component loads, I would say, go get the current user or go get a couple of current users, whichever one it is, which are where you're starting. So you could say selected user. And I would then say, get all of their direct reports and render those out and then render the entire web part out. But then from there, I would maybe have like an asynchronous call in the background that is maybe fetching the next level down and then maybe you're like populating it as you get that data back. You could do that really easily with React and honestly with React and React hopes, you could definitely do it easy so that as you're getting that data back asynchronously, it's kind of like lighting, the org chart's kind of growing live. Instead of just saying, let me go get all of it and render it all at one time. Like think about the user experience. So they need to see everything all at once or they can kind of see it kind of growing as it's coming. I mean, kind of like when you go to the YouTube homepage, you don't see like every single video that's available. If you scroll to the bottom of it, it loads more on demand than it loads more on demand. I kind of would look at it the same way. So I would think about the user experience there. To directly answer your question, I'm sorry, I don't think that it's, I don't think it's as easy as just saying, give me everything all at once. I don't think that's available. So I'm not sure who this is, but I can see someone said test brand account and you said, so you reviewed that yesterday. Teams toolkit project structure seems like it has weaknesses. So I assume you're talking about back to the question that we had related to Adam's question about what would I change with the tooling? And look, I mean, cards on the table, every single project structure and template that they create is never gonna fit your everyone's perfect requirements. I'm teaching a class right now. We just spent time yesterday or two days ago reorganizing a teams toolkit project on how I would like to see it done. Everyone and bunch of people in the class were like, yes, I like it. That's the way I would want it too. Like, how do we make that work? I'm like, I mean, you got to convince Microsoft that you want it to be in a different way. You could always change it yourself for all of your projects, but then it's like a lot to maintain. So I prefer the way the teams toolkit does it over the way, and not just the project structure. I mean the build tool chain and the dependency tree. That's the thing with the SharePoint framework. I think that is like the biggest anchor on the SharePoint framework today is the dependency tree of how they've built it up and taking these dependencies way on. We still can't use a version of JavaScript. We still can't render to like, I think it's ES6. We're still rendering JavaScript to ES5, which I think is 10 years old. Why? You know why? Because the way the dependencies chain is set up is that somewhere along the tree, a dependency they took has a dependency on ES5, and they can't go to ES6 until that gets updated. It's the same reason why we have old versions of React that we're supporting. The SharePoint framework team is anchored by dependencies they've taken from other groups. So that's the biggest downside of the SharePoint framework today that I see. Let's see, oh, getting into the questions here. Let's see, Adam, I missed one of the questions from him about making a SharePoint framework project prepped for testing. No, I didn't intentionally miss that. I didn't intentionally miss it. I did miss it. So you said, let me go back to your question and see if I can find it. Oh, what were the three tips I would give to make SharePoint framework project more testable? So what would I like to see them do with this? So I have a, I don't know how much they're gonna be able to do based on the way the SharePoint framework is currently architected. So much of the stuff for the SharePoint framework expects that you are always going to be running in a SharePoint framework context. You can't just run it out on the side. So I don't think there's much they can do or I guess a different way to look at it is there's way too much they have to do to make it more testable. What I advocate people do and I wrote about this a while back. Let me find this article so I can reference it in my, let me find this article for you real quick. So if you go to my site just for autonomous.io and if you look for it, there we go, build web apps, not Microsoft 365 apps or Teams apps or SPFX apps. What I like to do, so let me just explain how I like to build apps, SharePoint framework apps. My web part is simply a bridge between SharePoint or the SharePoint framework and my React app, okay. Let me grab the link to this and paste this in the chat. Now, why do I like to do that? Because anything that is my React app doesn't have to live inside the SharePoint framework. Any data that it needs access to it can go fetch that data from the parent web part or it can expose a call saying I need this kind of data and then my web part can be the thing that goes and requests data from the SharePoint REST API or Microsoft Graph. Or I can make those calls directly from my component and I can test all of those things from my React component. I like to mock up the, I've really wanna do this article in this video but I like to use it, there's a tool that I like to use. Actually it's a library, it's not a tool that mocks up every single outbound request that you make to a different web service so that when you're testing it, your code doesn't change but it intercepts the HTTP layer of the call that's going out and it allows you to either let it pass through or you return, you basically act like the response and so you can like ignore any authentication that you gotta deal with or any of that kind of stuff all inside your unit testing. It's a library I'm a big fan of, I use it for a lot of stuff and I just need to write about to show it. There's a tool that some guys at Microsoft have done called the Dev Proxy. I'll admit that I don't have full knowledge on everything that it does. I don't particularly care for the approach and I'm not gonna like torpedo the effort they've put into it because it is very useful and I know a lot of people love it but to me, that's a Microsoft solution for a Microsoft problem and I wanna be able to work with other stuff. Like the library that I use to mock up these different requests, it works in Node and it works in client side stuff. So I use it for all my Azure functions. I use it for, well, it works for Node so it works when I'm testing my React-based apps because they're running locally or they're running in the cloud or they're running like a CI story when I say in the cloud, they're running like a CI story like in GitHub Actions and I use it for like mocking up like the Discord API for Azure, the App Insights API, SharePoints REST API, Microsoft Graph for REST API and it allows me to bypass all that stuff doing the exact same thing and it's simple, it's elegant, it's quick. The only thing that I really like about the Dev Proxy is that it's got a bunch of like sample data that it can like mock up and return for you and I know it does some stuff like 429s for you and that kind of stuff but that's easy to implement in my opinion, just randomize 429s to come back and make sure your code handles it the way it's supposed to be handled. So that's my preference. Oh, got some other questions here. I see Aaron's got a question here. So that was talking about testing, Adam, just to wrap that up. I don't test my SharePoint framework stuff. Instead, my SharePoint framework stuff is only used as a host for my React app and I test my React app. I do the same thing with extensions. I do the same thing with web parts. Can't really do it with ACEs because they are so like married to what you do with Viva Connections and the SharePoint framework but you can test as like as much of it as you possibly can try and externalize it. So I don't test anything that is specifically running inside the SharePoint framework because frankly, if it breaks, it's SharePoint framework stuff. It's not stuff that I wrote and so I can't test it. So I focus on the system under test, which is my code. Aaron's got a question here. So I'm starting running out of time. We've got about five minutes left and I got like two things I want to cover before we wrap up here. So I will try to answer a base question. Looks like there's only one or two here. Aaron, security of a SharePoint framework solution. How do you ensure that a SharePoint framework third party solution is not leaking corporate data? Is there something that I can check in the dev tools or outbound calls? It's what you install. Whatever you install, you need to look at the package and do a code review. Nothing replaces a code review for what you're deploying in your SharePoint environment because you need to look at the code. The SharePoint framework is set up in a way that it can ensure that you can't deploy code to your SharePoint environment without an administrator installing an app package. So that's the gate, right? You can't just put JavaScript on the page. So you want to do a code review and verify what outbound calls that that code is actually going to be emitting. Teams that does a much better job of this where you have valid domains and it blocks calls that are to domains outside of what you've whitelisted or accept listed, I guess, can't say whitelisted. The, I found that out with all the docs that I do for Microsoft because now I can't use the term whitelist which is really tough when the search API actually uses the term whitelist. But in the SharePoint framework, there's a place where the domains are listed when you go to deploy it, but that's not a guarantee that you're not downloading some of the library like dynamically. So it's code review, it's code review, it's code review. That's the best thing that you can end up doing and make sure that there's not something in the code that is allowing the user to specify or some contributor to put the web part in edit mode or plug in a URL in the property pane and now it's downloading a JavaScript file on demand that could then be post, doing HTTP post to some of the location. That's really it. The SharePoint framework doesn't have many other tools to be able to do that kind of stuff for us today. So not a great story Aaron, but it's, I'm at least just trying to give it to you straight. Let's see, let me scroll down a bit farther. Did Adams do you mind as VBA? So I see your question done, but I don't know what you mean by that. So, sorry. I see Adam, you got more questions, but I'm gonna, let me, you say, what three or more tools or projects on P&P would you use daily or consider extremely helpful from the SPFX development? Would you recommend, for example, the CIA, the CIA, the CLI, and then Don's got another question about the Viva Connections Toolkit, which I know Adam is behind. And I don't like doing, I'm a little hesitant to do this because if I don't use something or I don't reference it, then I feel like I'm, it seems like I'm not recommending it, which means I discourage it, which is not true. And so I wanna be careful about this. I can tell you, I've never used the Viva Connections Toolkit. I have never used lots of the stuff from P&P. And the reason why I don't do it is because as an educator, so my primary business is education, right? I'm a, or some people call this edutainment or whatever. I teach, I teach Microsoft 365 development and I don't like going with too much custom stuff when I teach because, especially in my classes, because not everybody can use them. And I don't wanna say like, you should use this. And then someone be like, well I can't do that in my organization because it's not supported. Like I can't use the CLI from Microsoft 365 because we're not allowed to use open source code. I've worked at organizations that are like that. And so I don't, I generally focus on just the out of the box stuff. In terms of the P&P projects that I like to use, I'll throw those out there and it's just not omitting anything that's out there. CLI for Microsoft 365. That's it. That's the only one I use. I honest to God, that's the only one I use. I like going to the samples that are out there to kind of see what other people are doing and how people are doing stuff. But I don't use any other libraries. I don't use P&P JS, but I acknowledge it's a very good library. I haven't, I honestly just haven't taken the time or made the time. Oh, excuse me. Oh, didn't get my mute button quick enough, apologies. See, I'm allergic to this question. But it's not, I'm not dismissing it because I don't like it. I'm just saying that I just, I don't teach it. I don't show it to my customers because that's all my students because I don't want them to think that's the only way to build something. And also, quite frankly, it's selfish. Open source stuff and like P&P stuff changes very frequently. Makes it really tough to build a class and then have to constantly be updating it to make that work. So, to be up, to be current, just my two cents. So there's nothing, nothing against that. I usually just use the CLI for 365. I don't use the P&P, I don't use the React tools because I don't like the, I don't like to take a dependency on stuff like that. I will, like the Monaco editor question that came up from Michael earlier, I would, if I was gonna, if I needed that, I would go rebuild it and put it in my own project so that I can maintain my own version of it and use my own versions. That's why, that's what I would do. Same thing with the property pain stuff. That is the only other one that I may use so that I don't have to build those things out because building custom property pain controls is a pain in the butt. It's way too cumbersome on all the stuff that you have to do to make it work. So if they had one, I'd probably end up using it. Okay, so that's pretty much the only, that's a bunch of the questions that we got. So I'm gonna, I'm gonna, I'm gonna stop, that's all the questions I think. So I'm gonna stop doing questions. I wanna go over just a couple other things before we wrap up. I know I just hit time at 12 o'clock Eastern on the U.S. time, but I wanna just do a little bit of a wrap up, just kinda cover a couple things. So let me pull my slides up. Yeah, this is all stuff that I was gonna cover which I'm glad we got questions because the idea about this was supposed to be office hours and questions. I wanted to make sure that I was answering your questions. So thank you very much for doing that, for asking questions ahead of time and also during the chat today. So for all of you who have questions, I'm gonna miss some names. So I know Eric, I know Michael, Michael, Ivan, Don, Adam, Aaron, Eric. Thank you guys, everyone, thank you everyone for asking questions. I say guys, I wanna say thank you guys. I'm from a part of the South of the United States that guys is used as gender neutral. So when I say guys, I mean guys and gals. Hey, going forward with this, I really, I have a couple asks of you before everybody drops off. Number one, let me know what you thought about this. Let me know what you thought about it. What did you like? What did you not like? I wanna do these office hour sessions. I would love to get to the part where I'm doing these weekly or even bi-weekly. If there's enough people that show up, then I'll be doing, I would do them weekly. But I wanna make sure that kind of set expectations the right way. So I'm gonna start with doing these on a monthly basis and more than happy to answer as many questions that we can actually get through. I also, if you have any feedback, please send me feedback. Couple asks that I have for you other than just sending me feedback. So how's the best way to send me feedback? Put it as a chat or as a comment on this video. It's recorded. It's gonna be on my channel. Go watch it. Couple asks that I have. Please share this with people who you think might be interested in it. Share it on social media. Share it on your social following. Share it with people within your organization. I would greatly appreciate that. But comments on this feed would be the best place on what you thought about this specific office hours. I also, I'd be remiss if I didn't mention a couple of other things. I have a newsletter that I publish every two weeks. You can get to it if you go to voitanos.io or andruconnell.com. Look in the URL at the top. There's a subscribe link. Plug in your email address. You'll get an email from me once every two weeks. I write about Microsoft 365 full stack developer topics and related topics that could be GitHub actions, Azure DevOps, Microsoft Teams development, SharePoint framework development, SharePoint embedded development. I also have a bunch of links that I write after that main article that cover things like better news that you should be aware of that I think you should know about. And for those of you who are familiar with my podcast, I used to do with my friend Chris Johnson. I even have a part of the bottom where it's my picks. So it's like some fun stuff that I come across. Might be dev related, might be just geeky, whatever. It's just fun stuff. My other big ask that I have for you is please subscribe to my YouTube channel. Please like this video, that the recorded version of it. Please subscribe to my YouTube channel. It actually helps. I'm trying to reach more people. That sends a signal to YouTube that people like this content and it'll recommend it to other people who are also the same way. I'm not doing it to try and make money off YouTube. Yes, my channel is monetized. I'm only gonna get a couple pennies from this. I'm doing this to try and reach more people. More Microsoft 365 developers. And doing it in a way that is not speaking the Microsoft company line. I like to be blunt. I like to be honest. I'll tell you what's good and I'll tell you what's bad and I'll be completely honest about it. So hopefully I showed a little bit of that in this whole session. My next office hours is currently scheduled for March the 20th. I would recommend that you go click the little notification bell on the video. So if you go to my YouTube channel today, you'll find where this has been scheduled if you go to the live tab. The date for this may change. I literally have three weeks in a row where I'm traveling, jumping between the West Coast and the East Coast of the United States where I'm only home for like a day or two between each trip. Right now I'm supposed to be teaching during my currently scheduled office hour session for March on Wednesday, March the 20th. I schedule these on a monthly basis. Generally they're at 11 a.m. Eastern time in the United States, which is New York City time and they are on the third Wednesday of the month. I have to see if this class is gonna happen, if it is, then I have to move this to another date. So I don't normally have to do this. This is a very unique situation. So just keep an eye on that. If you subscribe to my newsletter, I also send out a mailing about a week ahead of time of when the next office hours is going to be. So I will definitely let you know about that. But with that, that's everything I had to, that's everything I wanted to cover today. Thank you very, very much for everybody who joined me today. I hope to see you the next time we do this. Hopefully it's on March the 20th. Kind of hopefully not so I can actually teach that class. But if not, I hope to see you in the future and I'd love to get your feedback. I really would appreciate it. Thanks a lot everybody. Have a great rest of your time. Day, I think, let's just say day.