
JV B/C
JV B/C
JV B/C E4: Imposters and Community
Talking about being welcome and welcoming in the community, along with feeling like an Imposter; how to use Config Packages; and an intro to creating a BC Docker container for new folks.
0:00:00-0:01:00 Pre-Intro Talk
0:01:00-0:01:37 Intro Music
0:01:37-0:21:19 Talking about Imposter Syndrome and Community
0:21:19-0:45:38 Using Config. Packages in BC
0:45:38-1:09:18 Dev Basic: Making a Docker container
1:09:18-1:10:20 Outro
Good morning, everyone. And welcome back to the JV BC Podcast. Today we're gonna be talking about the old imposter syndrome and community. Because I don't think we've talked about that much in our little business central ecosystem. And then from the consultative side, we're going to be looking at how do we make use of part of the system, some folks know very well, and some folks go, what's that config packages. And in our developer section, I had a special request from somebody, and I'm totally on board with it, to go into what the heck is Docker? And how can I get started to use it? So let's go. All right, there we go. My clever workaround, streaming Dhaka was not being particularly responsive. So sorry for the delay there. For those of you were not aware of the Swedish environment that I find myself in, we had a holiday weekend last weekend. So there was no episode last week, you didn't miss anything. And let's talk a couple of new zine bits that are useful, we won't spend too, too time, too much time on this. There are some things going on. Business Central had a new version drop in the beginning of April. since I've last on my podcast, there was a launch event. And what that is these days is a live keynote, followed by a variety of recordings by different people on the business central team, showing how things have changed and what's all the new stuff. There's almost always value to that. And I would definitely encourage people to check that out. A few other industry bits and pieces, some of the European conferences, because I'm here, it's what I pay attention to. Some of the European conferences have been selecting and starting to book up some of their different sessions, days of knowledge in mid June, has selected a variety of their sessions. And I imagine that agenda is going to be published pretty soon. But the people who have been selected including myself have started talking about what their sessions are and what you'll see for that. That is in Denmark, in mid June. But if you look on the directions for partners.com website, you'll find all the info about it. And along those same lines, BC tech days, and Antwerp is in September, that one is starting to select a lot of their workshops and sessions as well. I'm looking greatly forward to doing one is one of their workshops. So that's going to be all sorts of fun. Just as a quick recap for people who maybe haven't had the chance to pay attention to some of the different conferences that are going on, who's the target audience, all that sort of thing. Days of knowledge in mid June is run by the same people run directions and map directions for partners. It's a lovely conference, I'm told it'll be my first time going. So I'll report back when I have more sense of what it is. But the BC tech days in September, I've had the pleasure of attending that in the past. And that is a deep dive technical event. Very heavy on the year slides better be two or three long let's dive into the code and actually get some hands on. Those are fantastic. And one of the things that they had added a long while back is there was a lot of demand for we're going to be traveling and all in the same place anyways, is there any chance we could have some specialized like full day long sessions to talk about some of the deeper topics and whatnot. And those are the pre conference works updates. They're not an option. But they're a great option, you'll find that a lot of the MVPs are teaching on particular different topics. There are two pre conference workshop days, and you can book one or the other for different topics usually. So I'd encourage you to check that out. And then there's also direction to mafia in November, which is going to be in Germany this year. And that one, from what I understand is the big doozy of the EU conferences in that it is something for everybody sort of event. So that's at least a rundown. There are definitely some events going on in North America as well, which I am not as attending. So sorry for folks on the western hemisphere. But I know direction. Dynamics con has their live event later this year in Texas. But yeah, so just wanted to share that those are things going on in the community. So diving into talking a little bit about things. I know, there are lots of great discussions about impostor syndrome in many other industries. And I haven't really seen us talk too much about that in this space. And I've even seen that the people who came up with the terms are a little dodgy on if we should be using the phrase the way that we've culturally adopted. Because oftentimes, there's differentiation between Is it the anxiety a person feels about being public and participating in a space, versus the way the space is structured to include and more importantly, exclude people. So the publishers of the original works that talked about that, they found that a lot of times imposter syndrome is used to explain a way when people say, for example, people of color or for women, any sort of people who feel like they're part of an out group feel anxiety that they're within this group, that's not necessarily a sign that it's an anxiety within them. That could be the actual infrastructure is stacked against the people. So they found it a little frustrating that impostor syndrome is sometimes used to gloss over the fact that no, really the the space is stacked against an outgroup. So that's not their anxiety. That's them being perceptive. So there's, there's two different parts of that, from what I've seen of the community space. From, you know, I'm, I'm a white engineer guy. And, you know, our industry has a lot of those. And, you know, acknowledging the fact that that somewhat is a fairly privileged space systemically, historically, that I can't speak to how well is the space geared towards acceptance of others. However, I'm hopeful, based on the reactions that I've seen to people who are currently in groups of folks who are not well represented in the space have continued to participate and engage in this space, and I see people publicly welcoming them. So I'm hopeful that their experience of that so far is very positive. I know there are a lot of great people coming into our business Central Community in the past few years, that are bringing a lot of new energy, of acceptance of expanding that participation. And I'm very, very thankful for it. I'm very pro diversity inclusivity. And I think it's fantastic that, you know, for example, there is the women in Dynamics pledge that was started by the directions for Partners Group, I believe it was started by but I know they're, they're helping make it loud. And that's a very good thing. Because frankly, some of my favorite MVPs I've gotten to know over the past year or so are definitely women who are out and and speaking and being just wonderful and sharing info. And that's, that's the thing. We need all those different perspectives. So there's The systemic side of things of making sure we're making room and space and accepting and welcoming people, I hope that people are experiencing that welcoming environment. That's that's what we should be doing. I know, for example, BC tech days, as part of paying attention to the gender disparity issue, they read put out the call for submissions for sessions, a little while back, because there were very few women who were presenting in that deep technical space. It is true that at the moment, most of the people I know who are deep technical programmers, are men, and a lot of my favorite implementation, do the work of solving, you know, how do we how do we go about doing our business, or women, and I don't know if that's representative of long standing challenges and whatnot. So it may have been that there are not as many implementation consultative sessions that are presented at Tech days. And so it doesn't feel like it's as good of a fit. I hope it's as simple as that, just the experience and the inertia of history on that one. And that will be able to fix that. I am definitely not saying that. I don't know any women developers, but they are not an out an active part of the loud community at the moment. So we'll see. So swinging that back around from the systemic side of the space, we also have the experience internally, the anxiety part of things. I know, for example, several of the people that are either relatively fresh MVPs, who have not been MVPs before, or some of the people who are just participating loudly in our space, and just doing a general great job of trying to share their knowledge and their wisdom. They definitely have told me, you know, it feels very intimidating. And I know what they mean. I find it super surreal, that and I and it's been like this for years. And I still find it surreal. There are people that I've looked up to for a decade in this space who have been, you know, the kind of people that I'm in a room with 800 people watching them explain something and share their opinions and their thoughts and their feelings. And some of those folks I talk to on a regular basis now. And they look to my opinion and value my feedback. And that's, that feels really super weird. So if you're the sort of person that you can feel that you can relate to that, like, oh, my gosh, this person is, you know, somewhat famous in our industry, and I'm nervous about talking to them or holy, holy heck that that person is talking to me. Yeah. The thing about is, is that almost everyone that I know that's in the space that has developed that sort of fame and reputation has done so because they're a kind and sharing person. So it's something to think about that. We all are trying to do the same thing. We are we're all trying to work with a business system and make sure that customers are able to use in a way they need, that there might be varying degrees of this person is an expert in these things. There might be varying degrees of this person could put on a conference and fill a room with, you know, 1000 people, okay, this person might be up on stage during a keynote. Yeah. But odds are good. There are things that you know, that they don't know. That's just how life works. And it's super hard, for sure. And, you know, I recommend to people all the time that you, for example, should blog on topics and share your own experience, share your own knowledge. I think I talked about it in a previous episode of it doesn't really matter if you are sharing or blogging about a topic that has already been talked about. Because everyone puts things in different ways. And you never know where you're going to be that aha moment for somebody. Or there's a fantastic XKCD comic of You know, every, every day, you know, one of 10,000 people learns about a thing that everyone just knows, well, it's never a bad thing. It's just an opportunity of yeah, you're the you're the, you're the one of the 10,000. Today who's learning about a thing for the first time, you never know. So from the perspective of you feel like you don't have anything to add or contribute, you never know that that's true. It's why I often prefer to teach people into the industry. In smaller groups. I know that a couple of other partners and Solution Centers that tend to work with training people up, take the same approach of teach in teams wherever possible, because it gives a sense to someone just starting out. They're not the only one with the struggles these confusions. If you pair a junior person with a senior person, or if you are a junior person at an organization, you're the only one and all of the things you're reading. And learning from and seeing all these different streams are people who are deep dive experts for 20 years, it's really easy to feel far, far behind. So wherever possible, as partners, it's a great thing to pair up people who are starting out or even if you're not like a complete newbie at ERP systems or development, it's still very much a good idea to make some friends in the industry who are kind of learning the same things that you're learning. If you're if you're, you know, the only person in your organization, that's a relative, rookie, you're not alone. There are lots of other people who are relative rookies. If you go, for example, to the AOL guidelines project, where there's all sorts of patterns and stuff like that, there is a link to the discord. And one of the things I like about that space is that it's easy and natural to transition from talking to a whole group full of people, which is the whole server. We've got great channels for, you know, no stupid questions, and Al beginners and just ask, you know, we've all been stumped by something stupid and small. But it's very easy to transition from having those conversations with people in that space to having direct communication with folks as well. So matchmake a little bit if you're feeling alone, if you're feeling like I'm way behind everyone else, you're probably not. So the flip side to that, for those of us who are experts and that are have been around for a really long time, is to also try very hard to encourage, not discourage. For example, you know, whenever I go, Oh, hey, I've talked about that, too, to someone who shares about something, it's saying, absolutely, you know, to me, welcome, you're you and I are thinking on the same wavelength. I love that you, you went there, that, to me is a great thing. We had a wonderful and silly discussion on Twitter about you know, the fact that business Central is UTF compatible means that you can use emojis and cow emojis in the fields, company names, user names, all sorts of places, you can make the system look really downright scary, using just emojis for that sort of thing. And you know, someone rediscovered that, you know, it was something I had talked about a year and a half ago. And it was very much a like, Oh, I'm glad someone else is coming up with that crazy idea. So be careful if you're an experienced person in making sure that what you come across, when you say those sorts of things is it's awesome that you've come here with me. I'm glad Welcome aboard. It is super easy. When someone writes a blog post about say like, the calc formulas for date formulas and what what can you do with that close a month, beginning of year plus 30 days, lots of us have blogged on those topics. So you have to squash that impulse that might say, oh, yeah, I wrote about that to hear and you know, share that link. That's that's not an encouragement. That's a That's it comes across as a discouragement like oh, yes, I've I've spoken about that. Well, good. Now there's more resources again, with the way you put things might be different, or just, you know, many people are looking on these different pieces of information are trying to sift through through search engines that aren't always going to be cooperative, and you never know what's going to come up for someone who's looking for something might be yours. But I'd rather I'd rather there be 30 blog posts about how to figure out the date formula logic and Business Central and all the shortcuts that you can do about it. Because then it's far more likely that someone's going to find those answers. So do that, do the thing. You are absolutely going to be providing value to somebody, even if it's just your future self of you know, two years from now you go, Wait a minute, I wrote myself some notes on that in the form of a blog post. I'm, I'll go look at my own blog. I actually had to look it up. I think it's this week up coming. That 11 years ago was the first day I ever wrote a blog post for Business Central. So yeah, I don't know if that helps anyone who's struggling with some of those impostor syndrome Eve sort of anxieties. I hope that gives us all as a community a little bit of food for thought of like, how do you make the space a little more welcoming, and more encouraging? We'll see. So all right, well, with that, the topic I was going to talk to today for my consultative perspective, which is why I started a little bit late was deprecated. So it was such a delightful example of the you can be an expert in things, but the things you know, are always in motion. Don't feel discouraged that it turns out the thing, you know, isn't relevant anymore. And, yeah, there were two or three different parts of things that I went to go look at and work with in the new version of BC 2022, wave one, version 20, there are two or three different parts of the system, I went to look forward today, and I couldn't find them. You are never alone. If you're like I'm, I swear this was here. So let's look today, I was going to talk about some of the different templating pieces in the system. But let's go into instead, we're gonna do screenshare, but I will be talking through it. So for those of you who are just listening along and audio, don't worry too much I will be talking it through. So what I wanted to talk to you about today, for consultative people is, if you're new to Business Central implementations, you will not likely have heard of Rapid Start. Rapid Start was a toolkit that went along with a methodology. And the methodology was the idea behind making getting started with business central system better getting started with Business Central, faster, more simpler. And with config packages, which was a part of the Rapid Start toolkit, there was a mechanism by which a user can more easily load data into the system. So what I wanted to talk to you today is the config package system. Because it is an area where a lot of times even people who are experienced BC developers haven't made use of it before. And I find myself a little surprised here and there. Because for little data sets for configuration setups, and things like that, it is a handy little tool to be able to more quickly provide setups or master data and be able to potentially create some different scenarios for things. So what the heck am I talking about? Well, I am going to do a separate live stream sometime in the very near future to talk about overall implementation processes and methodologies. There are a couple of people I'm chatting with that. We're going to do that as a shared session, where there's more than just me. And that'll be its own episode. But the config package part of the system is it is a user configurable set of import and export tools that can work against any component in the system. So what do we mean by that? Well, for those of you who are following along on video, I stream this on Twitter and YouTube Live just for the people who are up and about at Sunday morning for the Central European Time. But you can watch the video versions on YouTube as well. But I try to make sure that this is a friendly space for audio listeners as well. The config package environment is a way that you can define what they call a package. And a package contains a list of which tables do you want to import or export into or out of the system. And within each of the tables that you select from throughout the system, you can choose which fields you want to have come in or come out. This is a really easy way. For example, if someone asked you, you know, hey, I need a list of all of the customers and items or I need all of the contacts, you can quickly and easily create an Excel file out of these things. And just have only the fields you want, including fields that aren't on the UI. So you could go to like the contact list and hit the Share to Excel button in version 20, or open an Excel and depending on what version you're working with whatever have you, you could do that. But the nice thing about this is you can apply some filters to it you can select which fields do you want and which order. So for example, if you're working with a customer that's implementing, like an order fulfillment or requisition system, and they need an initial seed list of vendors that are in the system, well, you could create a config package that provides the vendor fields from Business Central, and you can tweak which which order those are going to come out in. Additionally, the config package system is very, very helpful when you're implementing a system for the first time. Because you can import master data. So let me on screen for a sec. We'll go ahead and create a customer package. And what we do is we just name it to customer has a nice easy thing. And when we look at the lines of the config package, the line, it's a very sales order II sort of page in that we've got a header and we've got lines, the lines are the tables. And if we do a look up arrow to the table ID, we will see that we get a whole list of all of the tables in the system. Now, because this is something that you're using as a configuration, it is not code driven. So this looks at your current system as it stands right now. And what that means is that it includes all of your extensions. So if you have three or four different ISV solutions, you've got a couple of per tenant extensions, all of those tables are still available in this list. It's whatever is actively in your system at the time, you can import and export from here. So in my case, I'll choose my customer table. And then to see here, when I select the customer table, it'll ask the you know, some fields have related tables, do we want to check them? I'll say yes, on that. And it gives us the option to say okay, well, it knows that there are some relations to, for example, the postcode table, that we might need to have some related stuff. And it just lets you know that there are some connections. I'm not sure what the entire logic on that is, the customer has a lot more related tables than just the postcode table. There's customer posting groups, there's, you know, all of the discount fields and payment terms. So I'm not entirely sure what the logic error is on that. Once we've selected the table, one of the neat things about this is right off the bat. With the table selected, we get a variety of columns that are filled in. It shows us that there are 96 fields available and by default, all 96 fields are included. Interestingly, it also shows the number of database records so we know that in our environment right now The Customer table has 96 fields on it. And there are five customers currently in the database. So if you ever need in versions before version 20, if you needed a quick record count of how many items do we actually have in our system, this is one of the fastest ways you could get that info in earlier versions of Business Central. These days in version 20, they added back an old friend, table information. Just as a quick aside, in version 20, a table information lets you look at all of the data across all of the companies based on the table number and number of records. This is a relatively new thing that well, it's new to be back in business central the information has been here the whole time. It is one of the ways that professionals in our space will potentially look at how big is the database, for example. And that use intention is reflected by the fact that when we open up the table information, now it is by default, sorted by size descending. But we can filter this on any table and go okay, I see. You know, for example, here micronas, World One, the customer table, table number 18. I've got five records. So there's a couple other ways you can get the info now. But this is still pretty fast as far far as ways to get that. Now, for each table that we've selected on the config baggage card, one of the options in our menu here is that we can, for example, we can just view the database data. And that will open the customer list. Okay, that doesn't help us a whole lot. But we can also click on fields and see what are all of the fields that are in the customer table. This Configuration UI is the same sort of idea, it will show you all of the extension fields that are in your environment as well. So And by default, it's going to show it to you by a thing called a field ID it's which field number. And you can see in when you open up this list, that we've got some columns for if the field should be included. In this configuration package. We also have a checkbox for validate field. And we also have something called a processing order. By default, if we expand this out, we also get checkbox off to the right that I like a whole lot called Create missing codes. So this field UI depends a little bit on if you're importing or exporting what, what you need to care about. If you're exporting, say, for example list of all of your customers and whatnot, then really the only thing that we need to worry about on this screen is if the field is included in the export, and what the quote unquote processing order would be in the sequence of things. That'll drive what it results in the layup. So real quick before I go too far, deep into the weeds on this for those who are following along a video, you I'm going to show you what the Excel looks like. So here in the tables menu with that customer selected, you'll notice that there's an Excel menu where you can export to Excel and import from Excel. There's also an export to Excel and import from excel in the main ribbon. So there are two different levels, you can import and export one does the whole package. And the down in the lines does just the individual table that you're looking at. So I'm going to click on my line level export the selected table to Excel. If we pop this open, this will create an export that not only does this contain all of the same things that we would get if we sent the customer list to Excel, but it's going to contain every single field that is on this table. So we get lots and lots of stuff. So the nice thing about doing this from here is we could right now just click on our next row and say we want to add a customer 60,000 And we can add a whole new record to this little data set from the Business Central side of things. Save this and reimburse We're doomed, the table could even have been empty, totally brand new empty, and we could save it and re import it. So if I save that and close it up, if I go to my import from Excel and choose that file, which hopefully, let's grab where the heck that is grab you. We can import from Excel. And now, that number of package records column, this is letting you know that the data has been brought into kind of a holding tank. They call it package records. But effectively, there's a nice staging area, the data is now in the system. So if you're in the cloud, it's now in your cloud copy of Business Central and other people can look at it. And you can drill into it and take a look at the data behind this. So now we could go through and scanned all the columns, make sure that everything brought in correctly. And we can see that it is potentially bringing in the five customers I already had. And it's bringing in that six throw that I added at the end of my Excel file. None of these are alive in the system, if I were to go look at the customer list, I would not see customer 60,000. These records are just being held. And I then have to apply the data to the database. And that can be done either from where we were looking at the package records by drilling down on the number of records, or up in the main config package, we can click the Apply Package button. And that would then apply. These days, they even added a notification to things that once you hit that import from Excel or whatever button, the notification up top will say that configuration package has been imported, you now need to apply it just because that is a common forget like, Oh, I didn't really think about that. So talking import side, there's some things to be aware of. What would happen right now is I exported that to excel, and I re imported it with all of the existing records that were already in there. If I exported that a month ago, and someone in my business central system was fixing addresses, for example, on all my customers and they've updated a lot of customer information, what I import now, if I were to apply those, this will overwrite all of those changes. So you do have to be very careful with config packages, because you can damage your database environment, it is always always always a good idea to spin up a sandbox, or copying company to test depending on if you're in SAS or on prem. If you're on prem, spin up a test company or do it in a test environment that's been configured for you. Because there's a few settings on here that are a little dangerous. One of the options that is on our table line is we've got this frightening little checkbox, delete table records before processing. Well, if I have that checked, what it's going to do is delete those five customers that are already in the database, and then try to import my six. Well, here's the thing, what if that six the row I've added has a validation problem and doesn't doesn't do what it's supposed to or worse, we've, you know, created an invalid bit of info across all of those imported customers. Well, those five records are going to be gone and the new ones won't be imported correctly, they're going to throw an error. I now have a business central environment where there are no customers anymore. They're all gone. So this is a powerful, powerful tool, but it can be a dangerous one. So in whatever mechanisms you can do test, test test and make sure you have whatever backups you can so that you're doing this carefully. On the import side of the fields list. We I mentioned that exporting we mostly care about include field. On the importing side we also have the Validate fields checkbox and we also have the Create missing codes. checkbox. Validate field means that it will run the validation The same as if we as a user, you know, say for example, ship to code, if I punch in a ship to code into that field that defaulted. The validate field runs that same logic. If I uncheck it, I could put bad data in there. Sometimes that's necessary, maybe I'm importing my customers first. And later, I'm going to import my ship two codes, but I still need the field to be populated. Well, you might need to shut off that validation. This is one of those danger checkmarks. And then additionally, that create missing codes is a similar sort of idea. For example, on this city field for the customer, we have a table relation ID to the postcode table. Well, maybe you're importing your customers for the first time and you don't have your postcodes configured yet, what that crate missing codes checkbox will do is it will create the minimum viable record in postcode, it'll just generate them for you. It's an interesting option, there can be some value to that. It can also kind of clutter up things. So for example, maybe there's just someone did a typo and customer posting group. If you check the crate missing codes on the customer posting group, you may only get that typo empty record. So that's the, in a nutshell how some of the different pieces work, you can additionally configure lots of different tables in here. And when you're going to run this for a batch of tables, the main option that I will usually use is in the main header, we have export package and import package. These will create instead of Excel files a dot Rapid Start file, since that was originally what it was part of. And this is going to be just something that contains all of the info for this particular configuration package plus the data. So it generally speaking, by default, will include all of the configuration options. So if you've got delete tables, records before processing, you've shut off some validations, all of that info, by default will be included in that Rapid Start file. So then you can in your production environment or over in another customer environment. However, you're migrating your data around you, when you import that rapid starter package, it will by default, bring in all of the config stuff. And then you can when you do the import, it brings the data in with it. And then you can apply data, you can also pre run all of the validations using a validate Package button up in the action bar. This is usually a good idea. It'll let you know if there's any errors in any of the tables and give you a nice viewable list. So for example, if someone's forgetting important fields, that's super helpful. Alrighty, let's see last little bit of caveat before we move off of this topic. Config packages can take a while, depending on the volume of data that you're dealing with. My usual threshold in my head is if a table that I'm importing to or exporting from contains more than, say about 5000 records, I usually instead, especially if it's going to be something I'm going to run more than once, I will usually instead consider that to be a scenario where a developer should help make an import or an export specifically for that larger table. That seems to be a common break threshold for a lot of these mechanisms that are generic toolkits, including my own data braider product, is once you start going into several 1000 Plus records, you start to feel the processing slow down from the generic tools like config packages and stuff like that. It is still possible. But just be aware that, you know, I've done config packages this year, on an on prem that had a really beefy SQL Server behind it and was doing 17,000 records and you know, it can still take good an hour to and in that same time period. For my own testing I made. I made an import and export tool in the development tools and did another table that was 50,000 records and the time to make the tools plus the export and then import took less time than the config package. So be judicious and how you UCS. But these are also fantastic ways to create reusable data sets. So if your company does a lot of work with the same type of customer, you might find there's great value in to having, you know, postcodes config packages ready to go. You know, if you're going to create a sandbox environments prior to go live, and you want to just update all the customers from the test environment, well, you know, this can be a great way to do that. So hopefully that is of use to folks. And Alright, let's talk a little bit about Docker. There's this little one's a heavy tech concept. And, you know, in case anyone was even slightly unsure, none of these are pre planned, or pre tested. So hopefully, everything works well. I've got a little box in my environment that I use for testing of things, running odds and ends and whatnot. And what I'm using on that space at the moment is a version of the Docker tool set called Docker desktop. Now, there are a few flavors of Docker in the world, they have different limitations, different ways of working with them. Going into some of the licensing implications of those is beyond my scope of today's talk through. But I know that Docker desktop is free for small organizations. And then there is a small monthly fee, if you start going beyond a certain number of users. It is an honor based licensing system. But you should be doing things the right way. There are flavors of Docker, you can be running on Windows Server, that are not Docker desktop. But in my case, I'm going through this today using Docker desktop on just a Windows 10 machine. Because I think that reflects how a lot of the people who've been asking me for some basics around this would work with this. So in my environment, I've got a variety of different Docker containers running. But let me rewind a smidge for those who are brand new to the concept of what the heck is a docker. Effectively, it is a virtual machine engine, it lets you run simulated versions of environments. So the reason this has become popular is one it does so in a method that unlike Hyper V virtual box, it becomes very easy for those virtual images to share resources and makes them a little lighter weight. Additional Additionally, it is easier for people like the team behind Business Central to make a what they call a kind of a baseline. So say for example, I don't recall off the top my head, but I believe that the Docker images are based off of a Windows Server, they can make kind of a baseline Windows Server Docker image. And then on top of that they can stack. And I'm sure I'm getting the terms wrong, they can stack layers of things, I believe those are called artifacts, they can basically stack different BC versions on top of that. And so when you download a Docker image to create, say, BC 19 versus BC 20, your system already has the underlying image that they built it off of. And we'll make use of that. And so now you can quickly just get kind of the different BC versions or different regions and all that sort of thing. It can be pre built by the Microsoft team, and your system will go out and get those things for you. Well, so that's the idea is that effectively these Docker images, you the image is a template and you create what is called a container a running instance of that image. So in my case, for example, I've got a specific BC image that is BC 20. I think this one might still be the preview bits for the worldwide one region called Docker dash BC 20 dash W one. The docker desktop does provide some small amount of usability for a UI, in that it will show you a list of the running containers on your machine. And you can stop and start those from the UI However, when it comes to creating business, central Docker containers, you're going to need to do some stuff with PowerShell. Now, the folks behind this, Freddy and his team have made some things that help make that process simpler. And that is the VC container helper. I will do, I'm actually going to bring open there is a cheat sheet I love to use comes right up pretty quickly. But Freddy, over at Microsoft helped create this beautiful BC container helper set of PowerShell tools. And that is something that lives on GitHub. So some of you are already going to be going, oh, man, we're talking PowerShell. We're talking GitHub. What What else has gone on? Don't Don't stress. First of all, this cheat sheet, which I'll put a link to in the show notes, for anyone. This cheat sheet contains a really simple, how do I install the BC container helper in PowerShell? How do I update the BC container, helper module, and all that sort of thing. So there is some great stuff to the BC container helper of what should I be doing? In my environment, I've already got that installed. So I'm not going to show the install module command here, just will do the steps of creating that. For those of you who are brand new to PowerShell, what you're going to want to probably use out of the gate to make your life a little bit easier is the PowerShell is E interactive script environment, I think as the terms for that comes pre installed on most environments. For those of you in the know, the PowerShell. ISC is, I believe deprecated. Eventually, I think they're encouraging us to go Visual Studio Code. Anyways, the PowerShell is easy, you want to run this as administrator, it needs to be run in an elevated environment, you'll run into error messages if you do not run this elevated later. But once you do the install module BC container helper, if you're working with IOC for the very first time, you're just gonna get this little blue command prompt, and with a command window off to the right like this. And that's kind of all you get, it doesn't seem like a whole lot is going on here. That's fine. The magic happens with the fact that as I start to type my new dash BC container, it provides IntelliSense, it does a little drop down. And one of the commands that is starting with a new dash BC is a new PC container wizard. For most of you, this is going to be your friend. This will help you create a brand new container in a guided UI, and do all of the work for you as much as it can. So I'm going to run that and what it will do is it's going to initialize things, and it will pop open this new interactive window. Now, real quick here before I let this whole process go through, I have definitely found there to be issues with Windows Defender some time steps in and goofs up the PowerShell, not the PowerShell they the Docker containers from being created initially. So before I proceed to create a new container, I will always go check the virus and threat protection settings in Windows and shut off Windows Defender. I don't know what specifically about creating the containers, it runs into an issue. But I temporarily turn that off. I do turn it back on when I'm done because you know, Windows Defender does pretty good job for me. Alright, so the very first thing you'll get the question of is Do you accept the End User License Agreement? I do. That's fine. It gives you a link to go read it. The next thing it will ask you is do you want to create a local container or an Azure virtual machine. So you can use this container wizards. This is create helping you create a script, you could theoretically build a virtual machine to run an Azure using this. That's cool. I'm going to take the default of a local container and then in ask a question of what level of authentication Do you potentially want to use? The options here are generally Speaking with Dockers, you want to use username password authentication. That way you just automatically you get the login prompt, it is theoretically possible to use Windows authentication with Docker images. And I think you can even use Azure Active Directory what Docker is, but that's well beyond the scope of the basics. What I typically tell people who are asking me for the first time how to use Docker is I will say use the link username password authentication, and use the default where the username is password and the username is admin. And the password is this p at SS W zero rd. That is the standard for just Docker since they are out of the box. They're only reachable from your local machine, there is no security considerations for this. But do bear that in mind that if you're working with real customer data, you may want to change this if you're you know, replicating some customer configurations and working with them. But again, it's local access only. So I'll take the default. And we're going to give the container a name. By default it assumes BC server which if you've noticed in some of the past Visual Studio Code episodes, when we create a new extension, it assumes when you're working with a local environment that you're working with something named PC server. And this is the flip side match to that, I'm going to create this one and call it just JDBC. And I typically will put what version the container is in the name of it. So JDBC dash v 20. And because I work in lots of different regions, I will also say what region this is. So my case, I'll add dash, let's say us, okay, and then it next will ask for what version, you can get the latest business central sandbox. So to be in parity with cloud, you can get the latest business Central on prem, which will be in parity with what has been released for cumulative updates. If you are a partner, you can also have a an access token that allows you to get the next major next minor and this is part of being able to develop your solutions to be future proofed. So on the next major, for example, right now, version 20 was just released a few weeks ago, there is already a version 21 On the next major release pipeline. So you can also request specific older versions. So if you needed to develop for a customer that was on BC 14 For some reason, you could absolutely select from this version list, a specific Central Business Center on prem build, and then you would fill in what version you'll notice two in the list, when you bring this up that it will have what version a few now versions as well, I think I'm not really showing my screen in the best way here. This, this font is very small. So I apologize if the video quality on this is a little bit dodgy. Hopefully, those of you who are watching on YouTube see it, okay. But in my case, I'm going to select the latest business central sandbox, that's fine. And that will keep me roughly in line with the current cloud version. I'm gonna see while I'm at this, if I can bump up my font size of this terminal window, so that way, people following visuals have a little bit better of a chance, sorry for not thinking about that sooner. All right, after you pick which version, it will tell you on the next screen that you need to pick which country and in the header here, it also tells you precisely down to the build level what version your Sandbox is going to be. So we can see that I'm going to get some variation on 20. So that's cool. And you can see the long list of all the country codes that you can potentially work with. So if you needed to see, you know, I'm gonna be doing some support for a customer that's in Germany, I could go ahead here and select the appropriate one. And that way I get all little localizations. For example, I have a customer in Switzerland, they have some banking things that are specific to Switzerland. So I could spin up a Swiss Docker and see what those differences are. I'm going to take the US and amuses me that that's the default here. I'm surprised worldwide one isn't the default. For those of you who are not familiar with the different region codes worldwide one is kind of considered the base version of Business Central and then Now all of the variations on top of that go from there, I'm a little unsure in here, what base is as differentiated from worldwide one. But that's alright, so I'm going to take us, for those of you who are going to be working with testability, you will need to install the test Toolkit, which is the very next question that we get. And I am not going to do that for this particular machine. That's fine. Also, don't think of Docker containers as a server, you're going to keep around for months, try to think of them as a little bit more of a testing and development. utility that you're potentially going to want to be able to quickly and easily throw away and build a new one, you know, like, I'm working with a particular sandbox version right now. Well, I, if I'm going to do this for a project that's going to go live in June, well, I would want to make sure I throw away this one and build the new one in the end of May to be a little closer to what they're actually going to be going live with just to make sure there's nothing that breaks. So I'm going to throw no test toolkit on this. Additionally, you can choose, you know, if you're using premium plan, which covers, you know, manufacturing, it's I believe service, do we want to create additional test users in the environment, I don't in this case, but if you wanted to be able to test, you know, like, for example, the team member permissions and those sorts of things, you would be able to create those. It's also going to ask if you want to modify the base application. If you're not sure what that means, then you do not want to do that. So no. And also lets you know that it will include a specific version of the extension for Visual Studio code in this container if you need. This is very helpful. If you're working with next major. Oftentimes, there is a preview version of the next major al language extension included in that container. So you may need that. In my case, I'm not so I'm just going to say New. And here on the next question and ask you licensing, do you want to use the default Cronus demo license? Or do you want to use a local license to file in my case, I've got a license file ready to go. You can use the default Cronus if you have not got a license file, and that will work. So you know, absolutely, you can just leave this blank, which is the default, I'm going to go ahead and put in a real license. And then we can specify if we want to use an existing database, restore a database backup, or if we want to use a Cronus database, I'm going to use a Cronus database. If you are working with Sam, if you're working with on prem versus cloud customers, a lot of on prem customers are not multi tenant, they are typically single tenant installs. If you don't know what I mean, then by default cloud, assume cloud equals multi tenant on prem equals single tenant. In my case, I'm developing for a cloud customer, I'm using sandbox, so I will assume that I want multi tenant, yes. And then additionally, there's some fiddly bits here where we can use some DNS settings and SSL settings, we can use isolation settings, these are all deep technical topics that I'm not going to go into because I'm already a little over my target time, I am accepting the default on all these by just hitting enter, we can configure the memory limits for the Docker container. If we need to, I'm gonna leave this as default. And then if we're going to run this multiple times, we can potentially save the image, I don't usually do this, it's fine. And then finally, we get to the last stage here, which is the PowerShell script. What all of this wizard was doing for us is it was creating a separate PowerShell set of commands a PowerShell script that we could run to create a container. We can here at this stage, enter a file name to save that somewhere. And we'd be able to run this over and over again or send to our consulting team to run this on their environment and have the exact same Docker I do. Okay, well, that's pretty cool. And for those of you who are a little PowerShell savvy, you'll notice what it's doing is it's initializing a bunch of variables with the settings that we've selected, and then it runs a new BC container command, providing a bunch of those variables and a bunch of the switches that we've selected along the way. I'm going to skip saving this because I don't feel like I'm going to rerun this multiple times at the moment. And when we skip the saving by hitting Enter, I then asked us do we want to execute this script, and this is the magic, I'll say yes. And now it's going to cruise along and create this brand new Docker container for me. And you'll see that what it does is a bunch of different steps here, it's going to look at my environment ago, okay, you're running Windows 10 enterprise, you're running Docker client version, this, and it will go out to Microsoft's repository and say, Alright, based on what you've told me, I'm going to go ahead and go get this particular sandbox, this particular build for this region. And I'm going to download that to my local machine. So this generally takes it can take any variable amount of time, it's days, after all, downloading a whole bunch of zip files of you know, the entire business central infrastructure. So based on your bandwidth, it can take a little while I'm for my environment, I usually see about 1015 minutes. If I were to rerun this right afterwards, to create a second container with all the same settings, it would take about a minute. So mostly, it's the download that takes the time. Okay, so in what a few minutes, what it will then be possible to do is on this local machine in this environment, I'd be able to open up using that container name. And at the moment, I'll get an error message. But I should be able to using that container name, open up a browser, and do HTTP colon backslash, slash slash, the container name, slash BC. And I would get myself right to the login screen on that. There are some quirks to that depending on if it's multi tenant or whatnot. But what it will also do for us at the very end of the script, it will create a variety of shortcuts on your desktop for you. And the Docker shortcuts on the desktop it will make is it will make one that allows you to run a command prompt inside the container. So as if you're running it on this virtual machine, a PowerShell. That's as if you're on the container. And most importantly, it will give you a web client link that will open up the web client to go directly to that instance. So and it will fill in all the different things for you and your password, your user is going to be admin. And if you chose the same defaults I did, it'll be that funky password sort of thing. And bam, you'll have yourself a fully functional business central sandbox environment. Be aware if you're working with this with power platform that this is on your local machine. Power platform does not see this. That is one of the differences between running Docker versus running full sandboxes in the Microsoft Cloud ecosystem. You can still potentially work against this. Because API's are something that people often need. There are absolutely API ports open on this, but you as power platform, people would need to access them via API calls or via HTTP, rather than using any of the built in Business Central connectors. So that's something to be aware of. Okay, well, that brought us a little over time, but hopefully that will be useful chunk of info for a bunch of different people. All righty. Wow. That was a journey, everybody, for sure. So we talked about community, making the space welcoming to new people, and how to feel welcome as new people. We talked about the config package systems of how to get info out of the system, how to get info into the system and all the warnings and caution blinking signs that come along with that. And lastly, we in 1520 minutes, spun up a brand new Docker environment to be able to do development and configuration testing work with. I hope this has been helpful. I'm going to be updating the website with a A map of all of the different topics and things like that, so that people will be able to search these up. And great. Well, I hope everyone enjoys this and we'll be back next week. Take care of everybody and have a good one.