8/6 Ask the Expert: The Ultimate Service Portal Dev Menu with Jeff Pierce

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
hello everyone welcome to another house the experts on the ServiceNow community we've got some new technology we're trying to use for our ask the expert sessions we're doing a zoom webinar today that is live streaming on YouTube and we will be starting soon you've got a minute son for Jeff to cue up his slides and get prepared to demonstrate today the ultimate service portal so just be patient with us at Sam and please join and share your questions with us through the chat and we'll be happy to answer your questions you hey Jess I'm gonna go ahead and get started today sure let's do it alright alright you get my screen shared alright you should be looking at my screen okay well welcome to our webinar today service now that's the expert I'm Jeff Pierce with Serna solutions and previously out of Hawaii I've since moved to Carlsbad California sorry to disappoint I'm also joined by my teammate Alexa Guerra Alexa you on there yep I'm on here hi everyone yeah I like Sofia the nesebar do some of this on track all right today what are we talking about we are going to talking about building the ultimate service portal developers menu and I'll give a little demonstration of it first and then we will get into the details of how I said about building this so just before we get in you know just a little overview of some of the things we're going to hit we're going to be looking at how to include ng material components in your portal via dependencies and you will be using the SN record picker directive to do some fun stuff we'll be building a custom directives yeah angular providers will be building keyboard shortcuts and doing some fun stuff with advanced ServiceNow API more specifically with impersonations and update sets things like that all right so what are we building I'll give a quick demo over here so here we are we have a service portal this is a Madrid instance my personal developers instance and you see we've got a toggle down here in the corner she's got a goofy icon you can use whatever I kinda want obviously but I can click it or hit ctrl enter to toggle my developers side down here so that was a click but now I'm just going to use ctrl enter you see I can make that go open just with my keyboard or with mouse clicks so a couple of fun features in here one we have this this be somebody field so that's going to allow me to pick a user to impersonate I select that person you can see I'm now Abraham Lincoln and I have an extra icon down here letting me know that I'm impersonating somebody and I can either open up my menu and select somebody new to impersonate or just and ettiquette personation by clicking on Yoshi there so that's pretty handy feature when you're doing some testing and stuff in the portal being able to manage your impersonation right from the front end ok couple of other things we've got a link in here for the platform view so I click that and I open up the platform of you you can either use that link or as another keyboard shortcut in here which is control escape I hit control escape and that will launch the platform view to another very handy feature okay few other things we have reference fields for different objects I've just got a couple samples in here you know but this is really just to give you an idea of what's a what your potential is if I choose a page here so these are all my service portal pages and I open that in a new window whenever I slept it or if I want to go right to a widget it's also nice options there for quickly getting to records and then of course this menu that we're looking at right there I could pop that up and and quickly access the menu items so that's that is that sums up what we will be building so of course you can use the Khan I'm demonstrating here to take this even further and right now you can lead to really any type of a blister record that you've got and of course you can define your own URL options and stuff so that when you click on one of these say I can open up the widget in the editor mode rather than the platform mode alright so I guess that's that's enough of a demo let's go ahead and and jump into how we started building or how you set about to building this and of course we'll demo this more as we as we walk through it all all right so our first step with this is it's just getting a panel to open like this getting us this side nav component right this is an ng material component I didn't develop this off from scratch that'd be ridiculous I don't have that kind of time so you are now familiar with it check out this site material angularjs org I have some really great components that just you know are are nicer than the the standard bootstrap components that you're used to working with and out-of-the-box service now you know a lot of really cool stuff in here it's the side nav component that we're working with right here so it's really easy to go in and start using this stuff just check out the code your their source code and you can see how they are using these components so look at that this is material dangler j/s org that's where I got this side nav component from and so including it is quite easy first here let me close down all this stuff here now I already have this widget all built we're not going to build it piece by piece because I would just stay too long we'll have this widget available do update set and I'll provide my email at the end of this go ahead and just email me and I can provide you with the update set of this widget and the other couple of components that are required all right so let's break this down getting panel to open just like this so the first thing we want to do is well I have a custom widget I've created I've called it a spur side nap you can see in the client script here I've injected this MD side nav service now where does this come from this comes from my dependency I created now don't be confused dependencies even though it says dependencies right in this drop down these are not really well I guess yeah they are dependencies but these are really your angular providers and templates I'm sorry there's another one that shows up for templates but these are your angular providers this is this is not actually your dependencies that's a bit of a confusing thing with within service portal so if I were to go and look at this widget that I built the platform view then I can actually see the actual dependencies right I haven't a dependency your created for ng material but on the angular providers that's where we did the square of controls and that's what we see right here so this drop-down is mislabeled by service and a solution so be aware of that so the dependencies this is the very first thing you want to do when you create your widget is set this dependency up so you can inject that side nav service so this dependency is really easy so I selected it to you loaded on page load I'm just this is the service portal I want it loaded in I provided a module name which can be the same as the name that I gave it and then it has a j/s included and a CSS include all right so the j/s include is really just a oops that's not that you want instead of including a UI script we're just calling this file by by URL and this is the the javascript file for the angular material library right 1.1 got nineteen for the CSS same thing we're just calling in this angular material CSS filed by URL so that's all this dependency is right it loads your angular material j/s and CSS files so that your widget can make use of them so with that dependency attached to our our widget we can inject this service now and so we're gonna we'll take a look at all these things piece by piece but just a few to begin with so a couple of functions that are essential right here I have my toggle menu function which is going to rely on this build toddler so these right here are my side nav controls essentially they're just a couple of little function calls for closing and toggling the menu right and now whether I want to open it on the left or the right I can simply just specify that right here here in my side nav controls as well as here in my template where I include it so this is the other piece that you're going to need is the actual side nav components in your template right this is the side that I want to open on now I could actually be more elaborate with this I'm just using left because well it's a simple name and you'll see that if you go to the ng material site that's how they have theirs constructed okay I've included my own clothes button in here when I call it I'm just calling this clothes function that will close top of the side nav and then I'm using and of the content tags then to fill in all my content of the side nav so we'll get into those content pieces in a moment but this is essentially all you need to talk this menu opening close but now I didn't I didn't just drop this widget on the homepage though because I want this to appear on every page so I embedded it into the header widget so I'll just show you how I did that really quickly so first of all I hear this it was my theme that I created for this site which is so here's my theme you can see that I have a custom header that I'm using this is just a clone of the header widget and it's let's get this open the only thing I've changed in there was I added this as the first line to embed my way my side nav widget on every page we'll get to this in a second the the menu options but so let's just sum that up so so three things we did to get this side nav on this page is first things I created this widget right and I included the template for the side now I included some controls to to toggle it opening closed and of course I injected the service here into the client script as well as I created that dependency right that we saw the ng material one here's a thank you so that's what's necessary to get our menu opening and closing all right so next thing we want to do let's let's get a menu populate it in here so well we'll come back to this one right here the impersonation selector let's focus on this piece first so the simplest thing we can do is you know if for a developer's menu is add useful links in here and we'd like to add whatever things we want so I'm going to embed a menu instance into this so a top back to that that header widget and if you noticed I'm passing it options for a menu and this is the SIS ID of a menu instance all right so if I went to menus pull that up in a new tab here there it is swerve menu items so it's this this ID of this menu right here and I've gone and defined these different menu items all right so we'll look at pages and widgets widgets in a moment but platform and this menu these are are achievable which a standard menu functionality right now right so platform my link for that is NAB to do I'm going to open that a blank blank window right so I can configure a menu just like any other menu I provided assists ID of the menu as options to this widget and then the next step is within our side nav widget in the server script we can get those items here so by using espy Duquette menu items and then calling in that menu we provided the options we're getting our data items so in our instance here we have four items platform pages widgets and this menu so if we take a look at the part of our template over here what we're calling those in so here's here are our menu items so you see I have a special section where I'm repeating item and data items so there's our day-to-day items and for each one I'm saying if the type isn't referenced so this is a custom type that I've added that we'll go over in a moment then I'm just going to print whatever icon was configured for that menu item print the label give it a link price is a very very typical looking link right there right and well that's it for those so that's how we got these links on the page all right when I click them they do what I want but these ones are a little trickier let's go ahead and take a look at these now so we're using the record picker directive to create these reference fields so this is going to the pages table this one's going to the widgets table let's take a look at those menu items first here's our menu items the pages see I've got this type reference field that's not out of the box I created that so I created that and then I updated the UI policies for the menu item form so that table filter you know all of these fields would display for reference view because what I want to do here is choose a table provide a filter so in this case my only filter is actually just a soaring condition just blade yields etc and that turns into then a reference field of course not automatically let me just show you how we did that all right so here's the section where we're looping through our menu items right so here's the one that we print if our item type is not a reference field and here's what we're doing if it is a reference field okay so first we're just providing a label that's this part right there right just the label above it but then we include the SN record figured directive and so there were a lot of a lot of parameters to go along with this I'll just take a minute here and kind of walk through them well first know this is just an angular conditional directive first right but then you can provide it a unique ID so that you can refer to it uniquely going to give this a field is a is an option I'm sorry that don't an object and you're only going to pull up my the client script because they're there there's a couple things you need to do when you're using the SN a record thicker one is you need to create an object for each field that you plan to to use this is for my impersonation one we'll just use that one as an example for now and then that's what the value that you provide for this field parameter is this object which is essentially you can give it a name of value or so these are the values that that field are gonna start out with the starts out blank you just like and then there's the table you want to set it on your display field fields if you would like them to be able to clear this field out by that there's some other options as well when we go into the mom the field from this table that will be used as the value in this case this ID feels to include when you're searching your default filter all right so so default filter you see comes from the don't qualities the displayed fields' right so all of these are coming from our our menu item that we configured but over here in the client script you can see that right here we have to set up a field object for every one of these fields and because we're getting these dynamically from an actual menu that we've created we don't know exactly which deals those will be here in our client script so that way that's why for each item that we get from our menu right some data that I am supposed to give menu items for each one of those items we're gonna see is it a reference type if so then we're going to build an object for that field that's what we're doing here so so with our impersonation you know we did this manually right and for every field that comes from our menu we're doing it dynamically that's what that does and so so this is how we use our menu and that custom reference menu item type to create these reference fields so when I click into it I have the table and the filter actually the looks like this so learning actually does not seem to be taking effect I'd have to debug that a little bit actually in this case the Soaring is definitely working stages it isn't like they look at that may be okay but we added the sort through the filter yeah we did - let's go and check out that oh yeah here it is though here's our you see we did this writing that oh maybe that is actually the order of those does this look okay yeah that is yeah we're convinced details he's our M's acute page okay yeah so sorting is working that was just that was an odd order I thought I was things when my pages first okay so next when we click on one of these we want it to open all right I have this opening up in a new tab there so let's see what we did to do that okay here in our client script we are using the on watch to watch for field changes right so this is an event that gets triggered at the root scope level and all of your fine controllers can watch for it so what we're watching is the specific events and this this first section is for our impersonation otherwise we are assuming that it's just a menu link that we want to open so we were just getting the you can see we're getting a couple of things from the from our field object so in this case it's the table is gonna be the table name do since I was the society of that record and then we opened that up in a new window and of course just can't get any time you use a service like window or limitation make sure you inject that right okay so that's how we are triggering that that record to open in a new window now I just have this opening the platform view you may want to build in additional options right because if it's a with a widget you don't really want to do this view you're gonna use a different link format probably right you're gonna use you use this this format you open it up and this is portal with you know we visit page if you want it to open it up in this widget editor view or maybe you want to open it up in a modal in that case you can use the the modal widget to open up any one of these like the four modal just I'm sorry let me rephrase that if you wanted to open up say the form widget to display like in this case you might choose a page rather than opening up in a new tab like this we can open this form widget for this page up in a modal window right there is a there is an out-of-the-box widget that you can use to do that it's just called modal right yeah you can provided you'll need to provide it some options like what you know what widget you want and what parameters you want to find then yeah so the idea of the widget you want to embed in this modal and then the options that you want to pass to that widget so you have a lot of options for how to open them up right I'm just showing just one one example one thing I was going to build into this and I just kind of ran out of time was to include buttons underneath each one so that I select the item first and then choose how I want to open it either I open up a modal open it up and editor if you open it up in the platform in a new tab etcetera Sara so you know this definitely has a lot of room to build some additional enhancements in the gym all right okay now one thing I've noticed that as we are using this so say I select an item let's just do it again in this pick a widget I go back to my portal right this is still selected right now the next time I want to pick the widget I just gotta I gotta get out and then pick another one but that not this is a step I shouldn't have to do right I don't have to clear this out so let's actually take a quick moment we'll update our script so that after launching this widget we actually clear this yield out now so let's take a look at how you do that couple of things to close down here all right so here we go so you here's where we open the new link whatever we selected so now we want to take this this field and actually we want to set our display value and value back to the blank so what we can do so we have this array that we created here I'm sorry not an array it's a it's a parent object menu reference fields that contains objects for each reference field you want to include so actually we don't really have time right now on the call I'm not gonna worry about doing this because we've got other things we want to get through but I'm just kind of going to describe what I would go through to do that right after after listening to this field change you just simply need to look up in this object the corresponding object for the field that was selected right we could look that up by name then we just need to simply set these values back to blank and that will clear out this field right there could be some debugging to go in on that and I could take a good few minutes so I'm not gonna bother with that right now on the call alright let's take a look what what do we want to look at next I guess do we have any questions and farm posted about anything we've done any questions about our dynamic and creating these record Pickers now I'll just keep chugging along here everything's back I haven't seen any come in on either zoom chat or on YouTube but I'm keeping an eye out all right thanks alright so next let's take a look at what we did for impersonation so let's just demo that again so I'm gonna pick a person out of the list it's just they're always like everyone not a good guy okay now I have Lincoln I can do everything I want to do as him in portal I know I'm impersonating so I got Newton in the corner and he's going to end by clicking on losing alright so that's the experience for that so let's see how he built it now the first thing that I'll just show you then was rather than coming down to call square a couple of things starts out in the server script right there's a couple of lies system functions between use seem to find out if we're impersonating or who were impersonating and these are so get user name that's going to get the username of either myself if I'm not impersonating or the person that I'm impersonating right impersonator is I can get that by using this call get impersonating username so that's going to be null if I'm not impersonating there's gonna be me if I am in this game so I'm just setting this flag right here to - or false based on whether we have an impersonator present I'm okay then so my my conditions for seeing this menu in the first place I forgot them to point out you know of course I don't want anybody's see this so I've locked it down to admins or if you're impersonating right because if I'm in impersonating Abraham Lincoln who doesn't have I'm gonna have to rely on this alright so this is where it starts out right we need this of a server script to find out and to begin with if we're impersonating somebody okay all right next we need to build that field for the record picker and the client scripts for impersonation right it's just a very simple pattern here I need three values play a value value right these are this is the selected currently selected value right you want it starting out blank started out playing and then you just give that fuel to name I get a name this entity and then this is where in the template I've included that so remember down here I've populated most of this dynamically from the menu item your I populated it all manually there's my table display names and display fields my my query etc etc okay so when somebody selects a new user from this field remember this unhealed change this is what we were watching for the menu items but this if our field name is impersonation and right remember that's where we named it impersonation right there and also right there that's our link like these things to that was that and then there we're watching it then I said a value in Qatar did this is a variable I created to the sis ID whoever I selected from that field and then I call impersonate okay this is a pretty simple function we're relying on the impersonate API to to do this right from the client script but we're not going we're not making any additional calls back to the surface script here we're just using HTTP and this current resident API to make our impersonation pose so if you are going to the including rest api's in your client script remember you've got to inject these to compete in to your client who's rolling alright so what are we doing when we call impersonate if there is no impersonation target right remember that's the person we've selected then that must mean that we are not impersonating anybody where we're ending impersonation rights that you to to our ourselves otherwise you becomes that person that were we're targeting impersonation of so then we can just pass that in through our impersonation call here get the response no this is this is just standard response and air handling here but you know once once that impersonation happens on the back end that causes your screen to be fresh so this is really all we need to do here right either we're impersonating somebody where he was not going to be us or we're going back to ourselves in which new becomes our own ID and that sums up how we build this impersonation is Pregnant's any simple any questions about that no all right so there are two more things that I'd like to get into Karen you've got plenty of time one is how we built the keyboard shortcuts so that I can open this out by keyboard toggles or launch the platform view with keyboard toggles so we'd like to take a look at that and then one other thing is we'll experiment a little bit with adding and updates that figure in here also Jeff what about the button for ending impersonation where you have Yoshi oh yeah please forgot that you're right so let's see your where was our our end impersonation yeah so right here you can see we just have a very simple dip here actually nothing even in it I believe we just added all the visuals yeah CSS yeah so we just provided a gym and you know found that Yoshi image as a out online and we're from making that the background URL of that and so that only appears right the condition is if data is impersonating which defined right there and then when we click it we call impersonate and we're not passing it anything so that's this so we don't have an inter get so you just becomes actually nothing that's what it is yeah we're just passing you the blend value in which case it just sent them back to ourselves okay yeah so that's uh that's how we do the end impersonation okay let's let's look at our our keyboard controls so take a look up here see I've included square controls this is a custom directive you're not familiar with directives those are located in the modular angular providers [Music] and so angular providers come in a couple different flavors that the type and if you're used to working the angularjs this is very familiar to you actually you just opened one I created without so you can make directives factories services and I think one of the last expert ask the expert sessions I did I actually went through a lot of examples for not allowed to several examples of the different types of things you can do you know the difference between a directive and a service but this is a directive I use a directive because this is simply some some controller functions I don't really have any HTML between food but you know directives are ideal for one you want to include I guess kind of template eyes either plank controller functionality I'm like what we're doing here and or HTML that you want to another female templates so I've included that here via directive so I actually open that directive right here in the widget okay so it's a good practice that anytime you're doing Dom manipulation or or listeners stuff like that it's good to isolate all that type of stuff into your link function or a provider such as a directive something like that so what are we doing in here we are so this is standard copy for for you know options or for trading directives first these all mean something it isn't just totally cut and paste but for all intents and purposes here you're reproducing what we were doing go ahead and just copy what we're doing here the important stuff is this print here so here what we're doing is we're just setting up some variables to listen for keyboard functions and then going to assign those combinations to client controller functions so in this case we're paying attention to the control key which is event number 17 there we're also paying attention to the Enter key the escape key right so I've just set up a couple of con combos here so if my control key is down and then also my Enter key then I want to toggle the menu my control key is down and the Escape key then I'm going to launch the platform I can also set in a couple more here if I wanted like if I wanted to keep a shortcut for end impersonation I can do that it's actually let's go ahead and do that let's add one in for that and looks right out let's say and [Music] destination so let's say first I'm gonna have to let's say well for the sake of this will will make it a full combo so you'll need enter this game and control and I'm sorry says shipped here and supposed to say to control my bad alright so this game and enter so we're just going to add and in that case what do you say I'm gonna just call the same thing called over here and impersonate all right that's actually well hell you just want a little check in here first we're going to want to check the first data is in person so let's say if you're not impersonating anything we're not going to do anything right we don't want to mess with anything we don't have to okay let's give that a try so let's refresh let's be somebody okay oh that looks like we broke it all right let's take a look yo here was at this you know counting i refresh my page let's do that real quick try it again [Music] nope that definitely caused the problem a little of your audio I'm sorry was that getting quite there yeah thanks yeah let me just check my speakers real quickly so they turned up all the way alright we're good I'll just make sure that I don't mumble start talking to my breath when I what I D bug things alright so that's um obviously that needs a little more a little more work on that one so let's just get that one but you can see what the idea is I mean if I looked up another key value right now we can try and just do another one I don't feel like looking up those but you can do that on your own pretty sure alright alright so with got about 15 minutes left here I wanted to leave some time for questions anybody's got um I mean certainly you've got some questions right now you're curious about how I've done something you want me to go into a little more detail about it or other ideas that you've got you're interested and how I might approach that you happy to answer those otherwise I'm gonna take this last 15 minutes and we'll try adding on an update stuff bigger I'm not seeing anyone quite typing yet and hopefully they have their questions if they do have other questions after we end the broadcast I have provided the link on the YouTube chat for the community treadwear Jeff will be able to answer questions in the future if you have them if anyone else has many questions you can always reach out to me we salute or on the community and I'll make sure that Jeff gets those questions but if I don't see anything coming through yet so even with our delay in the broadcast so why don't we just continue to see what other magic that you have up your sleeve all right all right so what I'm doing here you see I just copied this section that we were using for impersonation and I'm going to create one for update sets now see what is that name displayed fields' about application a little trouble getting this to work earlier so that's good we can do buddies together all right a valued field that we're going to just ID'd search fields user name and those date Eagles I think that's the state value we're going to have to verify that there's a spacey okay first of all let's let's just try this but first we're going to those close that down and we have to create an object for that that update set thing that was our field right of these that okay oh we won't worry about changing anything when we pick something let's just focus on getting a you'll give updates that's first okay all right I have two of these sets in the system now let's let's see if we can pre-populate that with my current update set and to do that i am going to actually get the api for this we're going to have to dig in here so like first of all i'm going to check out what's behind this new i action make this my current updates that's my actions so this is waiting slowly loading okay so we can see that it is going to this script include calling dysfunction so let's just go to that screen to conclude so that's called update set ajax ajax there it is there's also an update set api yeah Spiner using one to possibly let's see let's actually just try this let's try calling this function see if that works so I'll have to do them from our server script today after impersonation so I'll actually look I was using well let's see if this one works first I pulled this one out of the other script including let's see what we get with that here so we'll just go check see if we're getting anything kind of me so I'm going to use a chrome plug-in here leave it's called dingy inspector it allows me to spec inspect the the scope of a long scope with any angular application browsers have a plug-in like this I know you have to get this one yourself I believe inspect believe this is it I think that's actually knowing what I have loaded here yeah so check this out ng inspect for angularjs and that gives you an extra tab down here so when you're inspecting your elements check out this other tab you'll have an angularjs and you can explore the whole full scope of your application so I can see right here in my widget I am actually getting my current updates that let me just I'll verify that this is this this I get my own thing set 76 d-beam let's just go and check that out I have simply default do not even update set so okay so I can see down at the bottom of the screen it is my current one okay so dated a current death set is valid so what I can do is here in my updates that object where I'm setting it to start out as empty what happens if we provided value we may have to provide a display value see what I see yeah you can see it up in populated something now that we have no display value so I guess what we have to do here is [Music] there might be a more efficient way of doing this to look that up though let's just go ahead and do this for now why can't I stop a day okay and parent that I'll display these people's display value all right so now you will use that let's try there we go okay so now here's an example of a field that I probably don't want to clear right makes no sense of me to clear this field what does that mean I'm gonna remove my current update set that doesn't make sense so right here in our template allow clear in our options false I set that to false so now when we open that up I can't remove it right I can pick a new one but I can't clear it all right so what about when we can click a new one let's go back to that string conclude so remember it looks like updated set API is totally valid script you can use to access some of these functions I'm actually just using old-school by I grabbed a code out of out of these older functions here so change update set is a pretty easy function to do so what we're going to do is we're just going to real quickly write condition here because we change we're going to when we select a new update set we are going to call a quick server update you know there may actually be a scripted rest API we can use like we're doing here with the impersonation but just because I got a few minutes I'm just gonna go a real quick straightforward way you so input input equals update set this and then this updates that we changed to we're using it in two places they'll just make that movie - okay so over here we're gonna have a new section where it farms dot field name equals update set then simply going to first of all define it in but deep equals that's going to be our new value where the value of those society the updates that it was chosen then we can go sorry scope dot server get I'm gonna pass it his input but one other thing we do you action and that's change up things right that's what we defined over here okay input then get the response just log that response there okay alright so that well of course we'll test this here with the finance we got left but that should be yet so when I select a new update set right we here that event here and we're testing the field names update set then we create an input object and we are passing to the Society of our new updates that we call server yet path you this object that will run this service group but with this new input object so everything else should be ignored only picking up this because we have to complete conditions on it and we use that glide update set object to for something ult say all right so let's give this a try a lot of moving parts there but see if we got them all right the first time okay so I'm going to try switching to this all right no I didn't really build any type of visual indication in so he just kind of hoping at this set at this point that it actually worked awesome fine okay i refresh my screen and it didn't change it over to secret side now let's try that again I'll just switch the default let's refresh all right oh very good okay so what I would do here is well it would be nice to have some kind of indication that is thinking or confirmation that it actually worked but as you can see or just we're just using these and I'm not really sure these will give us any type of parameters or indications at the tell whether it's finished or not so that's one thing that you could look into maybe Sanergy give any ideas for how to improve that otherwise you will just kind of have to guess that here it actually didn't change it but just fresh the screen now the applications picker that's a little more complex definitely not enough time here to do that today but fuel adventures go for it alright well that brings us to the top of our time hopefully I've shown you some useful things here this is a menu that really saves me lots and lots of clicks gets me to the things I'm most interested you know for example things like templates right we don't have a module out-of-the-box for templates you have to go you have to type that table name in on your own wanted to do that so that's a great thing to add in here right to be able to get to your template smoothly or you know other common things that I add in a link to my subscription clearance widget instances there's all kinds and things that you want to get to easily when you're developing service portals without having to jump to the the classic UI all right well that's our time thanks for sticking with me here again my let me throw my email address up here Jeff that appears as Sarah no solutions email me here you got any questions or I think Lisa's posting some other information now you can get in touch with me I'm happy to send you the update set for this widget and for its components you know the the directive in dependency that went along with it so happy to hear from you that's great thank you so much for sharing today and I hope that not only just take the time to rewatch this and absorb all the wonderful items that you were sharing with us today and we hope that you also look forward to more ask the expert events on the ServiceNow community and check maybe I'll do another one before the end of the year wonderful awesome all right have a good day everyone thank you you
Info
Channel: ServiceNow - Now Community
Views: 1,822
Rating: 5 out of 5
Keywords:
Id: UyqmFX0CJvw
Channel Id: undefined
Length: 64min 1sec (3841 seconds)
Published: Tue Aug 06 2019
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.