The first half hour or so, Jeremy is going through thinking through all of the different expenses, the way you need to market yourself the time that you are going to be spending on producing product. Think about all those different pieces, make sure you are valuing yourself correctly. He also covers the customer card and some basics just to cover at least understanding the structure of things, how to look at the templates of it. And finally, he got back to Visual Studio Code environment, where he talks about the basics of page markup language.
- 0:00:00-0:00:43 Pre-Intro Talk
- 0:00:43-0:01:19 Intro Music
- 0:01:28-0:34:38 Doing the math of what you should charge
- 0:34:38-0:47:42 A tour of the Customer Card
- 0:47:42-1:10:52 Page Design – Layout vs Code
- 1:10:52-1:12:37 Outro
Hello everybody, and welcome back to the JV B/C Podcast. Today, we are going to talk about value, and we will go through some of the thought process of how you market yourself price-wise, and think about all the different things you should be considering for the consultative section. Today, we are going to be diving into the customer and vendor card a little. We will talk about templates, and will get back to the development side of things. We are also going to talk about the strange and wild world of page design. So stick around.
Interesting, I thought I had gotten rid of the crazy swiping sound effect thing there, but continue to evolve the platform.
Doing the math of what you should charge:
Alright, so I got a fun question that I definitely wanted to take on. I have worked in a number of different capacities in the industry development and consultative and all those different pieces. And I was asked the question of how should I price myself. And that led to a pretty in depth conversation. And I realized that we do not really talk about that much in our space. There are some really useful utilities when it comes to looking at what the market is willing to pay for employees in the industry.
There is a something I refer to fairly often because they have access to more information than anywhere I would ever be able to go. The Nigel Frank salary survey breaks down different areas of the dynamics family, by the different regions and roles. I do not think anyone else has as comprehensive a worldwide reach into all of the different aspects of the the industry for figuring out salary. And you know that is always a tricky question right now, especially with the fact that more and more people are hiring around the world, and someone who lives in Manhattan has a very different financial needs than some of the people who are enjoying lower cost of living spaces.
There is a lot of digital nomads right now that are working remotely in all sorts of places throughout Southeast Asia. Portugal is very popular right now. And a variety of countries are really excited to start to attract some of these digital nomads for that reason; they earn money from out of country and bring it local. And it makes sense.
But your financial need does not drive your worth. So it gets into that challenging place as an employer of why should I pay for someone who has a higher need if they are remote anyways. So, that gets into its own challenge. But that is a bigger industry thing than we are going to be able to cover in this little tiny nook of the world, but we can, however, definitely look at a person’s worth, and that can be tricky.
The very first thing that I always tell people to do is to take the time to figure out what they need. Understanding what other people charge in the industry is valuable. If it turns out you need €50 an hour, from a need perspective, and the markets willing to pay you €100 an hour? Well, you would be a fool not to take the €100 an hour for sure. Or even maybe meet someone partway and they think they are getting a great deal. As such, there is what the market is willing to pay, but you should know what your floor is. I also think a lot of people who start out as an independent person who have never worked independently or freelance before, do not know how to calculate their floor. So that is what I wanted to dive into for a little while today.
You are going to hear me typing a little bit, I am going to be screen sharing some Excel. But we are going to be talking at all through. So, do not worry, if you are listening to audio only then you will definitely still see. I mean you will still hear all the stuff we are talking about.
The very first place that I go to, which a lot of independent people do not think through, is you have less time than you think. It is very easy to do the math, for 40 hours a weekthat is my time basis. If you do the simple math on that, you are going to get a very lovely looking number. So, if we look at in an average year, if we look at the number of weeks per year, and let us say our 40 hours per week, then we get this lovely 52 times 40 equals 2080. That is my basis for how much I need to do my math on right? No.
Those of you who have worked freelance before, or just managed an organization, or even at department, will be saying not to ever base on that. Well, let us talk about why. First of all, let us say how many vacation weeks per year you want to have. If you are trying to do this for yourself, you probably want to lean towards the heavier side. And cultures vary. Here in Sweden, for example, it is pretty standard to give 5 weeks per year, which I know is towards the deeper end of the pool. In US companies I have seen as low as 2, I am going to just arbitrarily pick 4 for some basis to call it.
But you also then go okay, well, that is easy enough for that just reduces a little. No, you are not done yet. If you are working for yourself, there are also holiday seasons. And typically on average, you will probably find anywhere from about five to 15 holiday days per year, you do not want to be factoring and working on Christmas, for example, if you celebrate Christmas. There are plenty of other holidays for lots of other faiths. We just had one last week for… the name eludes me. There are a variety of faiths to have a variety of holidays, there are also cultural holidays, you got to factor all that in. I am going to call it 10 for the purposes of our math, so for our weeks per year, we are losing another two.
And unless you are the most amazing, healthy person on the planet, and you have never caught a cold in your life, you are going to need to also factor in that you do not get to pay yourself when you are sick. So you got to factor in sick weeks per year as well. Well, and also if you are currently blessed with small children, or that is on your near future, do not forget to factor in the fact that you having a small child in your house allows for every disease that goes around. They have a very underdeveloped immune system, they catch everything, it grows nice and strong in them, and you are bombarded with every part of it. As such, if you have children double this number, until they are about 10. Realistically, just something to be aware of, I am going to just put in sick week per year, we will just do 2 . So we have now got vacation 4, holiday 2, sick 2.
You are also going to as an independent person need to do accounting work on a regular basis that maybe you are going to be super efficient at and you do not need to meet with an auditor, you know how to do all the filings and all that sort of stuff. And it will only take you an hour. That is lovely. I envy you. I have done this a lot of times in a lot of different parts of the world. I have run US shops, I have had US employees, I have run Swedish shop, and I have had Swedish and Danish employees. There is no amount of efficiency that is getting some of these things down to the level that they should be. And even just meeting with an accountant to review everything, you are going to lose some time. I usually treat this in the aspect of approximately a day out of each month – you will lose to some of the administrative work of doing all of your filings.
We already dropped out eight weeks, so that means two months are gone. So I will use a basis of we are going to have accounting overhead for weeks per year, we are going to have another two weeks disappear because that is 10 more working days just gone. If you were being smart about how you are operating in the space, you probably also want to do do cool stuff like, attend conferences, even if they are virtual conferences, you are probably going to want to go to those. If you are lucky enough to afford, because you should be budgeting for this, if you are lucky enough to afford to go to some of the conferences in your region, or even outside of your region, it is very easy to lose a week or two to conference seasons, because you are going to potentially need to do stuff. So there goes another 2 weeks.
I think that is a pretty good basis of things to be thinking about on all the different parts that you are going to lose. Now, if we think about this, this is about 12 weeks that are just gone. So total actual weeks per year is going to, in fact, be our 52 minus the sum of all of these previous ones. Which brings us up to 38 weeks per year. This is a whole different ballgame of hours per week, right? So, let us look at hours per week on 38. It is too early in my morning, I am not going to do any math, I am going to trust the Excel doc.
Thus, now we are down to roughly 1500 hours. 1520 to be exact. Now that we have already lost a quarter of the year to just stuff. That is an entire quarter, just gone. Just going through this exercise was a huge eye opener for a couple of the people I have talked to about how to budget your time and do your value basis, because they think of the 40 Hour Workweek. I have some pet news for you who are already starting to do the math in your head on 1500.
This also runs under the basis that on your workdays, you sit down at say 8am And you work eight hours, all billable. I do not know how many of you have had the luxury of having that happen. Two or even three days in a row, as a freelancer or in an organization where you work uninterrupted, eight hours, just straight billable, day after day. And imagine trying to do that over the course of an entire year, it is not going to happen. If you are lucky, and you are doing work with one big partner, and or one big customer or that sort of thing where you do not have to do sales efforts. It is relatively easy billing because you just send them one monthly invoice. If you are lucky, then you also get to charge for the times you spend in meetings with those people. That will be pretty cool.
And if you are lucky, you have got that big fat contract with one big partner, and or one big end user, whatever have you. And you also do not have to do sales and marketing efforts. Well, good for you, that is pretty great. Just as a side note, that is extremely dangerous. If they do not like you, if they get mad at you, then they withhold your payments. If you have only one big giant customer, you are going to be in a world of hurt at some point. If things just do not go perfect.
I have, as an independent, definitely worked with organizations where they consumed my entire working capacity. And I have had that turned into legal battles. And it was very expensive. And it hurts. You potentially need to have a huge cushion to be able to absorb the rainy day when you are working with one big partner or one big end user. So be aware that if you have the luxury of just having that great one customer, you need to be saving for if something goes wrong with that project, so that you have a cushion of one to three months to intentionally find a replacement for them. And a cushion that if you need an attorney, you can pay for one.
I have in my early days been in places where I did not have the cushion to pay for the attorney to go after the money they owed me because the money they owed me was the cushion that I needed to pay for the attorney. And I have also been in cases where I have won court cases against people that owed me money and they just bankrupted the company and I was given pennies on the dollar, as it were, and all of that just disappeared.
Consequently, when you are working freelance, you have to plan for if something with my best costumer goes wrong, what is my timeline on being able to survive without that. So, bringing this back around to the math bases, if we are looking at that wonderful, perfect world scenario, you get to build for all that odds and ends, you have a utilization rate that is a lovely, probably 80, maybe even 90%, we will call it 80%. So, out of a given eight hour work day, most of your time is billable, you only lose a little bit of time here and there to email nonsense, something like that. So we will call that the high utilization figure.
And if you are working with multiple organizations, you do your own sales efforts where you are blogging, you are marketing yourself, you are doing all these different meetings. I have been stung by estimating what something would take me in development hours, and then I spent more time after the development efforts, validating that there were no bugs in my code, then the time I spent doing the development work. So say it was 40 hours of development work. I have had projects that I have then spent after the contract was over more than 40 hours, with them calling me to say we found a bug in this meeting, go through it. It was not a bug, it was something that they were complaining about that they did not understand, that they did not read the documentation. And I gave them the recordings that we made of how to use it. I spent much more time on that. So my actual on that project was ghastly low.
It is way too easy as an independent person to think these are the hours that will take you, but there is so much stuff around it. So, if we want to be sensitive to those exact sort of scenarios, guess your utilization hours in that scenario is actually about 50%. So we have now got a couple of utilization high lows. Thus, if we call it a high hours per week, out of that 1520, then we get 80%, to 1520 is a little over 1200. If we have low hours per week, we then are much delightfully looking at 50% of that, that is only 760.
Imagine if you tried to build your budget on 2000 hours, and then your effective billable rate was way down near 1800. Or you would be getting three or four months into doing operations going; “Why can I make ends meet?” this seems like it should have been enough I priced myself. I thought, this is why if you are losing time to, I want to spend an hour here and there just reading about what is new in Business Central. I want to spend 45 minutes listening to a podcast about Business Central.
If these are things that you want to do that you cannot charge for that time, and you do not want it to eat into your personal time because it is professional development. That utilization low of 50%? And you will also, and this is a whole separate thing into which we will go in another session, maybe you also cannot plan these sorts of things. I worked for a number of partners who are like our resources. We are planning out their utilization rates and planning their projects and all the things that they need to do. We will aim for about 75% billable, and we will fill their schedule about 75%. Let me know how that goes when you get your first support case, and they do not want to work on it. Because four cases could take four, eight hours. Suddenly, all of that non-billable time that you had left open in their project schedule is gone for the whole week.
There is some dark arts and science to try to even figure out what you should be scheduling to happen in a given week. And when you start looking at these numbers you will be amazed. All right, we have already burned about 20 minutes, so we will see how much we get to in the second.
There are some other odds and ends that you should be factoring in. There are expenses; every three years you should be thinking about a computer, you probably should not be thinking about a business phone. If you are smart, you are in a place where the tax implications you should be running it as a business, not as a sole proprietor, you should be able to depend on your local laws to deduct a lot of things. That includes, for example, conference fees and travel if it is travel for yourself rather than travel for the customer. If you are working for the first time, you should be looking at wise business insurance. There are a lot of insurance companies that provide riders for things like if you are working out of your house, and someone manages to crash your car through your wall, and you cannot work for two weeks. Well, guess what a lot of insurances will actually provide for replacement wages.
Insurances can help any number of things that are completely beyond your control, it varies by what is available in your region. But those are all different things. So, on the computer front figure, I am going to do the math for the rest of this section in euros, just because it is pretty close to parity $2. So, that is kind of a one of the wider reaches, obviously, I am in Sweden, the currency is Krona, which is about a 10 to one ratio for euros. As such, it is kind of easy to do the math on things.
Thus, if you figure you are going to potentially need a desktop, maybe a laptop as well, because you should be able to be mobile, but you know that on a regular basis, you are working with things, you can on the computer front, you can figure you are going to spend maybe €2,000 on a desktop, €2,000 on a laptop, and they will age out every three years, roughly. So, that is 4,000 euros, divided by three across the three years, and you want to mentally break that budget into your monthly income, because we are going to do all these numbers on a monthly basis. So, €4000 divided by three divided by 12, that is your monthly Euro allocation towards that hardware. So, that is about €110.
You might spend €50 a month on a phone. Same sort of thing on the conference fees, maybe you are going to budget €1,500 for different conferences throughout the year. For travel, you are going to budget €2,000 throughout the year. Your insurance, maybe it is €50 per year. And I am just punching all these numbers in doing divided by 12. So, there is any number of other expenses, you can factor into this, you might, for example, really think smart about having accounting services help you call that €1,500 for the year or something like that. Pulling numbers out of nowhere, I have accounting people that I pay separately. So, it is a whole different thing.
You probably should have an attorney on retainer. Even if you do not make much use of them. Just if a partner gives you a contract, you probably should not be reading that just by your lonesome. That may mean, on the cheap side, you do not make much use of them. Call it a 1000 hours per year for an attorney. Again, dividing all these by 12 on screen just to get some figures on here. There are bits and pieces. There are a lot of other expenses you can be putting into this. But let us call that good enough for now.
And so, we are looking at your monthly expense just for some pretty basic, minimal list of things. We are looking at about €600 to €700 per month to be factored into things. Okay, now we know we have got a basis for what we look at for some basic expense. All right, and that does not include things like books or training or any number of other very smart things you should be spending on.
Well, now we get into 25 minutes into the episode we are finally getting to what you should charge for price. Well, it depends. So, what I will often recommend people do is start with your gross need. So, in your bank account as an individual, what do you need to have in your bank account every month to make your bills? Now just start with that number. And this will be a monthly figure where we are working on monthly, just adding that as a notation their gross need monthly. If so, let us say for example, you are just going to pick a whole number here. €5,000 a month. That is your gross need. Annual looks at €5,000 times 12. Which obviously 60,000. That is cool. Actually, I am saying gross need, but that is actually net need. So, I apologize call that early-in-the-morning brain power.
In as much, as a result of all of your things, you need to have €5,000 a month, that is your objective? I am not going into it this episode, but there are other aspects like, how much of that are you putting aside for a rainy day? How much are you putting into retirement because you are working for yourself? All those fun things, those are whole separate life planning questions. You should have a financial adviser, which is an additional monthly expense. So, say you need €5,000 a month.
Do not forget that we also have the expenses per month that we calculated up, and we will grab that from our other spreadsheet into here. So, our actual monthly need there already is a little bit higher. But here is the thing, most countries also have various forms of taxation. And you are going to need to know your local tax laws in a big way. In the US, for example, you have your income tax for the Federal, you might have state income taxes, you also have your own social security contributions. But in the US, you are also potentially going to need to pay self-employment tax. Or if you have incorporated your business, you are going to need to pay your corporate tax. Those all add up, you know, the tax rates sound nice and low, and all these expenses do get deducted from your tax burden. But there are still limits.
The same is true in Sweden, we have got a corporate tax on companies. We, as owners of a company, are often still employers and you have to pay your employer contribution on all your salaries plus your personal input, all that sort of thing. It varies wildly. I mean, you can potentially, with really good accounting guys, maybe get your tax in the US down to 20%. And in other parts, depending on how big your numbers get, you could easily find yourself in heavy tax countries, like the Scandinavian ones, where we do have the net tax can be higher. When you are paying all the parts of it. You could see it maybe all the way up to 50. I am going to arbitrarily pick about 40% taxes.
As such, we have to think about the tax burden monthly as well, which means that we need to take that number, that 5,000, and add 40% to really make sure that I am getting my revenue. So, probably about 7,000. Me, I might even pad this up because who knows what other odds and ends are going to come along. Hence, let us pad that up a little bit and call it 7,500. And that is actually our gross monthly now, 7,500.
So, we have got our gross monthly, and now we also have our gross annual number, which is just the €7,500 times 12. And now we have got €90,000 as our gross annual need. We have already gone the other way with our hours. You need to be making €90,000, and based on our hours before I need to be making €90,000 in 760 hours, not making €60,000 in 2080. Thus, I will often see people do the wrong thing where they say they need the €60,000 with no expenses factored in, and they need that to be based on their 2080 hours, which I just did my Excel formula in completely the wrong way. So, some would say they need their 60,000 divided by the number of hours. As such, they only need to charge the 30 euros an hour. That is their need. They might think they can charge 50 euros an hour and they will be making extra money, which is wrong.
So, from a realistic point of view, then what we need is probably about 90,000 euros. And we need to pull that off in 750 hours. So, if we take our 90,000 euros and we divide it by the 760 hours. There we go, we see that it actually, requirement-wise, is 120 euros. So, imagine if you had decided be a freelancer and did the math, and maybe just for safety’s sake, you set it at about €50 or €60 an hour. By the time you get into your second or third month, you will realize something is not right. Well, €118.42 euros per hour is a world of difference. So, you can see how you do your math bases, and how you think about how you value yourself, is a real big difference. And if you are lucky enough to instead of having those low figures, which is what I just did the basis on, if you instead take that high utilization rate, where you are managing to get more towards the 80 hours mark, you can take that €90,000 figure and divide it by your 1200. And you can see that €74 an hour is a safe-ish number. So, it gives you a sort of a better sense of what do you got to think about when you price yourself up. And you do need to be smart about this.
I did say, for example, it really is a smart idea to build your rainy-day funds, for yourself or for your organization, if you are multiple people. And you know, if you have got multiple people you are going to need to do this math for when you hire somebody to work with you. What is your benefit of working with them? What is their actual cost? And these are some of the things you have to think through in a similar process. The taxes are going to be very different with employees because you, as an employer, pay a percentage, but they pay some of that percentage too. As such, the tax rates are different.
So, I hope this helps people think through what they should be charging. Your numbers are going to vary wildly by what your financial needs are, what your local expenses are, you are going to have to assess what basis do you really want to have your annual figures on; are you leaning towards the happy rosy picture of 1400 hours? Or are you wanting to safety sanity check yourself down in the 700 or 800 hours? You got to think these things through and decide what makes sense for you.
So, with any luck, that was a useful half hour, food for thought for some people. This obviously applies to anyone trying to price themselves up. Nothing about this is BC specific. This is just straight, how do I value my hours. So, if you have friends who are graphic designers, web builders, any number of things where they charge clients by the hour, if they have been struggling or they talk about not being able to figure out how they should value themselves, point them at this. Nothing about this was BC specific.
A tour of the Customer Card
Speaking of BC specific, let us see if we can fit some content about BC into the next half hour since I went on for a good long while there. Today, we are going to talk about the customer card. So, let us hop on over to our Business Central environment. Do not worry, I am trying to pay very close attention to making this audio friendly. Which I do have some experience with. I grew up with a good friend of mine throughout my youth who was blind. So, we got used to working together.
So, let us talk a little bit about customers. And, and in tangent on that a little bit about vendors. We will see what we can cover in a good 15 minutes or so. The customer card has all sorts of settings on it. And some of them are brilliantly obvious. Some of them are just information pieces. As we have talked about in the past, we have got fast tabs. And every single fast tab on the customer card, I believe, has a show more just about you.
So, there are tons of pieces of info about a given customer that you will want to see right up. The minute you open it, one of the first things you have seen these days is a lot of balance and sales information. And you will see fast tabs for some of the basics like address and contact, you’ll see fast tabs for invoicing that has lots of information about how you are going to invoice them. You also have a section about payments, which has to do with them paying you, not how you pay them.
We had a fun Twitter discussion about the wonderful world of payments, there is a fast tab for some shipping. And there is also a fast tab these days for statistics, which is pretty nice. So, if we go into the General section, and we show more, we will see lots of information about like credit limits that we can do, we can assign which sales person, we can do some different controls on that address has all the things that you would expect it to right out of the gate with address and phone number, email, all that sort of thing.
It has connections to the built in Business Central CRM system in this fast tab as well, which is a whole little separate tour of its own. The invoicing tab has useful information, if you are doing business with new customers, this is one I am looking at in front of me is a worldwide one copy of the database so it is not localized to any particular regions. For example, when we look at the vendor card, we will not have the 1099 fields that the US version would have. And I believe the US version has a different field in place of a VAT registration number.
Anyways, in the invoicing, we also have the connections to the posting groups. General Business posting groups helped me see your system know how to connect when I make revenue from this customer by selling to them. Which GL accounts should that sales information hit the customer posting group hits, which accounts receivables should the revenue then be against, because you might, for example, have customers whose contracts are solid, and you do not have to worry.
Thus, you have an accounts receivable that is for sure. Or you might have customers that are a little more questionable. Like it is a struggle to get revenue from them, you have to do a lot of collections efforts. And you want to separate that out on your chart of accounts as accounts receivable questionable, which is a common practice if you deal with hit or miss customers, you would set different posting groups for those customers that you are not sure exactly the timing you are going to collect on them.
So, that is the super summary version of posting groups. You can also do “show more” on invoicing and change the currency code you deal with them in. You can also adjust a variety of different VAT elements and the payments fast time rent. Initially, there is only the payment terms. This lets you set up and configure for your organization all the different payment terms. For example, the common thing to do is net 30. You can also do “Due in the current month”. I have seen plenty of people who will do “Due by the end of next month”. There are lots of different ways you can configure the due date calculations for the payment terms, but that is where it comes from.
If you do show more on payments, you can also require pre payments. You can also have default methods by which they pay you by so when you write up an order, you know do they always pay via credit card, and you are going to see that revenue come in a different way. Lots of stuff like that. The shipping information, lets you choose some of the different pieces that you might do if you or your customer is multilocation.
As such, if you are an organization where you have a warehouse in one region and a warehouse in another region, you can pre-default anytime you are doing business with customers in region two. For example, if you always want to ship from your region to warehouse and you can have that default from here. If they are a customer that has multiple locations, you can set up ship twos, which we will chat in a minute, but you can define here your default ship two for this customer.
You can also decide settings like shipping advice, do you and this one, if you’re new to BC, and new to ERP that can trip you up shipping advice just means are we allowed to ship partially or only complete whole orders. That is all. A shipping advice, by default is partial, I believe, but you can choose complete to prevent the system from shipping parts. You can also control some different things around with shipping agents. There are plenty of customers that maybe have their own preferred trucking companies or something like that, you can control that there. So, there are lots of bits and pieces under the customer card just by itself.
If we look at the related action under Customer in here. And this is another place in the system where the action bar can use a little modification because in the action bar here, we have customer as a group of things right in the action bar itself. And then under related, we also have customers so sometimes describing these two people is a little bit of a challenge. For a given customer here under this related info, we can set dimensions. That needs its own episode.
We can set up bank accounts so that way we know which bank accounts the customer is paying from or if we need to remit a refund to them. How we want to do that this is typically required or needed for the electronic transfer type things.
Direct Debit mandates, that is a whole different thing that gets into electronic banking. And that is super regionalized shipped to addresses where you can set all the different locations, they might want you to ship to contact that connects you into the CRM side of things.
We also can set up item references. So, if the customer you are dealing with gives you an order, and they only do it with their part numbers for your stock, this is where you can put that mapping together for this customer. So that way your salespeople can easily take that order, maybe an Excel file or a PDF, or if you are working with faxes. Then you can punch in their item numbers and move right along. And then there are some alternate different pieces that get elaborated comments that you can track some info about the approvals, which is its whole thing.
We have got attachments that you can attach, like signed agreements with customers and store those in here. It is nice to have, but often there is more logical storage components, and document layouts. You can give people different formats for invoices, credit memos, all sorts of things. So, that is a kind of a general overview of some of the information about customers.
There are a lot of other pieces for customers that you can be doing with things; you can do invoice discounts, you can set special prices, you can set special line discounts, which can include all sorts of fun stuff like sales campaigns or quantity breaks. And there are also different things you can do around creating prepayment handling lots and lots of stuff around customers.
If we have a quick look at vendors, we will see it is a very similar structure to the card. It is a little more simplified, but same general idea if we look under the related vendor, we will see dimensions, bank account, contact order, and addresses as kind of akin to ship to but then comments, approvals. Again, item references, document layouts and attachments. So same sort of idea. And we also have the ability to set what items this vendor has for us, what discounts they will give us, and what their prices are. All that fun stuff. There is a lot more to cover about all those.
That was a 15 minute or less whirlwind tour of just what is on a customer card. Quick little extra thing, because it is super handy and super relevant. And a lot of people new to the system are not aware of it. If we create a new customer, it actually has the ability. And this is default configured by default in Kronos companies. But it will not be configured. If you create a new empty company, or you are working with maybe an upgraded one, you can have templates for different customers.
So, in my case, say I am going to pick a European customer, where is this coming from? Under the Actions menu, there is a function section, and in here there are templates; apply a template, and save as a template, which are all around the templating idea. If we look at the template list, we will see that is where this list of templates comes from when I create a new one, if we click on the assist Edit next to the code for that we can do the edit function. And you will see you get a card that looks like a simplified version of the customer card. This lets you set up a whole bunch of information to pre-fill for all of your different customers when they are created.
So, if you are creating things all the time, templates are definitely your friend. And you can. For example, if you are working with a large organization that has 1000 locations, and your team is chugging along, making all those, you can make the first one and then come under the action function to save as a template. If you are in an order, you may have noticed, if you are in an organization where people are creating customers left and right and you made two different customers in your system that are the same, or companies merge under that functions we also have that little merge with. I thought I would mention it since it is on screen. That is a pretty handy function where you can merge two different customer records together. And I will let you know what is going to happen around that. Well, these were at least some basics around customers.
Page Design – Layout vs Code
Using up our last 15 minutes or so of today’s session, a little on the development side of things. Let us talk about the wacky world of pages. So, coming back into our Visual Studio Code environment. Last time we were diving into development side of things, we talked about tables and how records work, and we explained that we are running some code and a code unit that was working with record variables and all that.
But how do we make a page? Pages are an interesting thing. And I think a lot of us in our space, take pages for granted around some of the weird behaviors that we have in pages, and it trips up new people. And we are at the point where we do not even see it. So, if I were to make a random new table that has a primary key of code, and description, and we made that text, this is an extension.
For those who are seeing a screen, I do use the new table wizard, which is coming from one of the Visual Studio Code extensions. I believe this one is the easy ale dev toolbox. That lets me just type in a grid of fields. And then I can make some value decimal, I can make a grid of all the different field names, their ideas, their settings. So, now I have got a very simple, very quickly, a table called sample text. And I have got a code field that description value, some sort of silly stuff like that. We do have to define a primary key. That is its own thing. So now we have got a sample table. But we do not have anywhere in the system that the user could go see this because we do not have a page for it. Well, let us make a page. I am going to do it from scratch rather than using any wizards. So, we will call this Sample Text Page.al.
There are all sorts of discussions and best practices around how you should structure your extension folders and how you should name your objects. And thus, how you should name your files. So, we will have a chat about that and probably next episode, because I think that’s a good thing to cover early. Okay, so a page object just like everything else in a URL. There are lots of snippets for it. For example, as I start typing page into this blank .al file, I get the IntelliSense popping up saying here is a page type, we could do page customization page extension.
If I, instead of typing page type T page, I am going to get all of the snippets from the Al language extension. And because I have Waldos, Visual Studio Code extension installed, I also get some of the different snippets from Waldo that if your IntelliSense pops open, and you just see the list of all of the different snippets, but you do not see the content of that snippet. On the right-hand side, when you mouse over the row you have selected, there is a read more, and you can preview what the snippet will look like. So, if I typed T page and did down arrow, I will see that it notes that is a page of type list. And on the Read More section, I can see it will make a new page with an IB a page name. And it is going to give us some properties and some basic layout, some basic actions, all that stuff. As such, I will make use of this snippet.
If we delete the ID and hit control space, if you have got the Al language, we will grab the next available object number in your range. But if you also have a URL object ID ninja, you will get that little pop up we had in the right, because we can potentially share our object numbering information with other people we are developing with to make sure we do not both make 5100. So, that is its own delightful episode. Thus, we will call this “sample text list”. And we got to put quotes around it. So, we will put some quotes around the name here. There we go.
Well will definitely have best practices talking about object naming. Looking at the anatomy of this page, object that we are going to be seeing here we are first line have, what is the object type? What is the object number, and what is the object name? That is your basic HTML structure. You will notice, too, that this is a funky little Markup Language. It is not JSON, it is using our Curly Braces for sure. But it is also not exactly a programming language. It is a kind of markup language. I will talk about why I am noting that. So, if we look in the Curly Braces, the very first thing we get is we get a list of some properties. These properties are different assignments.
For example, in the snippet, because we had taken the list type, it created line three as page type equals list with a semicolon at the end, because this is a semicolon ending Markup Language. If we mouse over any of these different properties, we will see some of the info from help. So, we see that page type is an option. It can be a card list, a role center, etc. We can click on Get help and it will drop us to the Business Central Help page for the page type property.
All of these little options here these are properties of the page and it knows that based on the fact that these are lines at this first level directly under the page, we have some required things like what type it is. We have application area and usage category which are worth their own discussion. But where we are getting the information pages are meant to display info from a table. So, the source table is equal to and we see that this the snippet automatically filled in table name. Well, source table eat goes table name, and table name is not valid.
So, it gets a real red underline on that. If we just do Ctrl delete that and do double quotes and then Ctrl Space, we normally get some IntelliSense. That tells us a little bit about what our options are. I stand corrected, no double quotes. If we do Ctrl Space here, and we grab, start to type the name of our object sample text, we get an IntelliSense drop down list of all the tables that it knows about. If you do not get this list, it means that your system has not downloaded symbols correctly.
Now, we have got an additional section under the page object that defines a layout section. If we collapse the layout section, we will also see that we have a section for actions. So, this defines this describes to Business Central, what we want to appear. You will notice this, this is not a WYSIWYG, What You See Is What You Get Page Designer, because we are just generally given some rules of how to describe to Business Central how it should render information. The reason for that is because, yes, we could potentially preview what looks like in the web client.
But there is also a tablet client, there is also a mobile client, this page type could be API, and then there is no UI. So, we have the responsibility to describe to Business Central what it should do with things. And it helps to understand that because you might get the question can I drag this around in the order of things? No, you are utilizing syntax to describe the sequence of things. So, in our layout, we are giving a whole bunch of descriptive information. And we are saying that within the area section of the layout, called content. And there are a lot more pieces of this.
If you look into the page type, there are specific areas. If we delete content, and we have just area open, open parentheses, close parentheses and do control space, we will see that we get the option to do are we doing stuff that is going to be in the content, or stuff that is in the fact boxes, so we are doing stuff in the content. And then within that area, what do we want to put in here. If we, after the curly brace do control space, we can see we can do some properties to the area. But these are then the valid different parts that we can put on to that content area, we can put charts, we can put fields directly on the content area, we can also put groups, which is what the fast tabs are, if you are doing roll centers, you can do Q groups, we are doing a list.
As such, we are doing a repeater part, we can also do a part, which is how you bring in other pages onto one page. For example, the sales order is a card, kind of a card type called the document, where we have parts that are fast tabs up top and then we have a repeater for the lines. So, our template gave us a repeater. And then we need to give that repeater a name. And then within the repeater we define the columns by marking up the field keyword. One of the things that I’ve seen trip up newer people working with things is when we’re defining a field and we say field, open parentheses.
The IntelliSense will show us that our tooltip the tooltip will show us that field takes two components. It takes a name, semicolon, and then an expression. The name here means the almost like a variable. It is actually the name of this field control. So, if we need to do programming against this particular displayed field, this is the name that we would use for it. Then the expression is where does it get the content of that field that it is displaying to the user? It is very common for the field name to be the same name as the content that we are getting.
For example, on our sample table, we had a description. We had a field called Disk option. So, it would be very common to have this field called description, and then a semicolon. And we do rec dot description, because we want to get the description expression field, from our current record of whatever is being displayed in this repeater. Then we do curly braces for that field object, and we set some properties on the field object. And if we do control space, we will see lots of different options in here. There are many, many options for field properties.
For example, application area is still currently required. That is just one of those things, if you do not know what to do with application area, then you need to include it but set it to equals all. So why I am differentiating that this is a little bit of a markup language is because things get really weird. And I am going to go a few minutes over today to explain that one. What I mean is that we will do a separate section talking about fact boxes and actions on a page. So, if you are wondering how that all works, do not worry, we are going to cover that. But that is going to be a separate episode.
So, one of the things that I have seen confuse people about this markup language that we are using to display things on a page is that it has different rules than when we are programming code for this system. You will notice that we have property assignments that just are using the equals, so application area equals all semicolon. That is pretty close to the programming language rules that Al uses, but it is not the same.
If we wanted to see an example of what I mean by that, let us say we were going to want to have something special happen on description, that whenever user punches in a value into our sample text description, during the validation process, we should do some extra logic on that. So, to do that, on this field on the page, we would do a trigger inside of the field as a property. And we have a list of potential trigger events.
The triggering and eventing system I think is going to be next episode, because we need to understand that to move forward with the platform. But here we have got four triggers on a field we have on after lookup on after assist added on after drill down are three common ones, depending on what type of field that is. On control add in is a whole different ball of wax dealing with control addons. And that is its own thing.
It lets you do some special controls around how you want to pop open info, but what we are looking for the last one on validate. So, we do this trigger on validate, open and close parentheses here. And you will find it very frustrating as a new person, you would think that the next thing you would do under this trigger is do a curly brace just like all those other things where we did area, curly brace, repeater, curly brace field, curly brace, trigger, curly brace, no curly braces does not work. You will get a whole bunch of error messages here saying syntax problem begin expected and etc., who whole bunch of stuff goes crazy. Because triggers are using the AL language, not the page markup language.
Thus, we have to use begin ends, curly braces are no longer our friend inside of triggers. We are programming not doing the markup. And so, we have to use a whole separate rule about that. I actually have an article on the spare brain website about this. That talks about the challenge of this one, I refer to it as Dr. AL and Mr. CAL. Because it is bizarre to go from this markup language to a programming language. They effectively work in two different ways.
So, if I say for example, I am going to do something crazy that whatever the user types, we are going to replace that with some other text. We are making a trolly sort of extension, I guess today. So, whenever they validate it, if, the user ID equals Admin, and I am just hard coding because I am just trying to go quick here, then begin and I am just Using an extra bunion, and normally we would not do this first single thing. And then we want Rec.Description to equal “lol admin”. And there we go.
So, anytime the user is admin, and they are punching into description onto this page, we are going to replace it with “lol admin”. Syntactically, this whole chunk of code is a different beast. When you have got trigger begin, we do an if statement. And we are doing a comparative-equals inside of this if statement. So, we are saying if the user ID equals admin, and if we want to do a sequence of different actions, as a result of this, if being true, we do not do a curly brace, we have to use the keyword then.
As such, for those of you coming from other programming languages, you might do if condition, and then just do a curly brace stuff. We do not do that. Even though the markup language might make you think it works that way. Now, we are having to work the old school pseudo-Pascal way. So, if conditions, then and now a syntactical grouping pair begin, and will also notice that in the properties, we did application, and we did straight equals all. But down here in the code world where we are operating under the old cow, Pascal style language, when we set the Description field to a value, we must use the colon equals assignment value, because it will interpret Rec dot Description equals quotes, etc., that is a comparative-equals. So, that will not work. And it throws people off a great deal. And I thought it worthy of its own little episode very early in the beginning here, that when we are dealing with reports, we are dealing with pages, and we are dealing with queries.
There are many times where we are doing syntactical markup language, which operates under completely different mechanistic rules. Then, when we are doing code type situations, like we did in our previous development section, where we had triggers, we had ‘begin” and we have almost no markup in a code unit, because there is nothing that we are describing to the system about what it should be doing.
We are giving it code to act on. So, that messes up a lot of people who are new to developing with this system. It is two programming languages in a trench coat. And if you want to completely bend your brain, be aware that you are being given two programming languages in a trench coat which are standing on top of the shoulder of C sharp that this gets compiled to on the platform side, which gets while it is transpile into C sharp on the platform side, rendered to the UI using a whole bunch of TypeScript. And the calls to the SQL back end are done via SQL calls that are doing lots and lots of unions. So, for our perspective, we interact with the two kids in the trench coat, but they are standing on about five other kids. Thus, there is a remarkable amount of programming languages involved in the platform of this whole thing.
Now, just for those of you who are looking at some of the visible elements of this, I am going to go ahead and publish this; we just added a new table, a new page, I am just going to publish it for the laughs for those who are watching along to actually see that it does what it should be doing. To see how this markup language renders. It should just be a list page we can search on. And we actually will not be able to find it, I believe. If we log back in because business central doctors log you out automatically after about 20 minutes, and we definitely took longer than that. I believe this will not be available in our search.
So, here is our sample text list. And we see we get a repeater that has a column for code and a column for description. And we can edit this list and we can go “Hello” as our code and whenever we punch in this description “I am super”, because of that code. It should alter that.
In our code here, we did really lazy fast coding where we said if user ID equals admin, well, I believe the official name of this account is ADMIN uppercase. So, our troll trolled ourselves where we are uppercase ADMIN and not lowercase admin. So that is fine. Okay, but that showed at least you know, how it shows up as a description. There are lots of many other pieces to page design. But I wanted to cover a quick talk about the concept of doing the markup for layout for code for triggers, and events and all that sort of stuff.
We went a little bit over, but we went over a lot of things, too. So, I hope the first half of this the first half hour or so, going through thinking through all of the different expenses, the way you need to market yourself the time that you are going to be spending on producing product. Think about all those different pieces, make sure you are valuing yourself correctly. There is a whole follow up to be had on how to you compare your value to the rest of the market space, that is a whole different beast. We also covered the customer card and some basics just to cover at least understanding the structure of things, how to look at the templates of it. If you did not see last week, it was all about inventory and the item card. So, lots of content there. And we finally got back to our Visual Studio Code environment. We are talking about the basics of page markup language.
So, with that said, I hope everyone has a good day, wherever you are, or whenever you are listening to this. We do post these all on this fair brain, YouTube, it will help us out bunch if you made sure to subscribe to that. We are trying to work close to the 100- mark so we can get a nice URL. And that would be a lovely thing to do. If you do not follow me on Twitter, we will be doing lots of news in the next 60 days as well about new things that are coming so make sure you pay close attention, I guess. And with that, I will see you all later. Take care everyone. Bye