logo

NJP

Creator Toolbox - Migrating scripted integrations to IntegrationHub

Import · Mar 17, 2021 · video

hello and welcome to the creator toolbox my name is chuck tomasi senior developer advocate at servicenow and joining me right over there is good day everybody i'm andrew barnes developer advocate here at servicenow all right we've got our obligatory morning style talk show coffee mug ready to go i know it's probably not morning i know mark is on dhruv is on so we've got people all over i should start out with my good old community live stream good morning good afternoon good evening wherever you are and whenever you are welcome to creator toolbox this is a show for you developers builders interested people that are looking to expand their knowledge about servicenow the platform the tools you can use hence the name creator toolbox and i'm going to show you something today that i recently ran into as recently as last thursday friday so this is this is pretty new stuff not new in terms of cons pretty recent it's pretty reason but new in terms of something i had to solve and in the spirit of the long deceased well recently deceased community live stream i'm going to show you how i approach to this problem to convert a scripted integration which trust me i have plenty of those skeletons in the closet i i think you do too andrew prior to integration hub we did everything with an outbound rest message v2 put a script include hooked it up to ui action or a business rule or something and it would get triggered and it worked it worked very well and we've shown how you can build and prototype and use the rest api explorer and do all this fun stuff to get in and and create those but i'm here to show you a better way as carlos said maybe it was devin devin on the chat was saying i need to help my people understand that we need to get to integration hub i'm going to try my best to show you some value of why you want to stop building things in script i mean as fun as it is as a developer to do that trust me it's it's a lot of fun it's more fun and more beneficial to you in the long term to build an integration hub what would what would you say your key messaging around integration hub is andrew uh build faster and more maintainable like that's that's my that's my five second plug for integration hub and if so i i have moved uh pretty much any integration development that i do into integration hub because then it's maintainable and understandable uh faster and easier for anyone else who touches it and really centralizes it and allows me to to have visibility over what's what's happening um you know that that execution area in in integration hub such such a time saver it gives other people an easier interface into your in into your integration as well if we were to write a script include the only way to interact with it is going to be through another script i mean let's face it it's going to be some server-side component a ui action a business rule workflow you you get the idea however if you build it in integration hub you still have that avenue to approach it through the flow api but you've also got the ability for people to put it onto flows so now you've opened it up to a much wider audience so you as a developer still get to build those cool integration touchy-feely things to exchange data and this has been the highlight of my career pretty much since the beginning since wiring soldering serial cables and hooking up modems and making we won't go that okay dinosaur time but it's still a thing on the internet with public protocols and apis so and and the maintainability and the reusability it just again if that doesn't resonate as a developer you might want to have your head checked i don't want to be a little harsh here but let's let's come to reality if something if i can get it done faster and easier and less maintenance those are golden for me all right enough about the talk let's get into the screen sharing so i will once again do my mysterious where's my cursor apparently i'm on desktop 3 today so let's do that i don't even know where desktop2 is what's over there okay and the problem statement du jour for those that don't speak french that's the problem statement of the day i'm sorry i haven't i don't know what level of skill people are watching this so i'm probably going to explain everything at an atomic level okay the the problem statement we have is i inherited a project from a co-worker sound familiar it may for you it is for me so my good buddy podcast co-host long time friend craig stepp created a url shortener we have been broadcasting these things through bitly for years bitly slash tech service now dash tech now bitly slash tn85 reg bitly slash you know sn build that js they're easy for me to remember easy for you to type i can go on and on about them but recently we've had some not reliability but just general service issues with bitly i needed to change a redirect oh that's going to cost you some money you only get five of those a month i had about 20. how do you do that there was a bug in their software i used up all my redirects and they couldn't fix it until after the event had happened and i said that's pointless so i said okay craig let me take a look now craig has been using this for a number of years for cloud labs and i do have the cloud labs instance over here because when you go and use an electronic lab guide or get an instance it'll say like c labs dot link slash something okay so handy oh especially when you're dealing with long instance names that have you know part of the lab name in there dot lab.servicenow.com blah blah blah blah blah like nobody likes those long urls we have url shorteners for a reason they've been around for a long time well craig enterprising individual and software developer decided i can write my own redirects aren't that hard what he built was a simple php application with a my sequel database that says what do you where do you want to go what do you want to call it and you put in a couple other parameters so you can see like uh the karaoke app i can go to we registered a new domain goes to hey guess what it goes to karaoke unfortunately it doesn't do it in a new window so i got to do that again sorry the uh and it contains a few basic fields let me make that a little bit bigger for you we've got our slug the part that goes after the we registered the domain new domain so you'll start seeing that pop up in your newsletters and whatnot uh he also had an interesting feature on there called a landing page because he recognized that some organizations especially behind the vpn don't allow you to go directly to a url if you click a redirect you'll go not going to let you not bitly not owly not tiny url but if you go to the landing page it will say i'm going to take you there in five seconds or you can click this link to go now one of those deals you've probably seen those so that's an option we can turn on and off per link love it beautiful thing we're talking about a few other design ideas now that i've implemented some of this i recognize where we can do some improvements we're having a discussion about that tomorrow but for now i've got an api to create links and update links and it is currently driven through his wonderful script include that you see over here which has a rest message and some methods message v2 message v2 yeah use that a lot you can practically type it without even thinking about it and it does a post uh it is it's not a post post it's one of those form url encoded url things where you're setting up query parameters which is fine that's how his php app ingests the information and i'm it's easy enough for servicenow to do that so i reverse engineered his app first of all it was global you can see from the script include that okay it's it's global i wanted it scoped so that we could hand off this spoke and use it for something else he gave me two update sets which were highly incomplete well this is there's not even a table definition of where you're storing this stuff so he gave me the ability to review this and i built out the table i call it lynx and he had a couple fields in there that i didn't need like location he wanted to know if this was a sharepoint link or a onedrive link or a google docs link i didn't need that i just let's stick with the basics so we can give it a label call it creator toolbox and ctb would be the slug and just for fun we'll just go to https servicenow.com all right and redirection url is going to be the link i get back now right now it doesn't do anything because i haven't built this yet but that's what we're going to do we're going to take his code his api interact with it and get this information back hopefully in the next before this ends this is going to be somewhat live coding happy hour style uh i was playing around with it before i could set the landing page owner defaults to you a lot of this is informational on the servicenow side it doesn't go to the url shorteners you saw there's no owner field over here and he's doing the expiration date on there he said we got to fix that you shouldn't have a separate cron job on your server doing the expiration that's something servicenow can do very easily just make an active flag and when it's inactive it doesn't work i'll take care of that on this end so more or less design things that we're going to look at see it didn't do anything when i saved it we got to go build that so we are going to use his script include as a basis for what we need to put into our new action on the flow any questions it seems that seems like a reasonable uh thing to do um i'm all for it uh i don't see any questions uh coming through okay um for me uh this this seems like uh a fairly fairly easy lifting shift let's do it it always seems easy if you say that it you can get caught up on the silliest things which hopefully i've already skimmed my knees a couple of times on this before so i am inflow designer this is a quebec instance is my pdi and so if you notice a few things that look a little different from your instance cosmetically like the oval pill here instead of rectangular you'll know why i'm going to create a new action uh let's call this create short link let's not spell it incorrectly it's going to go in the url application create a short link from craig's app i don't know about the description but we can always change that later okay up comes action designer now first thing we need to know is what do we need to pass to his system i took that script included and i did a little reverse engineering on the documentation and i came up with here is my crummy old api dock for create link let me move that over a little bit how's that looks good okay might still be off the screen for some of the text but i could see i need this content type he passed this in his rest message on on cloud labs so i've got to put that in there somewhere i've got query parameters and query parameters and query parameters to build one is a function it's either create update or he's got a couple other commands this is the command that i wanted to do so he doesn't have a get versus a post everything's pretty much posed and you know sometimes you you got to live with the apis you're given absolutely you can't tell the author you should really be returning a 400 or a 500 if there's an error but he doesn't he returns that in a status and message payload okay we'll deal with that i've got an api key uh we may need privacy shrubbery later so no i've already taken care of that i apologize i i'll show you where i took care of that now if you i'm gonna jump back to this url shortener and show you a fault here craig is getting his api key per application instance he's got to have a different script include for every one of them because he's storing it in a system property no no no no okay that's that's not good the api key comes from one of the things in the database out there on the url shortener so we can we can deal with that oops where was my notes here i give it a name that's the label of the url creator toolbox expiration he's dealing with that right now it's a mandatory field there's a bug in it when you update but we'll figure that out later the slug is optional if i don't specify one like ctb it'll generally generate one yes just like bitly you're gonna get some letters and numbers five six characters long whatever it is uh and the obviously the long url where i want people to eventually go that landing page whether i want to stop there or go directly to and you can see my response comes back something like this i've got a status he gives me an id which is an integer i've got a short url that's the redirect that we were going to originally use it gives me back the slug which seems a bit redundant to the url id we're going to have a design discussion about that and any messages like hey that slug is already in use or that's an invalid api key so if i get success or failure in the status i better look at the message there's a failure message which i mocked up so it gives me an idea of where we're headed for this so i need those inputs what do you think i should pass to this action would it be all those individual pieces or would it make sense to send a link url i mean a link glide record um it seems like i would probably accept a glide record if you're building this just for one um one table and type one table yeah but if you if you're trying to make this generic to accept you know anything uh then then you individualize it or turn it into an object that a you know a pre-step would build so you could have a a different action that uh that's specific for um a a content type to to build a payload if you need it uh and send it over yeah i'm i'm thinking that we want to make this a little more flexible yeah i'm thinking an individual input there's there's quite a few of them so i agree with you on that because this could be used for artifact manager but i could give this application to somebody else and they go well you're passing an artifact manager glide record that doesn't do me any good on the action level now in a sub float it would that's going to tear into the pieces that you need for whatever you're passing into the subflow but i think to make this more generic it should have its own uh own individual parameters so i start by clicking create input up here in the upper right ish and one of the things i know i'm going to need is the [Music] long url long url let's we'll start out with something easy label is a string we know we need that right we need key name and expiration so let's make the mandatory stuff first okay e um what was it url name expiration name expiration e name expiration oh and url and url okay key no we already got name it's label it's keep things somewhat consistent here i think i called it the field label on the table but we'll resolve that later uh key is required for the api but i'm not passing that oh yeah that comes from my credentials so it's going to be expiration which we can set as a date or date time i can't i think it's a date time we'll make that mandatory and would we have a default value we could we could make this no like something 100 years from now it's got to be it has to be passed okay we'll we'll leave that alone we'll leave that alone yeah let's put one in there but i mean it's mandatory so whatever you pick there is what everybody's gonna use if you if you put one in there uh that's true okay we'll we'll leave it alone you have to put something in there even if it's the created on date from the record you passed in we'll use some date or use the date picker the url was a url i believe that's one of our data types here so i'm just specifying what goes in and we also have some i would make that a little more human readable than url um i would say target or long or something okay it's more specific sure because we have two urls we do we have the one we're sending out and the one we want to come back okay so well we have the slug we don't have we're not sending in the the slug url that's what we get back gotcha what else can we pass oh landing page landing page now this was a choice and do we have the option of getting a choice from another table in here i know we do in some places click the create new choice list drop down part create new choice over here you know uh so there's under choi name max link choice create new choice list ah reference there i knew i saw it somewhere before okay so we can say go get this from the url shortener link table and use the landing page choice list that way if i have a yes no over there i'll have a yes no here if i have a true false there or a maybe or an i don't know or don't get whatever choices are updated over there get updated here automatically we are going to default this to yes because we need something so we have def come on pick it uh that was just slowness it was making me nervous like something might have locked up save we'll do a break brad will be delighted that you saved um again on the name of her landing page i would probably say use landing page ah always with because you really want this to be understandable to the consumer of your action you're right we do and we can oh can we not change the variable oh we could is my i think once you save it that that is that's okay it's read only at that point we won't see it unless we try to script something okay so we've got name one two three four five what else we have function is going to be hardcoded in this key is going to be from the credentials one two three four five i think we got him our inputs are set save again just appease the gods now step i think we just go right into our yeah it feels like since we're not such atomic uh inputs here uh we we really go straight to the rest call this is much prettier than it used to be i like this so let's go to our now you probably won't see rest if your actual in fact this integration section may look a little different if you don't have an integration hub license so check your licenses you can enable it on your pdi so that's always fun my connection i'm going to use a connection alias that i previously set up now this is kind of cooking show on you but if i go to connections and credential aliases you can see i have one called url shortener not imaginatively named but you don't want to make it too hard for people to find it and it is using a connection down here that says here is my api endpoint that you should use as a default here is the connection alias so if i do this in my dev instance and then i promote it to my prod i'm going to make another connection and credential that match those names because all the flow is looking for is this alias called it's kind of a pointer to a pointer thing where'd it go snc url shortener that's all it knows and the base url comes from that connection so if you try to bring this over to prod and run it and it says i have no idea where you're trying to go you didn't finish the job on the connection and credential part i will be making videos of that when i get to hopefully get back to that integration series soon okay and in a shipped action for example you wouldn't even ship a credential with that connection alias so it would you know you might ship a connection if if it's a known endpoint but no credential at all record would would be shipped with that so that you know for sure you need to go set this part up yourself and you may have a different connection for dev versus test versus prod because you may have three different endpoints or three different instances out there in the cloud you're saying i don't want people in dev monkeying with my production ad server so please stay away from that we've set up a mock one over here for you to build new actions yep okay so build requests manually well we don't have an opinion api spec for our tiny little php program so uh our resource path comes from the base url so i think we're good we're going to do a post and this is where we start building out of the spec we have query parameters and headers so let's first get the header before we forget to set that uh type for sure you you made it content type was something i can never remember what the format of that is so we'll do a little copy pasta a little copy pasta oops don't forget the application part that would have been bad there we are donut application json i can spell i can never remember it's x www formula code and xu ah forget it that's why we have documentation people okay our query parameters we know we need a few of them and per the documentation we need our key which look at this right here over on the data panel we've got our credential value all you have to do with api this is one of the reasons i love api keys that's it so it's going to pass that we have our function and when i started first messed around this i completely forgot the function part and it really messed me up because it's like why am i not getting a response oh i'm getting a 200 but there's nothing in the payload what come on do something do something you have to turn off to tell it to create and then it's pretty much the rest of our parameters and they have to be named whatever his app is expecting so even though we called it you know we may have called it label or you target url or use landing page watch the case on some of these things they will come back to bite you so i have name i have slug i have url i have expiration and i have landing one two three four five plus my two for function and key and i think we're gonna can we pull open the that dock so i'm the kind of person who pulls open the dock and slides it to the the right a little bit and make sure that i can see both of them at the same time okay yes good i got it the other way and we'll notice it disappears into another screen it went up into the let's let's see if we can we'll notice that landing needs to be fixed because it's landing capital page yes did i spell that wrong oh look at that yep you are right see we would have got caught on that it's landing capital page so this is a good copy pasta exercise again so it's expiration everything else everything looks fine good catch good catch a side by side comparison always helps now it's just a drag and drop exercise this you can do in your knowledge labs target url is url slug is slug and remember if we don't feel like you're taking taking some tests match match these things together drag them into the boxes let's see uh credit card number goes with this one yeah is does the does the monkey go with the banana i can't remember there is no payload yeah so this that's this is the part that i i feel really bad about because i made a post with no payload but when you're dealing with these everything goes in the query parameters and it kind of makes the payload for you all right that is that let's save then one of my favorite parts we're going to get a response back from this and it's a matter of what do you want to do with it well as of was it paris we have this json parser was a paris orlando json json parser would be paris okay where'd it go do i not have it on this instance well that would be massively disappointing [Laughter] really utilities script payload builder email notification log ah where's the xml parser it's there's xml it should be here there's jsonparker we went right by thank you somebody in the chat's probably going it's right there yes blind okay so my uh thought here is i should i should run the rest step um and then that will get me a payload yes to put in here okay when you say run the rest app so so execute our action so run a test so we can get the response payload so that we can put it into the json parser quick save you want to see in the execution details what that payload looks like yeah test name andrew expiration it's not actually doing an expiration so i don't care what that is target url google.com [Laughter] slug ajb and we'll use a landing page asked this you know you may want to just test your api before you even start building the action in postman or curl or something just to make sure you've got the general idea of what's going out and what's coming back and that there's no unknown variables within servicenow i've done that a number of times we did not do that today i may be recording i could not have said that any better chuck that that is uh i was going to mention or you already have a payload that you from a prior run in postman before we even went to servicenow or from documentation would help too i like to get a real one that's true in case their api docs are a little out of date which happens okay you see i made a uh fancy icon here more more of my powerpoint talents at work there so let's drill into the step the json parser failed because it didn't have anything to work with but let's go into the steps like you said oh we got goodness it looks like we've got goodness there's our query parameters and down here is the 200 response body he always returns a 200. everything's a 200. everything's at 200. i think you've mentioned that and it there will just be something in the message if it bothers me um so we have the message i thought you could status the response message it said success so let's copy and pasta this out i thought we could copy and paste from a little pop-up modal yeah i thought that had a pop-up model as well but this guy does but that's not what we're looking for that's that's the response headers anyway let's see what happens with that so we go back here we got a response paste it in there look at that it generated us no don't please don't go back i hate it when you scroll too far and the browser goes oh let's look at the urls hold on i gotta i gotta zoom out a little bit here urls there's ajb sweet nice edit it we got data in here so our create function is actually working i'm happy oh it even sent along the display value and got interpreted right we didn't have a time zone issue i would have sworn we did okay so we've got our sample payload and because my font is a little big here we're going to go to generate target still a little big so let me back that off yeah still a little big so big big friend of the show corey is watching and uh he he says sometimes that he uses that as a a url shortener as an interview question which is not an uncommon uh interview question but how to do it on the servicenow platform uh is is a new spin on it um and i i love this as an interview question because you can really really get in depth uh with with this because eventually you're you're basically building a file system and you you can go really really too far with this question yeah i mean the only thing servicenow won't do for you is the redirect part so you got to have that domain out there with some sort of redirector client working for you but yeah you could build the rest of it but nobody's built slow yet we are in uncharted waters today okay so we pasted in our sample payload we hit generate target and look what it does for me it creates this thing called root which i have learned to not mess with i just sometimes it just like destroys my object and i don't have a good day i i've tried relabeling some of these like but you know what for the purposes of the json parser i don't care and for the purposes of this exercise let's not and everything else comes back as string string string string string actually url id is an integer what we only have these things that you can return in json parser well that's fine and dandy we'll leave it as a string if it's quoted fortunately javascript is loosely typed it's javascript the uh variable objects are made up yeah and the types don't matter there you go thank you for the uh whose line is it anyway reference we would have to make a t-shirt of like that the java that what was it that the variable types are made up in the yeah the variables and radar don't matter that's awesome i all right so we've got our output of our json parser down here ta-da there's the five things that we expected in our payload we don't have to do any scripting to say this goes with that we could if we wanted to get down to the you know touchy feely on the each property but we don't want to just for speed and elegance now here's the part i like i do my create output here this is the output of the action this is what somebody using a flow will see and use so i call it generically response because i have no i'm not the world's best uh architect when it comes to names i'm going to boost that back up to 125 and i'm going to create an object because i can see from my json parser it's just an object now here's the fun part if i exit edit mode and i drag this root thing up here it does all of that property makey stuff for me so let's do save we'll create and we'll do another test and we say this one we'll call i think i might already have one called chuck i'm not sure i'll run out of variable like you say the variable names are made up i can't yeah i have one called chuck maybe we'll do that when we update something so let's create one named after uh brad brad's not here brad's not here red's cool short url and expiration again pick a random one because it really doesn't matter if you pick one in the future it comes to the top of the list so we'll do that target url https brad hilton.com that's when you question why did i get a vanity url now did it create we we passed it a slug for you so it created this slug ajb let's not pass a slug for brad we want to test that part of the logic too and let's not do a landing page i didn't even show you what the landing page does so you had i understood but yeah i mean it shows something and i've got to get craig to fix it but if we go to dev link dot sn slash ajb trust me i will be deleting this demo data so don't think it's going to be a wonderful thing there's our landing page that says hey here we are we've got a couple seconds to hang out so you know you can click it if your company doesn't like it and we go to google so we're going to do you know what there may not be i didn't even check if there is a brad tilton.com but maybe we'll get a 404 or this domain is available kind of thing all right we'll run our test and think about it that's a pretty easy thing for most people to fill in if they're dealing with an integration a couple of fields that are required not too bad absolutely we before i before i see the execution details i like to see if the data's there oh looky there brad's cool url and it's auto generated yup so in case you just like to say that it kind of looks like leet speak we can edit it and craig's also got this qr code generator on this side so if you wanted to you could see that in a modal or something i'm not sure if we're going to keep that on the client in the next generation or that or we'll put that on servicenow too but it's a nice feature to have and if we go to cny3i it goes yeah yeah it's not and i closed the thing again i really need to do like a command click on there awesome yes it should have worked and again i can see the execution details now this time ooh ooh what happened to my json parser we still have a problem to fix here andrew this is now a live coding happy hour territory all right our json parser is not happy happy so what happened did we actually pass in all the data to the json parser this time i can do that i can click my you know what i think you're right i think i don't i don't either we got a little excited and yes we forgot to say that source data is empty up here we kind of need this piece right here where the flashing circle is yelling at me so we'll use our new data pill picker that looks like uh it's taking some sort of high school test fill in the ovals completely and use our rest step response body there we go that should make it happier and just for fun let's get rid of brad and regenerate it and regenerate it okay i don't think it's going to come up with the same variables but test spreads cool link to expiration the return at brad's cool link the cool link strikes back target url https servicenow.com funny how that just rolls off your fingers we'll say no we didn't validate that piece but we can do that now and this time we look at execution details first hey no errors that's always a good sign and we have a response object down here and that looks pretty great and if i click the response object look either i have an id which i can then go put back into the record i have my status as success which i could evaluate if i were using a flow api or even in the flow you know it if i'm using the flow or the flow api i could generate an error message or log something or be able to put that on so this is pretty fun this is pretty fun that is pretty fun nothing i know yeah go ahead the only thing that i would add uh if i was creating this myself is i would add a an error checking step um to handle that for my users so that they don't have to build that into the flow directly let's talk about that where would you put that because we don't really have an if conditional thing in here that we can put into the action builder so how would you approach that that's a good question so i would either do one of two things i would either so first off i would break out the uh status um and error into the their own objects okay um in the output um so that it's easier to like consume them uh because that's the standard pattern that that we're using sort of like how the rest step has them broken out you've got the response body and you've got the status code um and the error message broken out as separate objects um so you might start with that you mean like status here okay and and that's pretty simple and then i would create a subflow that that invokes my action and handles the error checking it as a shippable like that's how i would ship this yes and that was actually the next step i was thinking of don't go right to a flow because as we've mentioned in the past so if we were going to do the status we could pull the status right out of root status just think i'm still in edit mode oh you're thinking something like that yep okay interesting so you don't and i know i already have that data but yeah just the the pattern of where i expect it to be and how i i i expect to use it good point um is is a as a separate separate um variable megahertz is saying he's seen a script stepped out for the json parser and i've done this as well i let the json parser do the heavy lifting of create the object for me and then perhaps a script uh one thing i've noted when i have an array of objects coming back from the payload is it's tempting to go great now run a 4-h over there we had an issue i think it was in orlando or paris might have been orlando because i was building data streams last summer and if the count was zero your flow would crash i mean it wouldn't it wouldn't like skip the four each and go i don't have anything to iterate so forget you it would just hard crash you'd get an error i don't know if that's been addressed but since then i've made it a standard practice to return a count so i put a script after that and say look how many things are in this object so i could put an if before my four each so nice it's it's sort of built and suspenders and it may be moot at this point but it's one of those things that once you're burned you kind of make it a practice so true the other thing i wanted to point out is when i publish this let's let's actually publish this on this instance so that it's available to our users we're fairly confident that we've got it going the uh come on save save save it's always the demos that go slow i now have create code snippet and it's very common for me to invoke one of these from say a ui action so you can copy and pasta this but notice down here where it says uh response equals outputs response and you know that's my object unfortunately it is called response watch these if you want to process them this one should probably be called status equals outputs substatus if i was going to drill into that object i still have to i'm sorry i was looking at outputs never mind these these down here i totally missed them because i was working directly on outputs result.getoutputs returns you that object of object object of all your answers so i had to dot walk into there before i took your tip of pulling the status out manually i was i was trying to go outputs.status and it said i don't have anything for you i don't i don't know what you mean it should have been outputs.response.status so be aware of your output data structure i've gotten caught by that as well nice so uh it feels like we have reached victory we have a working action we do that uh you know invokes our bitly or our short url crea i love how it's so synonymous that i'm like sure url means bitly yeah it kind of does it does now i mean i used to say tiny url for years but so it feels like uh we've we've reached a good uh wrapping up point we have i think and like you said the next logical step i'm gonna stop my screen share the next logical step for us to take would be to build those sub flows that can then do some of that error checking and handling for us that we could incorporate into other places that would be the standard architecture that i would use if i was putting out a new spoke is let's build the actions to do a specific thing create a link return a response did it work or did it not but subflow is the part that other people are actually going to employ and that's where you can say here comes a record of this type or uh i like to pass entire records now because it just saves you from so many other parameters it's so nice to pass whole whole records and and with the subflow architecture um you know design it would be very easy for you to take a generic example and say here's how you can do it for a record as your input for a subflow and they can just copy that and change the data pill for the the field references and their their record they're sending in to where they go into the action um and and and move on from that point so that it's consumable by their users in flow i hope that this video was helpful to you to see how quickly you can take the docs maybe a previous example of how something was built and then turn this into an action that you can put into a subflow into a flow and and work up from there very quick very easy very reusable any final comments any announcements we've got uh we have got uh you know creatorcon is coming up quick uh so you know it is right around the corner we are working fast on uh and furiously on on generating the awesome content uh for our knowledge and creatorcon sessions coming up in may um i you've got a breakpoint coming out tomorrow uh that is with uh chris haas around uh the app engine studio looking forward to that yeah that's gonna be a good one and then uh we will be we will we've got tech now next week on app engine studio with both valerie myers christensen and chris haas so if you haven't registered for that there's still time this is being recorded on the what day is it is it the 16th it's the 16th of march 16th [Laughter] that's how hard we're working we don't even know what day it is anymore day is it again uh one week you have one week because next tuesday there won't be a break point it's the last tuesday of the month no it's not it's the 23rd the last tuesday is the 30th it's supposed to be on the last tuesday i think we're moving to that anyway tech now next week sign up for that we're still using bitly so bitly slash tn85 reg nice but that's probably the last time i will say a bitly link an app engine studio just released last week so if you don't know what that is that's okay go register for that tech now episode and and learn more about it uh and listen to the podcast tomorrow uh if you're you know watching this today or uh you know go get the podcast uh you know from your local podcast area uh with uh chris haas so both of those product managers valerie and chris are awesome to engage with and we're really excited about app engine studio thank you very much andrew for all the help the suggestions the button pushing and we will see you i'm still working on this sign off we'll see you soon if not sooner awesome thank you everybody bye you

View original source

https://www.youtube.com/watch?v=RTn4-zDEv3I