Microsoft Dynamics 365 Business Central: Building connect apps - BRK3015
Center Feltman I'm, an SDE - working for Microsoft been, working up. In Fargo on the, business central product from like last four years. Today. We're gonna talk about building, connect, apps for, business central. So. A little bit of an outline of what we're gonna give you an introduction of what connect apps are and how they relate to business central. The. AP is that, we use and OData v4 format, that we're using for connect, apps. Web. Hooks at the, open API specification, we're. Going to talk briefly about CDM. In the graph and then. We're going to talk about app, source, and where you can put your connect, apps and how they are visible to people at the end. So. Before we get started. Disclaimer, this. Says that anything I say is probably wrong because it's early and yadda yadda yadda I. Thought, about putting a little thing here saying the readers of the disclaimer choose, not to roll their eyes at the presenter, but anyway. So. In business central we have three main ways of customizing. It. That. You can that you can go for and it kind of depends on what scenario. Best. Fits to you we, have connect, apps which, I'll talk about today, we also have add-on, apps and individual, customizations. Connect. Apps are different, from the other two in that, you're not actually. Integrated. Into the product you're not building, something that's native, to business central you're actually dealing with a service, that you've built outside of business central and you're communicating with, some api's that we've defined to. Integrate, with it to perform, whatever operations, or whatever thing it is that you'd like to do. If. You think about for, example payroll. Say you've built a payroll service and you, want to integrate your payroll service with business. Central maybe business central is where your customers are housed and you want to be able to run some, payroll operations. On. A given pair or a run you, might need to get information from, business central say. Companies. And the accounts the things that are available for your customer, and once, you've done everything you need to do during your payroll run you're going to want to push those back into business central so that your customers see that data so that the transactions, are posted. And everything's done and and. That's what connect apps are it's. You've built something using, whatever language you'd like using, however. Method you like be it a flow, app, our app maybe you've built something in Python, or if you're really savvy something, in Fortran, good luck with that but you could do it. You've. Built something on the outside and you want to interact with business, central to, get work done so. We, do that by defining, a whole bunch of api's, and the, api's allow others namely, you to. Integrate, with business central and perform those operations, so. Business central it sits out there in SAS and in the cloud and it's a pretty complex, machine there's a lot of stuff that's going on there's there's a whole bunch of different entities things that you could interact with what. We try to do with connect. Apps is we've created a set of api's that are more simplistic, they, there. Are a simpler. Form of the models and the different classes all the tables, that that, business central uses something, that you can interact with and it works like a shield it's it's, not as complex as Business Central and whole but you get a lot of complexity, from a simple, interface you, can work with customers without their worrying about how, customers relate to all these other types of things and. You, can build build. Something that works best for you using, the api's that we've provided or if, you want later I'll talk about you can actually create your own api's, by, using an add-on app or otherwise and then they work together. So. I mentioned, add-on. Apps earlier and connect apps and I mentioned that the difference was that a connect, app you're actually sitting on the, outside something. You've built and an add-on apps you, are actually putting something inside the business central you're extending business Central's native functionality with an add-on app sometimes.
Connect. Apps are working, with our api's and they decide oh you know what it would be really nice if we also had this, API or if we had something. Else that we'd like inside. Of the product well if, you build an add-on app in addition to your connect app you, can actually add those api's and expose them and then suddenly your, connect app is now working with the things you've exposed for your customers, and. You can perform all, the features that you'd like you expose the new functionality. Inside, of business central so. You can see kind of the difference here the strengths. Is in the add-on apps as you're actually in business central, you get to modify, and extend what's there but, connect apps you get to own when you get to simplify all the rest rest calls the weaknesses of the to being of course with add-on apps you need to know business central you're integrating you're, writing something directly for it you kind of need to know the product that can be a little bit of an overhead with, connect. Apps you can't modify business. Central to you long UI or any of the logic you're only integrating, from the outside you don't get to change how the product works on the inside. All, right so what. We're seeing here is a list of the available api's. This, is what we have today this is what comes standard we've we've, come up with these four version one of connect. Apps as a. Set of common entities. And and. Models, and functions, that we know that people are going to use most, everybody, is going to have to deal with customers. They're gonna have to deal with vendors, or accounts. Or all these kinds of things so. This is the initial set and, like I said you can expand them if you build an add-on app as well our. Philosophy. With these api's is, that. We. Keep them simpler, than, the backend entity this is what I was talking about with that shield they're, a little easier to deal with you don't have to worry about all the complexities, that business central cares about you only have to care about what, you care about. We. We, keep these fixed, so we come out with an API. And it's, at a certain URL. And it'll be version, 1.0, if we came out with a new version of the API we, would have that bumped with there would be a new endpoint to hit called version 2 O and version, animal we remain the same this.
Is Important, in case we want to make new changes or add new features you don't have to necessarily respond. To them you can keep using the old API and they will remain consistent. All. Of them are exposed, as web services that's how you communicate with them and, they work both in sass which, is where business central lives or if you had an on-prem, installation, of business central you could expose them as well. All. Of them are using OData, v4, if, you're, not familiar with od2 4 it's a web, protocol, that, was developed, to kind of standardize, a way of communicating, between services. It's a restful, based service, which. Means that it goes along a lot of standard, ways of accessing entities. And accessing, data, pushing. New data into it and deleting or patching. That data within. Our Oh data v4, protocol. We support, basic, querying support, so you can go query entities, you, can access. Some built-in functions, you call them bound actions, and I'll show you some, of those later and. You can modify that data you can post new entities you can adjust. Them that's what patches for you can delete them we, also support batch which is just where you you've, got fifteen, different things to do rather, than make fifteen different web calls why not put them all into the same call and have us operate over all of them and then go through each one and iterate it saves, time. On communication, and processing. Between. The two. So. The. Basics of the API is there's, documentation that you can find online it's in this deck and otherwise but some, of the tips that we have and things that you should be aware of is that. Our. Things are metadata, driven and what that means is when. You go out and access. The API what, you really want to do is you want to take a look at what's available so, actually have an endpoint that, shows, you what is currently, available and, then you can respond to that instead. Of having to know necessarily ahead, of time all of the different entities, that are available so, this would be a nice way of discovering, new changes. Nice thing to figure out what's happened, or what's, new in the v2 version of the endpoints. Everything. Is XS via a single, ID so, that's usually a gooood, or whatnot and you access, a resource using. That ID. And. All, of them sit inside of the context of a company if, you're not familiar with business central you're always in, a company, you're doing things inside of a company for a customer, and so all the entities are accessed, underneath, that parent banner of a company so, now, I know that's a lot of technobabble, and if you thought that was technical, we're gonna get a little bit more technical through a demo, showing you what, these kind of look like with. Postman. So. I'm gonna swap, over to that, sure. Shows up. So. If you're not familiar with postman, postman, is just a little tool well, it's actually a big tool there's a lot involved inside of it I like it quite a bit. But. It's a tool for helping you craft a web service call and then looking at the responses, and maybe dealing with that it's actually got a lot of features. This. Isn't a demo on postman, but but. I really like it so I tend to promote it what you're seeing here is just. Me. Setting up a call to a tenant. That I have out in Business Center right now it's a sandbox. Tenant and this. Is the URL I'm going to call out to you I see it's in these curly, braces that's. Just because I've got a list of variables that I can replace inside of postman so that I don't have to type it out every single time so, this curly, brace URL actually points out to API. Business. Central dynamics, comm v1, oh my, tenant. Domain. Name and then it hits the v100, endpoint inside of Business Central and if I hit this what I'm going to see and you can see it already is a list of all of the, api's, and. All the entities that we're exposing, for. Connect apps so, just, to show you that this isn't fake today I'll actually go ahead and try to send that and we, get a response back here now, if we were to actually correlate, this with that big list of API as I said we're exposed they would all match up there should be like, 48 different, of these these entities inside of here and, this would tell you that these are the things that we that, you can access with your API is you can access shipment, methods item categories, payment, methods currencies, but it doesn't tell you too.
Much About what, those things are made of it tells you they exist but it doesn't tell you what are the properties it doesn't tell you what are their fields and these other things for. That you, go and you take a look at the, metadata that. Doesn't, look nice and a JSON, format. So. Under the same. URL. Path if. You just put in dollar sign metadata and this is a common, OData. Concept. Again. I'll hit, it just so you can see and, I got to change it to display in XML, this. Is the, definition of all those API so if we take a look we have. Let's. Find a. Customer, here's. The customer, entity if you're, going to interact with the customer man see you can see all these different fields and all these different properties, that are associated with a customer, in addition. To the properties, right on there we also have something called navigation, properties, these, are various. Entities that are associated with a customer, for instance you might have a picture for a customer in. Business central we show a nice little picture showing. The customers face if you've taken a picture of them or maybe their logo you can get that information from here you can figure out what type of currency this customer uses all these things are, properties. That are linked to your, customer. Next. We. Can show you companies. As I said everything exists, underneath the, concept, and the the scope of a company, if. You want to perform any operations, you need to know what companies are available, for a given customer you might not necessarily know, what customers, you have ahead of time they're not necessarily registering, with your system perhaps they're just installing, your system and then inside of your service they point to their business central, location. They point to their business central deployment well then you need to discover what companies, are there so, we provide an option to do that via the company's endpoint and if you execute it you get something like this you get an ID for the company and you, get all the information associated with its display name the. Name of it that we would use inside, of inside, of the product and whatnot ok. So. Going, back to the presentation, just a little bit and we'll come back to postman just a second as we explore a little bit more. You've. Seen that you can query the, api's you can query the metadata, you can query specific. Companies, but. What happens when you've, got a giant list of things and, you want to filter that down or you only care about you, know certain sub components, of an entity, that's, where some of the the. Old data operations. Come into, play so, you can filter in. This, case this, query would be looking at sales invoices and we were looking at sales invoices where the status, of that sales invoice is open air go show, me all the open invoices instead. Of seeing the entire list of everything you're only looking at a very specific subset, this. Is useful in your. Connect, app because maybe you don't care about everything, exist in the world maybe a customer's, using your app and they've drilled down into something specific, and you just want to show them the details about that one thing you don't want to go grab the world you only want to grab the details about the thing that they're looking at.
There's. Also we support expand. So. A good. Example of this are sales orders, sales. Orders are first certain customers, there's a customer, that this, sales order is is going out for but. The sales order entity, doesn't. Necessarily, show you those customers, the customers are actually a sub, entity, of sales, orders they're related, and there'd, be a navigation, property, to them, but. You're not going to see them if you make the query just, for the sales orders if, you use expand, you can actually say ok I know there are customers for this expand. This navigation property, and show, me those customers, show. Me those customers right in the query instead. Of having to make a second, query and say oh for the customer, we're their sales order is equal to this then get me all the things. Additionally. You can you. Can use a sub query in this case we're getting, the customers, and then we're selecting specific information, we don't need everything about the customer we only care about the display name and their phone number and then. Finally related. To that is select this is how you pick out the specific, properties, that you care about instead, of seeing the entire entity, you, don't have to view everything you only have to view what you care about. The. Last big one that people are interested in usually is the deep insert, this. Is related to expand, where you're looking at things that are related to your entity a, deep insert allows you to insert, those related entities all in one call you, don't have to create, an invoice and then create, all of the line items and separate calls you, can include. Them all right here you can just include the line items along, with the, sales invoice. Right. So. I'll go back to postman to show you a little bit about how to do that. So. Let's say you've you've, got, a list of all of your customers, here, take. Just a second there we go this.
Could Be a very very large list in this case I think the list is about six people so this, person doesn't have a lot of customers but that's okay they'll grow. If. In. Your application, you only want to show a, few, things about a customer you don't need to show, your, customers we're. Sorry your users the currency, that they're using you don't need to show them the address of the customers, and all these kinds of things you only want to look at specific, data this, is where we would use that select, method. So, in this case say I just want to show an email, and. Email for the customer and what type they're in what, kind of customer, they are I use, select I. Specify. Which. Properties, on the customer entity I'd like to display and, I run my query and now I get a much more concise, list it doesn't show me all that stuff it just shows me the. Email and then the the type for each customer that I get back. Similarly. If you are not, if you don't care about every customer, in the world say again in your application. Somebody, as a user has drilled down to a specific customer you, don't necessarily want to go grab all the customers you only want to grab that specific, one so what can you do if you have some information to filter, on you, can use, the filter option inside of your query say. Looking, for a display name where their name is equal to alpine ski house so, in this case I only get back one, customer, and that one. Customers, display name equates to what I wanted we. Could if we had multiple customers that have the same display name or multiple customers that had the same email we would get both of those let me get multiple back in a single collection. Right. So, the. Trickiest, one is usually the, expand, as we talked about before expand. Is where you have related entities, to, what you trying to query for but. They're not part of that and they're related but you won't see them in your query in this case if we take a look at sales invoices, we know that sales invoices have lines, associated, with them what items are associated, there but, inside of this entity we won't find them we won't see them so, if we actually want to do that we'll have to expand, those, lines so. If we use the expand. Function. Here and, specify. What it is that we're expanding what related entity you were expanding, will. Suddenly see. Them down here these are my sales invoice lines for this particular, sales invoice, and as, we said we could do. Additional, things if I, only cared about specific. Components, of here I could say select. The tax code. Tax. Code. And. If I ran this query I should, see my. Sales. Invoice lines and just the tax code that kind of stuff and you can take that just. About as deep as you'd like you could expand, what you've already expanded, to get all sorts of data in a single query instead, of having to go back multiple. Times getting, the sales invoice then go looking at the lines and then getting the lines that match up with that sales invoice simplex vice, versa and keep going down the tree.
You. Can filter on that expand, if you wanted we could do any. Anything you'd like inside, of here I could do a filter where, it equals this or the other thing if there were multiple sales lines for this order right, in. This case I don't think. Yeah. One of these customers, has multiple, entries so this one right tax, code was a bad choice for filtering in this case but we could if we wanted to for any of those items. Okay. Then. I mentioned bound actions. Bound. Actions are methods. That make things simpler, something that you can call right on the query to, just get, something done without, having to worry about how to do it via different queries in this case if. We take a look at a sales quote, usually. We'd like to take sales quotes and turn them into invoices, right, instead. Of having to take, your sales quote figure out how to change that into an invoice and then insert the invoice and all the items associated, with it you can use a bound action, just to call you. Target, the sales invoice and then you call the, make invoice bound, action on it and business. Central performs, that action in the background and then you, get a response back that tells you what your new sales invoice, is going to be and then, you can go query on that if you need to make changes later so, it makes it a lot easier we've added a whole bunch of these for common. Scenarios, that we know that people are going to encounter such, as this. All. Right so we've taken a deep technical, dive I know into, how. Do you access these what do you do with these. The. Next usually, technical thing that we look at is what. What's the URL for them where, am I going to access them how are they going to access them all, of the api's, are going to be accessed, from API, to business central debt dynamics comm. / v1 dot o / API and then, a version our. Initial, version of our, API pages, and whatnot was exposed under beta that's. When we were just getting started we could call it it's in preview, and whatnot but we have recently, released version, 1.0, and as. I mentioned before these, stay fixed, they stay consistent, if we, decide, to change things and we want to add new features functionality. Or we, need to remove, something we're gonna go come out with - oh so, you can continue, to use one Oh.
Some. Of the changes from beta to 100 we're in, beta we allowed for multi part keys and that caused some confusion, some. Annoyance. As you're trying to figure out which parts of the keys go where and what not so we collapsed, all those and then the api's you're now identifying. Every, entity with a single, item it makes the query a lot simpler it makes the logic around that a lot easier you. Can also navigate. Deeper. More entities have navigation. Properties, that you can look up and you can go deep into a tree. Of entities, and figure out more data in more interesting. Info. We. Additionally we added timesheets and then a whole bunch of extra properties that people requested, them that they wanted on those entities. Alright. So. Next. Let's talk a little bit about web, hooks and the. Open API 3.0, specification both, of these make, you. Connected. Apps lives a lot easier, one, the, web, hooks that give you the ability to, subscribe. To, an event it gives business central and your app and ability to communicate when something, happens when somebody inserts. A record when somebody changes, an entity you don't necessarily have to keep polling, business central will. Tell you when it happens as opposed to you figuring out what happened and then, the other one by using the open API 3.0, specification, we're. Adhering to an industry standard, which, allows you to use tools such as swagger, to actually go generate, a client, for this you don't have to worry about writing, all of the code to, access things you can write a client and then use that in your application and, the. Builders, for this include, a whole host of. Languages. It doesn't necessarily have to be c-sharp or C, or Fortran, like I mentioned before although I doubt that one exists. Right. So as I mentioned web hooks they're a dynamic. Way of allowing our service and your service to communicate, and allowing our service to call out to, your service when something has happened, when. Somebody, has inserted a record and you've subscribed to that that, event will. Send you a message and then you can do whatever is that you need to do to, react to that, I had, a little graphic here that should make that a little bit easier I hope don't. Call us we'll call, you, so, on the, left. Hand side of the, graphic this would be if you didn't have web hooks you, would constantly, coming, in to business central and saying hey what's changed, hey what's changed, hey what's changed, and then you'd have to figure out what you're gonna do with that any, time an event happens, with. Web hooks on the right hand side when the event happens somebody's inserted, or record somebody has deleted something somebody's modified, to it and your, connected, app has subscribed to the web hook instead, we just talked to you we send you a message and saying hey this, just happened something, changed with something was deleted, or maybe multiple items were changed.
And. You can then react, to that well, I'll, show you an example of the the payload but we tell you specifically, what item has changed or, items have changed and we tell you what, just happened. This. Is all handled via subscriptions. Entity, so on the API route there's a thing called subscriptions. And when. You would like to subscribe to a web hook you go out and use this entity it supports getting so you can see all the subscriptions that you have that are available you can post a new subscription you, can delete it and you can update or modify what's, already there. So. When you want to get notified you subscribed, any use post and you post to the subscriptions, endpoint, and it looks something like this this is the body you're saying you provide a secret this is so that when we send you a notification you, know that it was us that sent it to you you know which subscription, it was you. Provide the URL you want us to call you back at in this case my. Website as your web sites that net so, this is your, URL, that you're exposing to business central so that we can send you the notifications, that something has happened and then. You're subscribing to a specific, resource inside. Of business central in this case sales invoices so. For here somebody, at, this this, notification, URL would then get messages, anytime, that somebody has modified, the, list of sales invoices inside, of this company. The. Stuff at the bottom the handshake poach and post and patch are, when you make the initial subscription. You send out your secret to business central business central responds, back with a secret to you and then, you hand that secret back to business central this is how business central knows that you actually subscribed. You, post a message it's a it's a handshake you post a message biz, central post the message back to you you guys say yep we're all good we're ready to go and then we can move forward with the notifications, if we didn't receive that response, back from you then we would think something went wrong and we're not going to start spamming this this, URL. And. This. Is what a payload, for a given notification a web hook response might look like you, might see at this first one something has been updated, the items, which, item, that specific, ID right there that is the ID of item that was modified. It. Tells you when it was modified the, change date is updated, that's how you know it was an update and that client state is that secret that you provided to us in this case we've, provided a not-so-secret, secret API web book notification, test that's not particularly unique, but if I was receiving this on the other end I would know what it is we, also tell you if things are created that's what that change type but the second one is and then the last one is collection. This means that several. Things have been. Modified, inside, of this collection, of items you, subscribe, to this and we've changed a bunch of things inside of items maybe this is important to you you need to know when a whole bunch of things have changed because you need to react differently to it as opposed, to a singular, item and you'd like to group, all those together. Alright. That's it for webhooks now, we can talk a little bit about the open API, specification 3pl. 3.0, as I mentioned this. Is a way of defining, your, api's, that's, been standardized, across the industry. It. Was formerly known as swagger. And the. Very useful thing is that you can actually generate. A client, for, our, API. So you don't need to worry about writing, your own code or writing, your own client, for it you can if you like by all means. But. You can just go out to here and generate a new one this is particularly useful if you want to uptake the next version of our API so you don't have to worry about rewriting your whole client to do new things you, go out to here point it at the v2 endpoint and it, generates a client for you and then you just start using that inside of your product. Alright. So we'll touch a little bit on the common data model and Microsoft, graft and how those relates and how they're useful for connect. Apps if. You're not familiar with common, data model CDM, or the common data services, CD yes. Briefly. What it is is a set of entities, that are known, and understood and, made. Common across all types, of products most, everybody deals with some kind of customer, entity most everybody deals with some kind of item entity or you. Know anything, that you would want for your vendors, or dimension, lines or or sales, quotes and invoices but. All these different services tended. To have slightly, different, ways, of representing, the state a customer. Could have a name and a name too or. Anything. That you could think of that would be different across them so the common data model is a way of standardizing, all of these are bringing them together and saying this is what a customer looks like it has these properties, in these fields.
Then. Individual. Services. Can extend the model if they have specific. Concerns but we stay common across all of them and what this allows you to do is share, data across all of these different services, they all know what a customer looks like they all have a common, way of defining it so we, can transfer data from one viewer without having to worry about synchronization. Areas, where this field doesn't exist or that field does exist and what, have you common. Data services, are services, that sit on top of the common data model to promote that sharing, to promote operations, on those things that are common across all of, your applications, so, how. Does that relate to business central how. Do we use common data services, well, the short answer is that we, do not do that directly, at least not yet. Common. Data services, are not, integrated into business central straight but, what we do provide is. Synchronization. And integration, to Dynamics 365, for sales and, sales. Is built on top of CTS and on top of the CDM so, if you have your connect app and your connect app wants to use common data services, in the common data model you'll, actually be doing it through sales and have business central integrate, with sales there's, a link here on how your customers are how you would set up that integration, from, business central into, sales. Next. Talk a little bit about the graph if. You haven't explored the graph it's kind of cool I just learned about it yesterday just. Kidding it's the day before. The. Graph allows you to go out and access data about, your customers, and about entities. Inside of azure. Using. A singular. Resource. A singular way of access you can get all of your data from business, central you can get your data from office you can get your data from just Windows 10 you can you can do this over all types of users this, is an improvement on the old way where oh I want to get my office data so I have to go up to this office API and pull in the data oh I want to get my business central south Gulf to this API and get my stuff central, this centralizes. Everything in a single singular. Way to access, it there's, one endpoint you use one authorization. Method, you. Have got one set of docs for the whole thing and one SDK, you don't have to worry about building 15. Different clients, you can communicate, with this. The. API is in the graph our centralized, and they stay consistent, so just like we were talking about with our API is where we don't change, them or if we change them we version, them so you get a new version the same thing is true inside, the graph they stay consistent. So. We currently expose, everything in the beta version of the graph and these are all the things that we currently expose, you can get all of this information about your financials. We. Do only support, get via the graph it's it's a reading, mechanism, here but. You can acquire customers item services accounts all these different things and in, the event that you would like to use the graph for your app service or all you need to do is query information this is useful because then you don't have to worry about a change and everything. All. Right so. If you've. Followed all this and you, went out and you developed your your connect app you now have an integration with business, central what. Are you gonna do about it and how are people going to start using your product that's.
Where App source comes in app. Source is a marketplace. For, apps that is, used, across the dynamics 365, spectrum, we. Use it inside of our products also used in F&O and sales all these kinds of things it's, the place to put your apps and your customizations, for people to find them connect. Apps recently. More recently at least have now been opened up you can actually add your connect, app inside of here and do things with it and people can see it and they can connect. With you to go get all of your stuff installed, and and figure, out a solution for you so. They're now listed, in app source and then our discoverable, if somebody goes out to the app source website and they start searching for apps for business central as a product they could end up landing on your, connected. App as a solution for whatever their problem might be. This. Is it advantageous as, well because we, list app source directly, inside, of business, central we have an, embedded view that people can use when they're looking like I'm. Moving around a business center on d'arnot I really wish there was a way to do this payroll thing, so they go to the app source page inside of business central and start looking for payroll and they'll find your your connected, app with. All the information that you've provided to tell them how to get it where they get it who you are and what it does. Additionally. We. Integrate, app source, into our search capabilities, if somebody doesn't, know to go out to app source to do this or go to the embedded view inside of app source we, actually if they just start searching, for general. Things like payroll, or, otherwise they'll, see, things from app source the section down here shows. You the search items that were scraping for map source to show it right into our product when somebody searches. And. We do have some success stories that I do like to call out we've actually got them out there that are documented, Shopify. Expensify, and ADP workforce these are all connect apps that some other companies have already built in that we've taken along this process so that they can be successful and people can find their connect techs and use them so, these are already out there you could be to and. Then I can put your name up on one of these these, fancy slides. Alright. So I also have some resources in, the deck but as. Far as that goes that, is everything I have if you have questions, please, feel free to come up ask them or you can ask them your seats and whatnot, outside. Of that please, evaluate the session and if you're interested in the other things that I showed. Add-on. Apps or individual. Customizations, I have some sessions ones right after this one in this room the other one is a little. Bit later but also in this room and. Then there's another another. Session about using, Excel and how, that works with Dynamics 365, and Excel actually uses can, use these sets of api's to go grab that data as a connect, app. Outside. Of that thank you very much for coming I hope, you have a good rest of the day and maybe I'll see you later for my other sessions. You.
2019-06-17 05:05