JV B/C Podcast E4: Imposters and Community 

In this episode, Jeremy talked about community, making the space welcoming to new people, and how to feel welcome as new people. He also talked about the config package systems of how to get info out of the system, how to get information into the system and all the warnings and caution blinking signs that come along with that. And finally, Jeremy, in 1520 minutes, spun up a new Docker environment to be able to do development and configuration testing.

Listen

Pre-Intro Talk

Good morning, everyone. And welcome back to the JV BC Podcast. Today we are going to be talking about the old imposter syndrome and community. Because I do not think we have talked about that much in our little Business Central ecosystem. And then from the consultative side, we are going to be looking at how to make use of part of the system, some people know very well, and others would wonder what config packages are.

And in our developer section, I had a special request from somebody, and I am totally on board with it, to go into what Docker is, and how I can get started to use it? So, let’s go.

Talking about Imposter Syndrome and Community

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 did not miss anything.

And let us talk a couple of new bits and pieces that are useful, we will not spend 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 have last been 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 am here, it is 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 will see for that. That is in Denmark, in mid-June. But if you look on the directions4partners.com, you will find all the information about it.

And along those same lines, BC Tech Days and Antwerp are in September, that one is starting to select a lot of their workshops and sessions as well. I am looking greatly forward to doing one of their workshops. So that is going to be all sorts of fun. Just quick recap for people who may have not had the chance to pay attention to some of the different conferences that are going on, who is the target audience, and all that sort of thing.

Days of Knowledge in mid-June is run by the same people who run and map directions4partners. It is a lovely conference. I am told it will be my first time going. So I will report back when I have more sense of what it is. But in regard of the BC Tech Days in September, I have had the pleasure of attending that in the past. And that is a deep dive technical event. Very heavy on the “your slides better be two or three long, let us 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 are 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 are a great option. You will 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 would encourage you to check that out. Then there is also Direction EMEA 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 is at least a rundown.

There are definitely some events going on in North America as well, which I will not be attending. So sorry to the audience on the western hemisphere. But I know Dynamics con. has their live event later this year in Texas. Just wanted to share that those are things going on in the community.

Now, 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 have not really seen us talk too much about that in this space. And I have even seen that the people who came up with the terms are a little dodgy on whether we should be using the phrase the way that we have 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”.

The publishers of the original works that talked about that 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 outgroup 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 stacked against the people. Thus, they found it a little frustrating that impostor syndrome is sometimes used to gloss over the fact that the the space is stacked against an outgroup. As such, that’s not their anxiety. That’s them being perceptive.

Consequently, there are two different parts of that, from what I have seen of the community space, speaking as a white engineer guy, our industry has a lot of those cases. And acknowledging the fact that that is a somewhat fairly privileged space, systemically and 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 have seen towards people who are currently in groups of people who are not well-represented in the space have continued to participate and engage in this space, and I see people publicly welcoming them. As such, 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 am very, very thankful for it. I am very pro diversity and inclusivity. And I think it is fantastic that, for example, there are the women in Dynamics pledge that was started by the directions4partners Group, I believe it was started by but I know they are helping make it loud. And that is a very good thing. Because frankly, some of my favorite MVPs that I have gotten to know over the past year or so are definitely women who are out and are speaking and being just wonderful and sharing information. And that is the thing. We need all those different perspectives.

Also, there is the systemic side of things of making sure we are making room and space and accepting and welcoming people, I hope that people are experiencing that welcoming environment. That us what we should be doing. I know, for example, BC Tech Days, as part of paying attention to the gender disparity issue, they 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 deep technical programmers are men, and a lot of my favorite implementation, do the work of solving, as to how do we go about doing our business, are women, and I do not know if that is representative of long-standing challenges and whatnot. So, it may have been that there are not as many implementations consultative sessions that are presented at Tech Days. And so, it does not feel like it is as good of a fit. I hope it is 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 do not know any women developers, but they are not an active part of the loud community at the moment. So, we will see.

Now, swinging that back around from the systemic side of the space, we also, internally, have the experience, 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 have definitely told me that it feels very intimidating. And I know what they mean. I find it super surreal, and it has been like this for years. And I still find it surreal. There are people that have looked up to for a decade in this space who have been the kind of people that I am in a room with 800 people watching them explain something and share their opinions and their thoughts and their feelings. And some of those people I talk to on a regular basis now. And they ask for my opinion and value my feedback. And that feels really super weird.

So, if you are the sort of person that feel that you can relate to that, like, this person is somewhat famous in our industry, and I am nervous about talking to them, or you feel overwhelmed that that person is talking to you. The thing about it is that almost everyone that I know that is in the space that has developed that sort of fame and reputation has done so because they are a kind and sharing person. Is as much, it is something to think about. We are all trying to do the same thing. We are all trying to work with a business system and make sure that customers are able to use it the way they need, that there might be varying degrees of this person as an expert in these things. There might be varying degrees of this person who could put on a conference and fill a room with, about 1000 people. And this person might be up on stage during a keynote. But odds are good.

There are things that they do not know. That is just how life works. And it is super hard, for sure. And, I recommend all the time that people should, for example, blog on topics and share their own experience, share their own knowledge. I think I talked about it in a previous episode. It does not really matter if people 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 are going to be that moment of understanding for somebody. Or there is a fantastic XKCD comic of one of 10,000 people learns about a thing that everyone just knows, it is never a bad thing. It is just an opportunity of for a person to be the one of the 10,000 who today is learning about a thing for the first time, you never know. So, from the perspective of feeling like you do not have anything to add or contribute, you never know that this is true.

This is 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 are not the only one with these struggles and confusions. If you pair a junior person with a senior person, or if you are a junior person at an organization, you are the only one and all of the things you are reading, learning from, and seeing all these different streams are people who are deep dive experts for 20 years, it will be really easy to feel far, far behind.

Thus, wherever possible, as partners, it is a great thing to pair up people who are starting out or even if they are not like a complete newbie at ERP systems or development, it is still very much a good idea to make some friends in the industry who are kind of learning the same things that you are learning. If you are, the only person in your organization who is a relative, rookie, you are not alone. There are lots of other people who are relative rookies. If you go, for example, to the AOL guidelines project, where there are 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 is easy and natural to transition from talking to a whole group full of people, which is the whole server.

There are great channels for no stupid questions, and AL beginners and just ask, because we have all been stumped by something stupid and small. But it is very easy to transition from having those conversations with people in that space to having direct communication with people, as well. So, matchmake a little bit if you are feeling alone, if you are feeling like you are way behind everyone else, but you probably are not. As such, 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 instance, whenever I say “I have talked about that, too” to someone who shares something, it is saying “Absolutely, welcome, you and I are thinking on the same wavelength. I love that you went there”, and that, for me is a great thing.

We had a wonderful and silly discussion on Twitter about the fact that if Business Central is UTF compatible it 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 someone rediscovered that it was something I had talked about a year and a half ago. And it was very much like “Oh, I am glad someone else is coming up with that crazy idea.” Thus, be careful if you an experienced person in making sure that what you come across, when you say those sorts of things like “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, for example, the calc formulas for date formulas and what one can do with that; close a month, begin a year plus 30 days; lots of us have blogged on those topics. So, you have to squash that impulse that might say you have already written about that and then share that link. That is not an encouragement. It rather comes across as a discouragement and a put down.

Now, there are more resources, but with the way you put things might be different, and many people who are looking on these different pieces of information are trying to sift through search engines that are not always going to be cooperative, and you never know what is going to come up for someone who is looking for something which might be yours. But I would 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 is far more likely that someone is going to find those answers.

So, do your thing. You are absolutely going to be providing value to somebody, even if it is just your future self of maybe two years from now and you say to yourself; “Wait a minute, I wrote myself some notes on that in the form of a blog post. I will go look at my own blog.” I actually had to look it up, and I think it is this week upcoming, that 11 years ago was the first day I ever wrote a blog post for Business Central. I do not know if that helps anyone who is struggling with some of those impostor syndrome sort of anxieties. I hope that gives us all as a community a little bit of food for thought of how to make the space a little more welcoming, and more encouraging.

Using Config. Packages in BC

With that, the topic I was going to talk about today for my consultative perspective, which is why I started a little bit late was deprecated. So, it was such a delightful example of how you can be an expert in things, but everything is always in motion. Do not feel discouraged that it turns out that what you not is not relevant anymore. And, 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, that I look forward today, and I couldn’t find them. You are never alone if you think that “I swear this was here”.

So, I was going to talk about some of the different templating pieces in the system. We are going to do screenshare, but I will be talking through it. So, for those of you who are just listening along and audio, do not worry too much I will be talking it through. Now, what I wanted to talk to you about today, for consultative people is, if you are 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, simpler. And with configuration packages, which were a part of the Rapid Start toolkit, there was a mechanism by which a user can more easily load data into the system. As such, 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 have not 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, you must be wondering what it is I am 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 am chatting with about that. We are going to do that as a shared session, where there is more than just me. And that will be its own episode. But the configuration package part of the system is a user configurable set of import and export tools that can work against any component in the system.

Consequently, what we mean by that is that, 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 configuration package environment is a way that you can define what they call a package. And a package contains a list of which tables 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 asks for a list of all of the customers and items or a list of 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 are not on the UI. So, you could go to the contact list, for instance, and hit the Share to Excel button in version 20, or open an Excel and, depending on what version you are working with, you could do that.

But the nice thing about this is you can apply some filters where you can select which fields you want and in which order. For example, if you are working with a customer who is implementing an order fulfillment or requisition system, and they need an initial seed list of vendors that are in the system, you could create a configuration package that provides the vendor fields from Business Central, and you can tweak the order in which those are going to come out in. Additionally, the configuration package system is immensely helpful when you are implementing a system for the first time, because you can import master data. So, let me on screen for a second.

We will go ahead and create a customer package. And what we do is we just name it “Customer”, a nice and easy thing. And when we look at the lines of the configuration package, the line is a very sales-orderly sort of page in that we have got a header and we have 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 are 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.

As such, if you have three or four different ISV solutions, you have got a couple of per-tenant extensions, all of those tables are still available in this list. It is whatever is active in your system at the time, you can import and export from here. Thus, in my case, I will choose my customer table. And then to see here, when I select the customer table, it will ask that some fields have related tables, do we want to check them? I will say yes to that. And it gives us the option to say okay. 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 am not sure what the entire logic on that is, the customer has a lot more related tables than just the postcode table. There are customer posting groups, there are all of the discount fields and payment terms. So, I’m not entirely sure what the logic error is on that.

Once we have selected the table, one of the neat things about this is, immediately, 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. Consequently, if you ever need, in versions before version 20, a quick record count of how many items 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 sidenote, 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 is 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. For example, here is CORONUS World One, the customer table, table number 18. I have got five records. However, there are a couple other ways you can get the information now. But this is still pretty fast as far as ways to get that.

Now, for each table that we have selected on the configuration package card, one of the options in our menu here is that, for example, we can just view the database data. And that will open the customer list. That does not 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. And by default, it is going to show it to you by a thing called a field ID, it means which field number.

And you can see when you open up this list, that we have got some columns for whether 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 whether you are importing or exporting what you need to care about. If you are exporting, for example, a 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 will drive the results in the layup. As such, I go too far deep into the weeds on this for those who are following along a video, I am going to show you what Excel looks like.

Here in the tables menu with that customer selected, you will notice that there is an Excel menu where you can export to Excel and import from Excel. There is 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 down in the lines does just the individual table that you are looking at. I am going to click on my line level, and export the selected table to Excel. If we pop this open, this will create an export that not only contains all of the same things that we would get if we sent the customer list to Excel, but it is going to contain every single field that is on this table.

Consequently, we get lots and lots of stuff, and the nice thing about doing this from here is we could 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 re-import it. The table could have been even 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 is a nice staging area, the data is now in the system.

Therefore, if you are in the cloud, it is 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 it. So now we could go through and scan all the columns, make sure that everything is brought in correctly. And we can see that it has potentially brought in the five customers I already had. And it is bringing in that six throw that I added at the end of my Excel file. None of these are alive in the system, and 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 configuration 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 it is common to forget. So, talking about the import side, there are some things to be aware of.

What happened is that I exported the information 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 have updated a lot of customer information, what I import now, if I were to apply those, would overwrite all of those changes. Accordingly, you have to be very careful with configuration packages, because you can damage your database environment, it is always a good idea to spin up a sandbox, or copying company to test, depending on whether you are in SAS or on prem.

If you are on prem, spin up a test company or do it in a test environment that has been configured for you, because there are a few settings on here that are a little dangerous. One of the options on our table line is we have got this frightening little checkbox, delete table records before processing. If I have that checked, it is going to delete those five customers that are already in the database, and then try to import my six. But what if that sixth row I’ve added has a validation problem and does not do what it is supposed to or worse, we’ve created an invalid bit of info across all of those imported customers. Those five records are going to be gone and the new ones will be imported correctly; they are going to throw an error. I now have a Business Central environment where there are no customers anymore. They are all gone.

Hence, this is a powerful tool, but it can be a dangerous one as well. In as much, in whatever mechanisms you can do, test and make sure you have whatever backups you can so that you are being careful. On the import side of the fields list, I mentioned that what we mostly care about when exporting is the include field. On the importing side, on the other hand, we also have the Validate fields checkbox and we also have the Create Missing Codes checkbox. The Validate field means that it will run the validation the same as if we were a user, 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 is necessary, maybe I am importing my customers first. And later, I am going to import my ship-to 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 are importing your customers for the first time and you do not have your postcodes configured yet, what that Create Missing Codes checkbox will do is create the minimum viable record in postcode, it will just generate them for you. It is an interesting option, there can be some value to that. It can also kind of clutter up things. Therefore, for example, maybe someone made a typo in customer posting group. If you check the Create Missing Codes on the customer posting group, you may only get that typo empty record.

Hence, in a nutshell, this is how some of the different pieces work, you can additionally configure lots of different tables in here. And when you are going to run this for a batch of tables, the main option that I usually use is in the main header, we have export package and import package. These will create a dot Rapid Start file instead of Excel files, since that was originally what it was part of. This is going to be just something that contains all of the information for this particular configuration package plus the data.

Thus, generally speaking, by default, will include all of the configuration options. And if you have got delete tables, records before processing, you would have shut off some validations, all of that information, 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 are migrating your data around you, when you import that rapid starter package, it will bring in all of the configuration stuff by default. 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 will let you know if there are any errors in any of the tables, and then give you a nice viewable list. For example, if someone forgets important fields, this is super helpful. Now, let us see the last little bit of caveat before we move off of this topic.

Configuration packages can take a while, depending on the volume of data that you are dealing with. My usual threshold in my head is if a table that I am importing or exporting contains more than about 5000 records, I usually instead – especially if it is going to be something I am going to run more than once – 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, i.e., once you start going into several 1000+ records, you start to feel the processing slow-down from the generic tools, like configuration packages and stuff like that. It is still possible, but just be aware that I’ve done configuration packages this year, on an on prem that had a really beefy SQL Server behind it, and was doing 17,000 records and it can still take an hour or two, and in that same time period, for my own testing 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 configuration package. So be judicious in how you use these, 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 is great value in having postcodes configuration packages ready to go. You know, if you are going to create a sandbox environment prior to going live, and you want to just update all the customers from the test environment, this can be a great way to do that. So hopefully that is of use to people.

Dev Basic: Making a Docker container

Let us now talk a little bit about Docker. This one is a little heavy tech concept. And, in case anyone was even slightly unsure, none of these are pre-planned, or pre-tested. And hopefully, everything works well. I have got a little box in my environment that I use for testing things, running odds and ends and whatnot. And what I am 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 am 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 have been asking me for some basics around this would work with this. So, in my environment, I have got a variety of different Docker containers running. But let me rewind a little for those who are new to the concept of what a docker is.

Effectively, it is a virtual machine engine which lets you run simulated versions of environments. The reason this has become popular is:

  1. 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.
  2. It is easier for people like the team behind Business Central to make what they call a kind of a baseline. For example, I do not recall off the top my head, but I believe that the Docker images are based off of a Windows Server, and they can make a kind of a baseline Windows Server Docker image.
  3. On top of that, they can stack, I am sure I am getting the terms wrong, but what I mean is that 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 BC 19 versus BC 20, for instance, your system already has the underlying image that they built it off of. And we will make use of that. Hence, now you can quickly 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.

And the idea is that these Docker images, the image is a template and you create what is called a container – a running instance of that image. In this case, for instance, I have 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-W one.

The docker desktop provides 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 are 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 BC container helper. I am actually going to open there a cheat sheet that I love to use, it 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 maybe complain that we are talking PowerShell and GitHub and maybe wonder what is going on. Don’t stress. First of all, this cheat sheet, which I will put a link to in the show notes for anyone to use, contains a really simple, explanation of how to install the BC container helper in PowerShell, and how to I update the BC container, helper module, and all that sort of thing.

To this extent, there is some great stuff to the BC container helper to explain what one should do. In my environment, I have already got that installed. Thus, I am not going to show the install module command here, will just do the steps of creating that. For those of you who are new to PowerShell, what you most probably want to use at the beginning to make your life a little bit easier is the PowerShell ISE – interactive script environment, I think is the terms for that. It comes pre-installed on most environments.

For those of you in the know, the PowerShell. ISC is, I believe, deprecated. Eventually, I think they are encouraging us to go Visual Studio Code. Anyways, the PowerShell ISE, you want to run this as administrator, it needs to be run in an elevated environment. You will run into error messages if you do not run this elevated later. However, once you do the install module BC container helper, if you are working with IOC for the very first time, you are just going to get this little blue command prompt, and with a command window off to the right like this.

And that is kind of all you get, it does not seem like a whole lot is going on here. Magic happens with the fact that, as I start to type my new-BC container provides IntelliSense, it does a little drop down. One of the commands that is starting with a new-BC is a new BC container wizard. For most of you, this is going to be your friend. This will help you create a new container in a guided UI, and do all of the work for you as much as it can. So, I am going to run that and what it will do is initialize things, and it will pop open this new interactive window.

Now, really quickly here before I let this whole process go through, I have definitely found there to be issues with Windows Defender; it sometime steps in and goofs up the Docker containers from being created initially. Accordingly, 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 do not know what it is specifically about creating the containers that runs into an issue. But I temporarily turn that off. I do turn it back on when I am done, because Windows Defender does a pretty good job for me.

Alright, so the very first thing toy will get the question of is “Do you accept the End User License Agreement?” I do. That is 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 helping you create a script. You could theoretically build a virtual machine to run an Azure using this. That is cool. I am going to take the default of a local container and then it asks 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 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 with Docker, but that is 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 to use the username password authentication, and use the default where the username is admin, and the password is this p@ssw0rd. That is the standard for just Docker, since they are out of the box. They are only reachable from your local machine, there is no security considerations for this. But do bear that in mind that if you are working with real customer data, you may want to change this, if you are replicating some customer configurations and working with them. But again, it is local access only. Thus, will take the default.

We are going to give the container a name. By default, it assumes BC server which, if you have noticed in some of the past Visual Studio Code episodes, when we create a new extension, it assumes when you are working with a local environment that you are working with something named PC server. And this is the flip side match to that. I am going to create this one and call it just JDBC. And I would typically put what version the container is in the name of it. So JDBC-v20. And because I work in lots of different regions, I will also say what region this is. So, in my case, I will add -US.

And then it 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 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.

Hence, 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 will notice, too, in the list, when you bring this up that it will have a few now versions as well. I think I am not really showing my screen in the best way here. This font is very small, and I apologize if the video quality on this is a little bit dodgy. Hopefully, those of you who are watching on YouTube can see it. But in my case, I am going to select the latest Business Central sandbox, that is fine. And that will keep me roughly in line with the current cloud version.

I am going to see, while I am at this, if I can bump up my font size of this terminal window, so people following visuals have a little bit better of a chance, sorry for not thinking about that sooner.

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 am going to get some variation on 20. And you can see the long list of all the country codes that you can potentially work with. Thus, if you needed to see, I am going to be doing some support for a customer that is 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 am going to take the US, and it amuses me that this is the default here. I am surprised worldwide one is not 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 now all of the variations on top of that go from there. I am a little unsure in here, what base is as differentiated from worldwide one. But that is alright, so I am 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. Also, do not think of Docker containers as a server you are going to keep around for months, try to think of them as a little bit more of a testing and development utility that you are potentially going to want to be able to quickly and easily throw away and build a new one.

For instance, I am working with a particular sandbox version right now. If I am going to do this for a project that is going to go live in June, 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 are actually going to be going live with just to make sure there is nothing that breaks.

So, I am going to throw no test toolkit on this. Additionally, you can choose, if you are using premium plan, which covers, manufacturing service, do we want to create additional test users in the environment? I do not in this case. But if you wanted to be able to test, for example, the team member permissions and those sorts of things, you would be able to create those. It is also going to ask if you want to modify the base application. If you are 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 are working with next major.

Oftentimes, there is a preview version of the next major AL language extension included in that container. So, you might need that. In my case, I am not, so I am just going to say “No”. And here on the next question is about 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 have 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. You can just leave this blank, which is the default. I am 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 am going to use a Cronus database. If you are working with Sam, if you 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 am developing for a cloud customer, I am using sandbox, so I will assume that I want multi-tenant, yes.

And then additionally, there is 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 am not going to go into because I am 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 am going to leave this as default. And then if we are going to run this multiple times, we can potentially save the image. I do not usually do this, it is 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. At this stage, we can enter a file name to save that somewhere. And we would 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.

And for those of you who are a little PowerShell savvy, you will notice what it is initializing a bunch of variables with the settings that we have selected, and then it runs a new BC container command, providing a bunch of those variables and a bunch of the switches that we have selected along the way. I am going to skip saving this because I do not feel like I am going to rerun this multiple times at the moment. And we skip the saving by hitting Enter.

It then asks “Do you want to execute this script?”, and this is the magic, I will say yes. And now it is going to cruise along and create this new Docker container for me. And you will see that what it does is a bunch of different steps here. It is going to look at my environment ago, “You are running Windows 10 enterprise”, “You are running Docker client version”, and it will go out to Microsoft’s repository and be, based on what you have told me, I am going to go ahead and get this particular sandbox, this particular build for this region. And I am going to download that to my local machine.

This generally takes any variable amount of time, it is days, after all, downloading a whole bunch of zip files of the entire Business Central infrastructure. So, based on your bandwidth, it can take a little while. 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 is the download that takes the time.

Thus, in a few minutes, it will be possible to do is on this local machine in this environment. I would be able to open up using that container name. And at the moment, I will get an error message. But I should be able to use that container name, open up a browser, and do HTTP: //container name/BC. And I would get myself right to the login screen on that.

There are some quirks to that depending on whether it is multi-tenant or whatnot. But what it will also do for us at the very end of the script is create a variety of shortcuts on your desktop for you. And the Docker shortcut on the desktop it will make is one that allows you to run a command prompt inside the container.

Thus, as if you are running it on this virtual machine, a PowerShell, that is as if you are 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, 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 will be that funky password sort of thing. And bam, you will have yourself a fully functional Business Central sandbox environment.

Be aware if you are working 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. And that is something to be aware of.

That brought us a little over time, but hopefully that will be useful chunk of info for a bunch of different people. 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 information into the system and all the warnings and caution blinking signs that come along with that. And finally, we, in 1520 minutes, spun up a new Docker environment to be able to do development and configuration testing work with.

I hope this has been helpful. I am going to be updating the website with a map of all of the different topics and things like that, so that people will be able to search these up. Well, I hope everyone enjoys this and we will be back next week. Take care of everybody and have a good one.