2020.09 Launch Part 3
2020.09 Launch Part 3
Today we will cover part three of our quarterly release. This is Servoy version 2020.09.23. And we did things, usually I do kind of going over all the release notes and because there’s a lot of updates in one quarter. And usually I do that on the Monday when we do the three part series and then the next few days we do demos. I decided to reverse that a bit this week. So the prior two webinars, if you haven’t seen them, they were recorded. I did a webinar on the pop up filter component, one of our most popular components and also the new data validation API slash framework. I gave a demo of that. So if you’re looking for kind of more in depth demos, check out the earlier recordings this week. Today I hope to kind of cruise through the release notes, talk about what they mean, take questions as we go, and then maybe do a mini demo at the end. So that’s kind of what I have on the agenda. We’ll keep it light and hopefully we’ll be out here before the half hours up. So on the agenda, what’s new? Well, RC2, so our release candidates number two is currently available. So you can download today and test it. The final release will come next week, probably not early next week, but sometime in the middle of the week. We just had a couple regressions that came through in our testing that will be working on and retesting. This time the Servoy core platform more than 100 fixes and enhancements that I counted. I think that’s a world record for us. In the past it’s been getting up close to that, but I don’t know what that means. Do we have more bugs or just better testing? I know a lot of these cases are filed by our own, our own people as well. So anyway, they’re fixed. So that’s the good news. We updated many of our extension packages. These are the packages that are completely open source and we published to GitHub. And I’ll be going over those as well. Finally, we did update our sample project or sample solution. We gave it a minor version bump and basically to catch it up on all of the dependencies it has. So these components and modules that if depends on are updated and therefore the overall project should be updated. And so we did release that. And perhaps I can show a little bit of that at the end because I think that’s a really nice tool for people who are just getting started, but even people who are using Servoy for years. And so we can go and kind of get under the hood and break it or see how it works and there’s even tutorials to go along with it and we’re looking to expand those tutorials. So that’s what I have on the agenda. So I’m just going to go through the updates and kind of notable mentions and we can take questions along the way or we can save them for the end. So the core updates, I’ll start with the I 18N API. We added a get currency format. This is a pretty simple one. There was a request that hey, you can get the current formats for numbers and date times. Why not return the local currency as a string. So we added that. So that’s in the core API. So the labels that you put on a form for I 18N keys. They now actually resolve in the form editor before they were just showing I 18N kind of the ugly message. So now those are actually resolving in the form editor. For those of you that don’t know by I 18N, I mean that’s short for our internationalization feature and we do localization and language translation on the fly for your applications provided that you, provide the values for the keys. So that’s a really powerful sort of non functional feature that you could interested in. More core updates. Some of our data APIs we updated the database manager flush calculations method. This is a method for sometimes you have calculations they dynamically update. So when the request that they always rerun so they’re almost always up to date. However, there are certain situations where a calculation might become stale years and years and years ago we added a method to flush calculations. We added an argument to overload that where you can actually pass in the name of a specific calculation because for performance reasons you may already know which calculation that could be going stale and at any point you could programmatically flush it. So now that’s been overloaded you can say a specific calculation that should be flushed. So that can help with performance if you call flush calculations and you have many of them referenced and they rerun that would be a shame. So now you can get past that. Also in the data APIs the view found set class API has been extended to more closely match the core found set API. It doesn’t all the way match it for reasons that are kind of complex but that they really are kind of fundamentally different in some ways. But now it supports edited records and failed records. So these are when you’re editing and you can inspect kind of the edit session and say what records are edited, what’s the change data, what’s the old value, what’s the new value or if you saved and some of the records failed to save and then you can get the list of those and interrogate the reasons why it might have failed. So that’s all been adapted to the view found set which is a specialized found set. Also the validation framework that we showed on Monday is available on this API or this object as well. For those of you that don’t know what I’m talking about with the view found set, we introduced this in actually in Servoy8.4. So it is an impervious webinar where we had a webinar dedicated to this. I think it’s 8.4 part 2 in the launch series where we did that and add an example of that. But this is actually a pretty powerful feature where you can create any query to your data sources and it could be more than one you could do a bunch of joins and a bunch of filters and etc. And then you can convert that to a found set and use it as like this smart object where you can bind already forms to it or create relations from it or calculations on it, just like any other data source. It’s really powerful and there’s a lot of good use cases for that. Just wanted to for this slide it’s about that it’s a more on par with the core data APIs. We added support or I should say pre-liminary support for creating accessible applications for applications for folks who are disabled. We are working with one of our customers to help them get certified for their accessibility of their application because they have some consumer facing applications and it’s even more important that they’re certified. So we introduced some features I would say these are preliminary to help folks get started to build accessible applications. We’re going to work with them to go through their full certification and we’ll probably come back with a more comprehensive kind of documentation and whatever API changes to support that. But this is something that’s in progress but there were changes published in this release so it’s worth mentioning. We can start to set things like a laying attribute also alt text and ARIA labeled by either Dom things down in the browser but when you get folks using like screen readers or other types of adaptations for accessibility, it allows you to make applications which can be consumed in those ways and broadens the reach of your application. So if there are those of you out there that are looking to support accessible applications you can contact me and I can go over this with you in more detail. But we will probably do a case study webinar or white paper or something when that’s ready. There’s no questions yet. No, there’s none yet. Great. I’ll keep going. So those are some of the notable mentions in the update. We also have regular stack updates so we do this every quarter just maintenance and improvement on the stack. These are non-functional. So not things that will really improve your application directly in a functional way. The profiler which if you don’t know what that is that allows you inside the IDE to really inspect how your code is executing and analyze performance. It’s a pretty pretty complete feature for doing so. We add some improvements to that to help you inspect. It shows long running queries and help you inspect how those are working. By the way, for some of these I’m really glossing over it. If you go to the I would say, I assume thing is in the way. See what’s new on the 2020. We show some release notes here but really every case that’s resolved too. So if you want to get into the details of this stuff and you see something, I always recommend you go to wiki.seru.com and you go to the latest release and what’s new. And also the cases that are in that and you can get really in-depth details on that. So we add improvements for the profiler. We change this is interesting. You might bump into this. We change the default Tomcat ports. Typically it’s 8080 which is always like the default Tomcat port. We move that over to 8183. Also the like the shutdown port and some of the other configurations. We move to those ports because there are common. It’s common that there are applications running at this port. Other web applications that use Tomcat or another Java container. And so for some people just getting started in Servoy, they get kind of tripped up because that port is already occupied. So now we actually warn if we find if we find something 8183, we also warn if the port is in use well. Well the IDE is starting so you can kind of know why and what happened. But for those of you that are used to jumping to local host 8080 to test stuff and development. That is now going to be 8183. But when you launch the ng client or when you launch the server admin page from developer, it will go to the right port. But if you ever just pipe it in, I do that sometimes when I’m going to the Servoy admin page to look at logs or something. You won’t find it 8080. So just a heads up. So Sean, what does that mean for existing applications? Is there work to do or ports to change? No. Now for existing applications. So this will, that’s a good question, because this will only be effective on like new blank installs, clean installations. Existing applications won’t change to 8183. I should have pointed that out. So thanks for bringing that up. If you do a blank install, it will go to E1E3. There is, we have long had documentation on how to change ports to. So at any point you can, you can change ports. You can run 10 installations of Servoy at one time on different ports without a conflict. So more than 10 if you like. The builder, the thing that goes through all of your code and checks for potential problems or known errors, has been improved. We usually improve, you know, we always add more checks as we encounter edge cases and things like that. So this is common in our releases. So whenever the builders improved, you may see more warnings or errors in your code. Sometimes people upgrade and they say, hey, I upgraded now. I have a bunch of warnings that I didn’t have before. These were situations that you most likely always had, but now you know about it. So there were some extra checks that were added for missing references and things like that. Finally, the version of Tomcat that ships with the IDE and the classic Servoy app server has been upgraded to E557. And again, that’s on clean installs only. I got a question here shown from Kim. Yeah. I don’t know if it applies to the previous slide or not. Did you add case statements to the query builder yet? Case statements to the query builder. There’s a case for that. And I think that’s not in this release. We’re still looking into that. Oh, you all on replies. He says no. Yeah. So yep, I’ll get. Always nice that you’re on secretly watching the webinar. Yeah, keeps me honest too. Yep. I say something wrong my chat lights up. Instance quality assurance. No, we’re still looking into that one, Kim. Always when we do a core release, it’s an even on some of our packages, it’s good to point out things that could, and I want to say potential with the break application. It does not mean that these are likely to happen by any means. But I’ll just go over these because if you don’t know that something could potentially break, then it can cause some aggravation when something’s not working. You don’t know why because you upgraded. So let’s go through them quickly. Media URLs. These are URLs that are generated when you do things like plug in.file.write file. And that actually generates it download like a dynamic URL that the browser just starts downloading. This has been improved to work within only the session that it was generated. I think this was done for security reasons. But if you for some reason were sharing that URL to another browser tab or sending it somewhere or something that wouldn’t resolve anymore. That would, that needs to be, it’s only within that session. So not a common thing that would happen, but just in case. Column validators. We talked about this a bit on Monday when we went over the data validation framework. If you are using column validators, you may know that of course they’re executed immediately, as opposed to like when you try to save or when you proactively validate. So to support column validators in a way that’s uniform with the whole improved validation framework, we have deferred those either to when you save or when you proactively ask for validation. So they will no longer run as soon as there’s a change to a record. It wouldn’t necessarily break your application, but you may get a different experience. So if you have column validators, I would really go through and take a look at how they’re used and take a look at the new validation framework and kind of compare the UX that you have and the UX that you want or could have. That makes sense. Columns which are UUID columns that are on tables being generated from Servoy are now. What’s called DB native. This is for databases that have a native UUID data type. I think that includes PostgresQL and SQL Server at least. So we actually, those are our two most common databases that people use. So we actually create that when you make this is only when you make a table through Servoy that the data type will be the DB native. That can be, of course you can change that right after you make the table. You can say why do I want DB native. I want just a 36 character text for a text based UUID for example. So that’s easy change. Also it can be over written. There’s a preference. See the release notes. There’s a preference that you can set so that it never does that. So if you’re like, no, I’m using this database and it doesn’t support DB native and I don’t ever want that to happen. You can just set the preference and forget it. But it could cause a problem potentially. Our REST plugin, this is our plugin that allows you to expose business logic through a REST endpoint easily in Servoy. When the request is URL form encoded, it was passing in as not a JavaScript array, but like an object that had, you know, where you can call it get at position zero. Now it really does work as a JavaScript array so you can index the array, you know, at a position where you would any other array. So if you have a web service that does handle URL form encoded request, take a look at this because it would break. If you were calling, you know, dot get at a position, you would see a break there. You should get a build marker. Well, I don’t know if you get a build marker. I don’t know if you get a build marker. I don’t think about it. Anyway, it heads up. Finally, deployments. And this is for classic Servoy server, non-war deployments. First of all, you should move to Word deployments as soon as you can. That is the modern robust way to do it. But if you are not and you have that choice, you need to edit the web.xml file. And look at the release notes. I don’t want to bother putting that here because this might not apply to anyone watching this webinar. But if it does apply to you, take a look at the release notes. You have to make some changes in the web.xml file for that kind of deployment. Okay. Let’s go through the packages. Evo, any questions? On ask me anything Friday? Yes, there is a question from Bart. Bart’s asking about stack updates. Is there an update that the roadmap for the Electron browser use in the NG desktop client? The NG desktop client. Yeah, I didn’t put that in the updates here. Maybe you can chat in what specifically what you mean. I think there was a package update to a small package update, like a six on the NG desktop, one of the APIs, the NG desktop details, I think. And I didn’t even put that in the release notes here. But you’re honest chiming in as well. He says, 2020 12 will have an update with the latest Electron. Okay. Yeah, that may be a pretty bad version. Yeah, Bart was asking. He says the current version shipped is six.0.5. Yeah, but there is a version 10.1.2 already. Okay. Yeah, I think that answers that Johan answers that we are planning to upgrade the actual version of Electron. I didn’t understand the question was referring to the version of Electron and not. But I guess that would, he did say stack updates. That makes sense. Okay. Then we move on. Cool. Yep. So these are all of the extensions that you can inject into your projects. These are managed typically on separate GitHub repositories. They’re completely open source. Lately, we’ve even had customers doing pull requests and helping us to improve those. So I’ll go over some of the notable ones here. Bootstrap components. This is like the core, you know, regular business components. We had a few enhancements and fixes. Mainly the text area, a length property. Now you can enforce a length property on text areas. So you can limit what a user puts in there. Radios and choice groups have a horizontal option. So if you imagine radio buttons usually going vertically, you can also have those be horizontal. That’s actually kind of brings parity with what we offered in our classic clients as well. You could do horizontal radio buttons. And then I put in accessibility support. Actually that kind of applies to a lot of the main components that we shipped. We went through many of them and updated them on the prior mention that I had about accessibility. So that they could be supported. But we really have to do that on a component by component basis. And make some judgment calls. So that’s an ongoing thing. So it doesn’t mean you’re instantly making an accessible application. Again, contact me if that’s an interest for you. The servo-action components, which is another repository having kind of the main business components. But some of them are a little bit more specialized. There were some nice enhancements in there. There’s now an API to get the location and size of an object within a complex component. So think of something like the navigation, the side navigation component where you have a main menu and sub-menus and things like that. There’s actually an API to get the location and size of something in down in the component. So you can do interesting things like if you want to pop up a form pop up on top of where something is programmatically. I forget what the use case that created that was. But awesome icons are now supported in tree components. It used to be that they had to be from the media folder. So these are like the actual binaries of the icons that you have in a project. So many people are moving away from that to font-based icons. And now that’s supported in tree components. So you can just have a specification of what the font icon style class is for that. Tooltips on custom component properties. This actually not really on extra components. I sort of plucked that from the release notes. That actually applies to all components. What I mean by that is I’ll just jump into the IDE real quick here. And I don’t just click on a component. Now some of these properties that you have here will actually pop up a tool tip over that can come exposed from the component itself from the people that are maintaining the components to say what the property is used for. And so these properties are actually can be kind of complex in nature. So it’s helpful just to be able to mouse over that property, say what the heck does it do and get a little bit more information. So that was actually a core enhancement that we’re putting through all of the main components that we ship. DBTV view, which is a lot like the tree view component, which is, you know, a tree views meant for rendering trees, DBTV views meant for rendering trees that have data binding with records and your database. There’s a new API to set and get this selected items programmatically. So it’s an API out of there. So if you’re using DBTV view or tree view, you might really want to look at these release notes more closely. The tree view component now has an API to filter branches. So there was, I think, filtering the nodes like the leaves of the tree. Now the filter can also apply to the branches too. One of our, probably our most popular component, NG grids had a medium version bump onto up to 2.6. And also it has, it has like a sister service that the NG grid services, which is a plugin for setting like global things on all grids, for example, also got a bump. So I’ll go through what these mean tool tips and properties I went over that one already. And the persistence of grouping and expansion in the power grid. This is something we had in the data grid. And again, for those of you that are new to this, we have the data grid, which is for direct data binding to resources and then the power grid is kind of a cash implementation of a grid that really does analysis. So, some reason aggregates in groups and even pivoting pivot grids are done in the power grid. So for the most part, they have feature parity, but they’re a little bit different because one is data bound and one is more like cash thing for analysis. So in this case, it was something which already exists in data grid is now available in power grid and that’s just the ability to have your grid with certain groups and then you expand some of the groups and then you log out and you log back in. You find the grid exactly how you left it. Now you can do this in the power grid for your analysis stuff. So that’s nice things to the user experience. There’s a new property on the grid, the checkbox editor. This actually I showed this on Wednesday because we’re going over the enhancements to the pop up filter module, one of our more recent and popular modules, which also does the radio filtering, which had a dependency on setting an edit type to be a checkbox. This is just that edit type in the grid where now you can have a checkbox to check or uncheck with the data bound column quite easily. Also, there’s also is editable data provider calculation so you can programmatically set whether or not the check is just rendered or it’s actually clickable and will will toggle the value on a on a blue-themed column. By the way, the the ngGrid service like the plug and allows you to globally set what the icons are for the for the checkbox. So there is the default icons, but you could change the font icons because there’s some different flavors out there or use your own to set what the icons will be for a checked or an unchecked state. We have a new API to auto size all columns. I could probably show what that looks like actually. I’d have to launch this solution. But this is just a simple API to if you were looking at a grid and then you resize some columns. Now there’s an API to I’ll just do it programmatically here with the command console. So I have the command console up and it performs orders table view elements table and I think it what’s it called now I need to I forget it’s Auto size all columns. So now when I click this so you can see the state of the grid now and when I run this and I come back to it you can see that it’s gone back to the state that it was where these are all auto sized. So that’s that’s helpful if like the gear because now we we really allow you to persist the grid state so you could take it adjust this reorder these you know group them etc. And then that’s persisted and they come back and maybe they want to reset it to its default state. We were missing something that could also you know we’ll put the column orders back but something that will also set it back to auto sizing to reset it to a default state so that’s what that really means. Also there’s an API to show and hide this tool panel. This thing here it can now be programmatically you can show and hide it as well as it being being clickable there is a request for that. So that’s nice to know I think that almost everyone uses this component so that’s pretty relevant. There was also a load of fixes I didn’t even put the number fixes in here but I think it was a few dozen small fixes on on the entry grids components. Shall we want to take some questions. Sure. All right. First of all there was an update from Bart about the election discussion we had earlier on so the reason he was asking this is because they’re looking to do native spell checker in the HTML area. Okay. In my opinion I was just saying tiny and C. You need version nine from Alexa on for that so you just posted that doesn’t update. You didn’t hear it from me and it’s not in the recording well maybe it will be but we are looking into a partnership with someone who has a really nice editor. So, yeah, the Q4 release, we update Electron. However, with the MCE stuff, this is for everyone else. This is the HTML editor. We are also looking at a better way to do that. And that could be pretty soon on the horizon. So, just a heads up on that. All right. Then, Denny is asking if the API to get location and size is that only for SUI extra components or for any components. I think it is for any component, but you have to sort of reference the, inner component kind of how it is in the structure of the components. You sort of have to know a bit about the component. Like how it is structured, but it should work on like the inner structure. You have to know what it is named. Okay. Then there is a question. I think this is not completely clear to me, but it talks about exporting to Excel in ngGrid. Okay. Yeah. And in ngGrid, today we do the export from the server side, which means what I mean is there’s the data set that’s bound to the grid. And we’ve long had APIs that can export to Excel for that. And so what I believe he’s asking is when will an export or if an export will be ready in the ngGrid, there is a sort of a feature in that underlying component. To export to Excel and keep the formatting. And I’d have to take that one offline. I don’t know what the roadmap is for that. I don’t know if it will be supported or not. That would, that would sort of like a way to just export what you see. But we have to look at that use case if that’s what you mean. Because we’re not sure that that lines up. Okay. Sorry. Thank you. Thank you. The answer. Hmm. I got another one here from John. Does the checkbox editor only work on Boolean columns or will it work with bit or tiny, high in T as well? Okay. Yeah. So I said Boolean and I said that kind of in passing. But of course, there are many different data types in databases that are, you know, acts like a Boolean. Any sized integer could be a, could be a Boolean, you know, like a long or short or a bit or, or what have you. And then there are, there are databases that have a Boolean data type. The way that, the way the checkboxes have always worked in Servoy is once you start clicking on them, they get a one. Whereas zero. And that can map to any, almost any data type that can take a one or zero. So so we do sort of generic type mapping just like we do for all other data types. So, so the short answer, John is yes. Also, I think it will render any, any non zero or non null empty value as being checked as well. So, but once you start clicking yet, it’ll, it’ll send one or zero. So hopefully that helps the short answers. Yes. Right. I think that’s it’s for me. Okay. Got him. Yep. Good. Nothing. Nothing. Two personally. Just later. Okay. So I’ll keep moving. As you I search, which is probably one of our most popular extensions ever. If you haven’t used it, it allows you to, to quickly type like a Google like search into a text box for example, and that will turn into potentially pretty complex queries against your data sources in a pretty smart way. There was a minor version bump on that, which included a couple of notable enhancements, and I would point this out really because almost everyone is now using that. That’s doing it even works in our classic clients because it’s just an API. One is option called string matching dot equals. So by default on every search provider, it does it contains. And we added support for a starts with at one point because some people wanted to like the type of string fragment you wanted to only match and starts with and not contains, which totally makes sense. There was a request for dot equals. So we added that and of course that’s added on a, we call them search providers, but sort of think of like a data source column by column basis. So you can say which columns you’re searching and in which data sources and what kind of string matching you want on those. So that’s quite flexible. Also putting a string in quotes. Does equals, but that means the user has to know to do that. This is something a developer can decide for the user. That works nice on things like, I don’t know, like an invoice number that’s a really a string. And you really only want, you don’t want to do like a string fragment matching. They have to type in the exact invoice or bust, right? So there are real world use cases for that. So that’s a nice one to know. We also, the second one is an optimization. It’s not, it’s non-functional. But if you have a column length, which is short and you type in a search string, which was long, we were actually, searching on the short column, which is kind of silly. So we, we optimize it to ignore that. And it might print a little warning when that happens. I’m not sure. I forget. Anyway, that’s a small optimization. You won’t really notice that in the usage at all or in the user experience. These are pretty just quick, non-functional stuff going on here. As you I security was bumped up to 1.4.1 with a few fixes and utils, which is a very generic API for all kinds of low-level utility things like number utilities, cryptography utilities. There’s Excel utilities in there. Someone asked about Excel export. It’s a really pretty big set of APIs. And it’s continuously updated. There were a bunch of small fixes in there and a couple enhancements. So probably worth checking out that again on one of our other highly used modules that works in all clients of Servoy. Other packages that we updated, we have a navigation framework. There was a minor bump on that with a couple fixes. And as you I look up to a comedian bump, this is, this was I think this is also one of the dependencies for the demos I did on Wednesday showing the pop-up filters. And there was one notable enhancement in there. And that’s that it supports method-based value lists on the look-ups. If you don’t know what this component or this actually is actually an API module, what it does. We did a webinar on this a long time ago and I think that we might revisit this. Just because I don’t know that everyone knows exactly about it or what it does, but it’s quite clever. It can show dynamically without writing really much code at all. Show a lookup for doing something where maybe a type of head is not good enough. And you want to actually pop a little pop-up that has a search bar and actually shows a grid. Maybe of potential matches for what you’re looking for. You can multi-select. So if you were saying, hey, I want to, I don’t know, add this person to these groups and then you start typing. There could be loads of records in the database and you can quickly search down and multi-select and pump it back into a column. For example, that’s, it’s a really nice module. So if you haven’t checked it out, it’s worth checking out. We did a webinar on it way long ago though, but it’s in the text series archives. It’s all there. A couple other minor updates worth mentioning. We did a Google Maps. That one had a pretty big batch of new features. And we did a webinar not too long ago. So if you look in the archives, there’s some nice updates on the Google Maps component. Also, there’s another component that doesn’t get much attention because it’s for fairly infrequent use cases. But we have a component called Canvas, which really allows you to render and interact with drawings in your application. And we have, as you know, we have a lot of ERP and logistics vendors that use Servoy. And from time to time, they like to do things like have a floor plan of a warehouse floor. We had another, I think, a POS vendor that was interested in showing a floor plan of a dining room, for example. And then that can be interacted with data. So if you ever come across like a need to have like a custom kind of drawing type thing that interacts with your data, it’s actually possible with this component. And there were some fixes to that for a customer that was using it. I think for EVO it was for shipping docks and how they’re arranged at a warehouse and like whether they’re actively loading or unloading or something like that. So pretty cool stuff. Yep, I saw that demo. Bootstrap extra components got some, got some fixes. And we have a PDF viewer which allows you to view PDFs directly in an application. There was a fix for that, but those are all non-functional, not really enhancements. Okay. That’s it. We’re kind of, are we long on time already? One last thing I was going to do since we took a lot of questions on the way. This solution that I’m often showing in demos, I wanted to point out that we started this a little while ago. It’s a project called SUI sample and or SUI sample solution, I guess. That’s the name of the repository. To have a solution which sort of shows some of the, all these extensions working together and best practices of how to use it and it even comes with some tutorials that we’re looking to expand on. If you’re starting blank with Servoy or you’ve been using it for a while, it’s pretty easy to access this. If you go to the package manager, even if you have just a empty, the best way to install this is with an empty workspace. You can go to help and show download and install with Servoy package manager. And then you go all the way over to solutions. But if you start from scratch, that would be the only option. You can install this just by clicking, well, when you don’t have it, there will be like a plus button here. Clicking that, it’ll actually install not only this application, but all of the modules. So a lot of the things I’m talking about in terms of packages. Navigation framework, that pop up filter component, security and multi-tenancy, the low level utilities. All of those are like dependencies on this because you need those to build a nice application. Also, all of the packages, so all of the dependencies that are needed to get the kind of UX that we have in this example. They’re all installed for you. And then when you go and you just launch this, it connects to the sample databases. There’s even a login because it does do security and multi-tenancy as well. And then there’s some dashboarding and you get into kind of the guts of this example application, which is based on the sample database that we shipped forever that has kind of a sample CRM ordering system. So you can go through this and some of the stuff I showed earlier in the week, like the pop up filter component, where we were filtering by country and city and that sort of thing. It’s all in here and you can not only just play with it, but you can also go under the hood and see how it works. And because it might be a little bit hard to deconstruct, we also have a tutorials. So if you click that tutorial link, it goes to the site for this, the project home for this, where you get step-by-step on how to make a grid and insert it in and connect it to, you know, the filter and some of the things that I’m showing in these webinars. And in fact, this is kind of my secret weapon for making webinars quickly because, as I mentioned sometimes, I often get up early and make them the day of the webinar because I don’t have time to do it any other time. And I find that I can just kind of make some samples and stick them in the navigation framework here and they’re already styled the way the sample solution looks. And it’s a great way to be productive and try things out without necessarily having to start from scratch everywhere and you get to kind of break things apart and see how they work versus start from zero and try to learn everything. So if you haven’t yet, take a few moments, create a blank workspace in your IDE, download here from the Package Manager. It should install everything in one, it might take a little bit because it has to install a lot of stuff. It will depend on a security database for some of the security records, but it should even prompt you to create that if you’re set up with a sample solution and the default post-crush-glue database. So I just want to throw that out there because a lot of these webinars I show that and, you know, it’s pretty easy to do. I want to let you know. Either we’re almost 50 minutes in, so we should call it quits, let everyone move on. I’ve got one question from Robert, it’s about S3 by search. He’s asking if there are plans to use more than one field with one alias and S3 by search. More than one field with one alias, let me think about it, it probably makes sense. So an alias could have, could pertain to multiple fields. So between brackets, it’s name as an alias for name underscore one and name underscore two. Okay. If you have not, please file a feature request. What Robert is talking about is the ability to just do quick searching. And I don’t know if I think I’d have to put in the exact, like if I did that ship country and I did. Then I’m talking specifically about this data provider and you can alias this so that the user doesn’t have to know the name of your column. They can just say put country right and they can put country, colon, France. And I think what Robert’s asking is could I have that do, you know, actually look at two columns. So today, no, that’s not supported. We could look in supporting that. If you file a case for us, we’ll take a look. By the way, you don’t have to put in country. You could just do, do a different country. You just do this, but that’s actually searching, you know, many columns and it just happens to match on this one. Because it’s a direct match, but you can, your user could do USA and, you know, city, colon, ALB. And then then I’m getting, I don’t know what I’m getting with that. Anyway, we’ll look into it. If you file a feature request. All right. That’s a wrap. Thanks, Joe. Cool. Thank you very much. I’ll post this webinar. Thanks, Evo. I’ll post this later today or tomorrow or Monday, probably later today. That time. Awesome. Well, thanks for all the webinars. So this week, Sean. My pleasure. Get some rest over the weekends. Everybody have a good weekend. And see you soon. Bye bye. Bye. Bye.