Quantcast
Channel: Service-Now | John Andersen
Viewing all 82 articles
Browse latest View live

Custom PDF Files in ServiceNow through PDFCrowd

$
0
0

pdficon

PDFCrowd is a cloud-based PDF generation utility that leverages a basic web service API to receive HTML data and produce a PDF rendering of the page. PDFCrowd gives you a handful of free credits to get started and then charges a monthly fee.

While there may be other PDF generators out there, this integration could easily be adapted to be routed to another generator of your choice.

The integration allows you to both preview and download custom pages to a PDF file locally through the browser.

While there is built-in PDF capabilities in the ServiceNow platform, it is tied to table forms and has a set format. For most customers, this is sufficient. However, here are a handful of use cases where a custom PDF capability would be useful:

  • Display data from multiple forms in a unified view
  • Capture snapshots of a record during different stages of its lifecycle and display those snapshots for the record in a PDF
  • Put a custom header and footer on different PDF records you want to export

Setup and Configuration

Download the update set and install it into your instance using the wiki documentation on how to load an update set from an XML file.

Once you have loaded the update set, previewed it, and committed it, an application called “PDF Preview” will be loaded into the instance (See picture below).

Screenshot_4_25_14__9_57_AM

Click on the “Settings” link and fill in the information required for the integration.

Screenshot_4_25_14__10_01_AM

Designing your own UI Macro

The PDF Generator will leverage “UI Macros” as the renderer for the PDF document.

You have the option to only allow UI Macros that have a “pdfpreview” prefix on the macro name if you want to lock down what kind of macro content can be used to generate PDF files. If you choose to do this, go to the “Settings” link in the PDF Preview application menu and set the “Require the pdfpreview macro prefix” setting to true.

A sample UI Macro is included for you to play with:

Screenshot_4_25_14__10_39_AM

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">

<g:evaluate object='true'>
 var record = RP.getParameterValue("record");
 var gr = new GlideRecordSecure('incident');
 gr.get(record);
 var info=new Object();
 info.short_description = gr.short_description;
 info.number = ""+gr.number;
 info.journal = ""+gr.comments_and_work_notes.getJournalEntry(-1);
 info.caller = new Object();
 info.caller.name = ""+gr.caller_id.getDisplayValue();
 info.caller.email = ""+gr.caller_id.email;
 info.caller.notification = ""+gr.caller_id.notification.getDisplayValue();
 info.caller.location = ""+gr.caller_id.location.getDisplayValue();
 info.caller.num_incidents = 0;

 var incc = new GlideAggregate("incident");
 incc.addQuery("active", "true");
 incc.addQuery("caller_id", gr.caller_id.sys_id);
 incc.addAggregate('COUNT');
 incc.query();
 if(incc.next()){
  info.caller.num_incidents = incc.getAggregate('COUNT');
 }

 info;
</g:evaluate>


<div style='padding: 2px; font-size: 1.3em; font-weight:bold; width:100%;
   background-color: black; color: white;'>
Incident Info</div>
<div style='background-color: #EEEEEE; padding-left: 20px; padding-top: 10px;'>
    NUMBER: ${info.number}<br/>
    SHORT DESCRIPTION: ${info.short_description}<br/>
    COMMENTS AND WORKNOTES: <br/>
    <pre>${info.journal}</pre>
</div>

<div style='padding: 2px; font-size: 1.3em; font-weight:bold; width:100%;
   background-color: black; color: white;'>
Caller Info</div>
<div style='background-color: #FFFFFF; padding-left: 20px; padding-top: 10px;'>
    NAME: ${info.caller.name}<br/>
    EMAIL ADDR: ${info.caller.email}<br/>
    EMAIL NOTIFICATIONS: ${info.caller.notification}d<br/>
    LOCATION: ${info.caller.location}<br/>
    TOTAL NUMBER OF OPEN INCIDENTS: ${info.caller.num_incidents}<br/>    
</div>

 
</j:jelly>

This UI macro displays a few fields from the incident record as well as some additional information such as the history of the comments and worknotes and some more detailed information about the caller, including the number of open tickets they currently have.

The Sample UI Actions

The integration provides a couple of sample UI Actions that either shows the PDF Preview, or skips the preview altogether and generates the PDF document directly.

The code to these UI Actions can be viewed by personalizing the sample “UI Actions” on the incident form. They are inactive by default. If you want to try it out, you will need to activate them.

When activated, the UI Actions create links to the Incident form:

Screenshot_4_25_14__11_31_AM

Here is a sample preview of the demo UI Macro:

Screenshot_4_25_14__10_48_AM

If you click the “Generate PDF” button, the HTML will be sent to PDFCrowd and PDFCrowd will return with a PDF file that gets downloaded to your computer.

Screenshot_4_25_14__11_33_AM

Coding your own UI Action

UI actions should redirect to the following page: pdf_preview.do

URL Parameters that should accompany that page include:

  • macro: the name of the UI Macro to use
  • origin: (optional) the originating page that redirected to the preview. This will be the page we return to when someone clicks the “Return” button
  • preview: (optional) “true” means we will show a preview of the document first. This is the default action. “false” means we will just generate the PDF and download it to the computer

You can include other URL parameters that may be required by the UI Macro itself as well. In this sample example, the UI Macro requires a record parameter that holds the sys_id to the incident record.

The following is the UI Action script used to to generate the PDF Preview in the sample UI Action provided:

1
2
3
4
5
action.setRedirectURL("pdf_preview.do?"+
  "macro=pdfpreview_demo_incident&"+
  "record="+current.sys_id+"&"+
  "preview=true&"+
  "origin=incident.do?sys_id="+current.sys_id);

Download

This update set is available on ServiceNow’s “Share Portal”:
PDF Preview for PDFCrowd


Quick tip for ignoring namespaces with XPath

$
0
0

local-xpath-query

I often have to parse an XML Document to pull out element text when doing an integration with a third party system. I have used XPATH for these types of queries for years, but have always cringed when there were a lot of namespace declarations and prefixes used in the elements. Half of the time, these prefixes wouldn’t be declared or used properly and it would through off my XPATH query.

A few months ago I discovered a nice little XPath command that lets me ignore the namespace prefixes. Of course, XML evangelists would hang me up to dry if I ignored namespaces, but in all honesty, namespaces have never made a difference in my SOAP Responses or other XML data transfers. So, since this probably will work accurately for people in 99% of the use cases out there, I am making it my new favorite way to query an XML document using XPATH.

For example, if you wanted to access an XML document like the following:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<soapenv:Envelope xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
     <RetrieveContentResponse xmlns="urn:srm0">
          <returnval>
               <apiVersion>2.0</apiVersion>
               <srmApi type="SrmApi">SrmRecoveryApi1</srmApi>
               <protection type="SrmProtection">SrmProtection</protection>
               <recovery type="SrmRecovery">SrmRecovery</recovery>
               <about xmlns:vim25="urn:vim25">
                    <vim25:name>VMware vCenter Site Recovery Manager</vim25:name>
                    <vim25:fullName>
                         VMware vCenter Site Recovery Manager 5.0.0 build-474459
                    </vim25:fullName>
                    <vim25:vendor>VMware, Inc.</vim25:vendor>
                    <vim25:version>5.0.0</vim25:version>
                    <vim25:build>474459</vim25:build>
                    <vim25:localeVersion>INTL</vim25:localeVersion>
                    <vim25:localeBuild>000</vim25:localeBuild>
                    <vim25:osType>Windows</vim25:osType>
                    <vim25:productLineId>srm</vim25:productLineId>
                    <vim25:apiType>SiteRecovery</vim25:apiType>
                    <vim25:apiVersion>2.0</vim25:apiVersion>
               </about>
          </returnval>
     </RetrieveContentResponse>
</soapenv:Body>
</soapenv:Envelope>

You may want to get the contents of the “version” field, which in this case is “5.0.0″.

Since there is only one “version” element in the document, you may suppose that you could use an XPath statement of “//version”. However, this xpath statement doesn’t work with many XPATH query libraries probably due to some namespacing issues in the document.

One sure fire way to get an element in the document is to ignore namespaces altogether. In the grand scheme of things, ignoring namespaces is not often desired with big XML documents. However, for Web Service responses, you are usually pretty safe in doing so.

In order to ignore a namespace, you can use the following command:

*[local-name()='ELEMENT_NAME_GOES_HERE']

So, for example, if I wanted an easy way to get the version data from the XML document above, I could use any of the following XPATH statements (as well as other derivatives):

  • //*[local-name()='version']
  • /*/*/*/*/*/*[local-name()='version']
  • //*[local-name()='about']//*[local-name()='version']

The “local-name()” function offers a very convenient way to blow past any namespace errors/weirdness in an XML response to allow you to quickly identify an XML element.

Integration Best Practices – Application Menus

$
0
0

A few months ago I worked with my good friend, David Gatley, in San Diego to come up with a series of integration best practice videos.

This first video discusses the importance of designing an application menu for your integration. A good application menu allows for Quick troubleshooting, easy configuration, and improved maintainability of your integration.

This video not only explains what components you should include in your applications menu, but it also shows you how you can quickly generate these application menus for your integration.

You can find the tool referenced in the video on the share portal by searching for the ServiceNow Integration Menu Builder

Screenshot_8_26_14__3_28_PM
Click Here to view the Video

Integration Best Practices – Import Sets

$
0
0

David Gatley and I continue with our series of integration best practice videos with session two: Import Sets.

This second video discusses the importance of creating import sets to pull data from third party sources and to bring it into ServiceNow. We talk about the basics of importing data through data sources and import sets.

In the video we will also cover coalescing practices and basic transform scripting techniques. You will see an end-to-end creation of a Database pull through the JDBC protocol and a mapping and transformation of that data.

Screenshot_8_30_14__7_22_AM

You view this video, simply browse to ServiceNow Import Sets.

Integration Best Practices – Inbound Web Services

$
0
0

David Gatley and I continue with our series of integration best practice videos with session three: Inbound Web Services.

Every table in ServiceNow has both SOAP and REST based web service access. You have full CRUD (Create, Read, Update, Delete) functionality with the web service API.

We discuss when to use the Direct Table APIs versus Web Service Import Sets. We also talk about setting up proper roles for your integration as well as troubleshooting the data coming in from the third party system.

Screenshot_8_30_14__8_02_AM

You view this video, simply browse to ServiceNow Inbound Web Services.

Integration Best Practices – Outbound Web Services

$
0
0

The illustrious David Gatley and I continue with our series of integration best practice videos with session four: Outbound Web Services.

This video gives a quick introduction to the outbound SOAP and REST web service capabilities in the ServiceNow platform. We talk about choosing the right business rule settings for your integration.

In the video we will build an outbound integration to a third party system when data changes on a particular ServiceNow record. We speak about techniques you can use to make your outbound web services more configurable versus hard coding settings.

Screenshot_8_30_14__8_28_AM

You view this video, simply browse to ServiceNow Inbound Web Services.

ServiceNow Integrations Overview Video

$
0
0

This video explains the generally available integration interfaces built into the ServiceNow platform. It covers Direct Table access through SOAP and REST based web services. It also mentions email integrations as an alternative. The video also explains inherent challenges with direct table interfaces and moves into the ETL layer of the product.

The ETL Layer for ServiceNow integrations consists of the Web Service Import Set and Transform Map components in the platform. The video discusses the interfaces into this powerful mechanism of posting data into ServiceNow from a third party.

You will also learn about how you can pull data from third party source in through flat files, database queries, or LDAP connections. In reverse, you will learn about the many interfaces available for your third party system to pull or export data from ServiceNow in bulk.

Finally, you will discover how ServiceNow can be configured to post data or perform third party interactions given the various triggers built into the system. You will understand the basics of consuming a third party web service.

All of this in less than the time it takes to watch your favorite sitcom.

IntegrationsOverview

You view this video, simply browse to ServiceNow Integration Interfaces.

Easy Base64 Encoding in ServiceNow

$
0
0

Screenshot_9_20_14__12_01_PM

 

Base 64 encoding is a method used to convert binary data into ASCII strings. This is especially helpful if you want to convert a file, picture, or other object into a string in order to distribute it through mechanisms such as web services or database storage.

This type of encoding will convert any sort of data into a string of case-sensitive letters and numbers. While the result will generally be a longer string of text than its original counterpart, it  offers benefits such as taking a variety of types of data and converting it to something that can be passed over a URL, or stored in a text field.

While there is little documentation on converting data to base 64 format in ServiceNow, it can actually be done with a single line of code. The following code snippet will take a string and convert it to its base 64 equivalent and printed to the log. It will then take that new base64 string and decode back it its original format and write it to the system log.

1
2
3
4
5
6
7
var base64string = GlideStringUtil.base64Encode("^.^ JOHN ANDERSEN!");
gs.log(base64string);
//yields: Xi5eIEpPSE4gQU5ERVJTRU4h

orig = GlideStringUtil.base64Decode(base64string);
//yields: ^.^ JOHN ANDERSEN!
gs.log(orig);

If you ever need to do this manually, I do recommend using a tool my brother wrote at:

String Encode/Decode Tool

Flexible Styling with ServiceNow UI Pages and Macros

$
0
0

A Styled Page in ServiceNow

No, I am not a UI Master, nor am I a genius at style. I do my best to at least make interfaces functional, and that is about it. So, for me providing styling guidance is a bit of a joke, but here is something that I learned that has helped my various UI Pages and UI Macros become a bit more flexible – both when in use within the same instance, or when being packaged up and distributed to other instances.

First, of all, I used to always just embed my CSS class definitions in my UI Pages and UI Macros. However, I found that when I built similar pages, I had to copy the same style information over – thus duplicating effort. This made it hard to fix a style issue without having to go into multiple pages. So, I knew I needed to add style sheets that could be referenced by other UI pages and macros.

Second, I needed to do this in a manner that would not rely on SYS_ID fields since those could change if I were to package up my application and distribute it to other instances.

Setting up a Style Sheet

In order to set up a style sheet in ServiceNow for reuse, you simply browse to Content Management > Design > Style Sheets
Browsing to ServiceNow Stylesheets

Click the New button to create a new style sheet.

Provide a name for your style sheet. This name could be one word, it could have spaces, it could also have an extension if you like. It just needs to be unique.

Set your Style Sheet Type to “Local Style Sheet”.

Add any styling to the “Style” edit box.

Sample Style Sheet Definition

Click “Submit” when you are done.

Referencing the Style Sheet

Style sheets are not automatically applied to pages…that would probably be a bad thing. You have to reference them in your page.

The process for referencing a ServiceNow stylesheet is to use the following format:

1
<link href="SYS_ID_OF_YOUR_STYLE_SHEET_RECORD.cssdbx?" rel="stylesheet" type="text/css"/>

Notice that the href attribute must contain the sys_id of the stylesheet that you created in the steps above. The problem with this is that if you package your page into an update set or with an application, you are not guaranteed that the sys_id will be valid in another ServiceNow instance.

In order to make this a bit more “update set” or “packaged application” friendly, I created the following snippet in my Jelly code to give me a method in which I can reference the stylesheet by its name rather than its sys_id:

1
2
3
4
5
6
7
8
<g:evaluate>
  var css = new GlideRecord("content_css");
  css.addQuery("name", "NAME_OF_THE_STYLE_SHEET_RECORD");
  css.query()
  css.next();
  var cssid = ""+css.sys_id;
</g:evaluate>
<link href="${cssid}.cssdbx?" rel="stylesheet" type="text/css"/>

This code does a GlideRecord query to bring up the style sheet sys_id. It stores the sys_id into a Jelly Variable that is then used in the HTML tag that links the stylesheet to the page.

The post Flexible Styling with ServiceNow UI Pages and Macros appeared first on John James Andersen.

How to use SFTP tools with EC2 images

$
0
0

Screenshot_11_1_14__6_06_AM

I always shuddered when I had to do some SFTP or SSH work with a linux box hosted on Amazon EC2. Instead of giving me the familiar username/password mechanism for authentication, they have required certificate based authentication out of the box.

The command line was easy enough to remember, just pass in “-i” and the name of your PEM file from Amazon. However, the bigger challenge came from when I wanted to leverage tools such as Filezilla and Text Wrangler on my Mac.

However, after a little research, I found the SSH feature of the .ssh/config file to be just the right deal.

Let’s say I have a linux box by the name of ec2-fakedns-name.amazonaws.com, and a user name of ubuntu. Let’s also say that I received and downloaded a key file of: MySuperSecretKey.pem.

All I need to do is edit (or create) the “~/.ssh/config” file.

For each amazon server, I add an entry similar to the following:

Host fakeServer
        HostName ec2-fakedns-name.amazonaws.com
        User ubuntu
        IdentityFile /Users/john.andersen/MySuperSecretKey.pem

Text Wrangler

Now, to connect via Text Wrangler, I create a bookmark with the following settings:

Screenshot_11_1_14__6_15_AM

When I click on that bookmark, it will take me right into the fakeServer File System.

ssh and sftp

With the .ssh/config file set up, you can easily use the terminal to connect to your server.

The SSH command goes from:

ssh -i ~/MySuperSecretKey.pem ubuntu@ec2-fakedns-name@amazonaws.com

to this simple statement:

ssh fakeServer

The same applies to the “sftp” command as well.

Filezilla

Now for Filezilla, you have to follow a slightly different path as it does not seem to honor the “.ssh/config” identities.

Inside Filezilla, go to your settings page and select “SFTP”. Then click the “Add keyfile…” button.

Browse to, and select the PEM file that Amazon provided you.

FileZilla runs on the Putty key libraries, which do not honor PEM directly. So, it will throw an error on the screen saying that it needs to convert the file to a supported format. Click Yes to allow it to create a PPK file. Set a location for the new PPK file when prompted.

Finally, Hit OK.

Setup screen for FileZilla's SFTP key files.

Setup screen for FileZilla’s SFTP key files.

Now, when you set up FileZilla to open up your server, it will attempt to authenticate with the key(s) in its keyfile list. If it is successful, a connection will be established.

Screenshot_11_1_14__6_34_AM

The post How to use SFTP tools with EC2 images appeared first on John James Andersen.

Adding AngularJS to your ServiceNow instance

$
0
0

angularjs

Loading the AngularJS library on a ServiceNow instance may appear to be impossible at first, but with the following handy trick, you have can AngularJS capabilities within just a few short minutes.

Please note, this trick is not just limited to AngularJS, but also to most any other consumable complicated Javascript Library.

Step 1 – Download the AngularJS Library

Download the AngularJS library on your your hard drive. To do this, simply browse to https://angularjs.org/ and choose a download option. I like to download the zip file so that I can choose any of the angular libraries.

Step 2 – Create a blank UI Script

UI scripts are client-side JavaScript library files, as opposed to script includes which are server-side JavaScript. UI scripts provide a way to package JavaScript into a reusable form. They are stored in the database to make them more easily customizable than .js files packed within a deployment. They can be called from client scripts, UI Pages, UI Macros, and more.

One problem, however is that if you try to paste the AngularJS library script into the Script field, you will get errors when you try to save the script. The built in javascript editor does not like some of the syntax used by the library. So, we have to use a back-door approach to get this to work.

Create a new UI Script by browsing to System UI > UI Scripts and clicking New

I like to name my UI Script by the library I am loading. In my case, the Name is: angularjs.min.1.3.2

You can add a description if you like, but keep the script field blank. Then click Submit

My Blank UI Script

My Blank UI Script

Step 3 – Add the script via List View

Now you should be redirected to this view for UI Scripts (If you are not, just browse there once again).

Modify your list view temporarily by clicking on the gear icon.

listgear

Now find the “Script” field in the “Available” column and move it over to the “Selected” column. Then click OK.

bringoverscript

Open the AngularJS file that you downloaded from the AngularjS.org and copy the contents of that file to your clipboard.

Now filter the UI Scripts list so that you can see your new library record. Double click on the “Script” column so that you get an edit box. Then paste the angular code into that edit box.

editboxonlist

Click the Green submit icon on your edit box in the list to save the record.

Step 4 – Call the script from your page

In my example, I will use a UI Page jelly script. In order to get load the AngularJS library into a UI Page, you must use the <g:requires> tag. UI Scripts are cached, so you use the following code snippet to dynamically let the browser know if it should reload the script or not. See the code snippet I used:

1
2
3
4
5
6
7
8
9
10
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
    <g2:evaluate var="jvar_stamp">
        var gr = new GlideRecord('sys_ui_script');  
        gr.orderByDesc('sys_updated_on');  
        gr.query();  
        gr.next();  
        gr.getValue('sys_updated_on');  
    </g2:evaluate>  
    <g:requires name="angularjs.min.1.3.2.jsdbx" params="cache=$[jvar_stamp]" />  
</j:jelly>

Optionally, since AngularJS is a released Library, you could just not worry about the cache. Chances are you will not be modifying it much. In that case, you can just use the simple requires tag without the cache handling capabilities:

1
2
3
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
    <g:requires name="angularjs.min.1.3.2.jsdbx" />  
</j:jelly>

Demo Video

The post Adding AngularJS to your ServiceNow instance appeared first on John Andersen.

Using the SublimeEditor to write ServiceNow code

$
0
0

I was recently introduced to an awesome ServiceNow plug-in for the SublimeText editor. The plugin was developed by Paul Senatillaka and possibly others at Fruition Partners. The plugin allows you to put a special comment header at the top of any file in the SublimeText editor. These comments give enough information for the editor to post the code up to the corresponding record in ServiceNow any time you save the document in Sublime.

A Sample File Header for SublimeText

A Sample File Header for SublimeText

Demo Video

Important Links

The post Using the SublimeEditor to write ServiceNow code appeared first on John Andersen.

Angular in ServiceNow: Tutorial #1 – Model Basics

$
0
0
Sample Angular App using a basic Model

Sample Angular App using a basic Model

I am hoping to find time to take a journey learning AngularJS as it pertains to the ServiceNow platform. As I do so, I hope to create a handful of tutorials or similar blog posts to show the building blocks along the way as well as any gotchas or workarounds that you may need to do to fit into the ServiceNow paradigm.

This first tutorial covers just a basic Model element on a form. Please note, as a prerequisite, you should check out my blog post on Getting AngularJS Libraries into your ServiceNow instance.

Use Case

The goal is to take the following Basic HTML form and leverage Angular to create a dynamic experience. Essentially our form will have a simple edit box. When you type something in the edit box, we want it to show up in the text below it.

We will start with the following basic Jelly/HTML code:

1
2
3
4
5
6
7
8
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
    <div id='container'>
      <label>Name:</label>
      <input type="text" placeholder="Enter a name here"/>
      <hr/>
      <h1>Hello !</h1>
    </div>
</j:jelly>

This code produces a form that looks like this:

Screenshot_11_20_14__6_51_AM

Set up the Library and Angular App

Now, we need to reference the AngularJS libraries. I have installed them on my instance already. You can do so in a number of ways. A couple of ideas include:

Declare and then Reference the Angular App

Next we have to declare to the system that part of the HTML is going to be leveraging a grouping of angular libraries and scope. Usually you will declare the angular app in javascript. This can be done in either a Client Script that you “require” in your page, or script that you add directly to your page. For this example, we will add the declaration on the page directly.

Screenshot_11_25_14__6_37_AM

Once we have declared the Angular app, we reference it in a container-level element of the page. In this case, we will reference the app in the primary “div” element. We will need to be sure the name matches what was declared in the angular.module call.

Screenshot_11_25_14__6_39_AM

Create a Model

An Angular “model” is an attribute that can store variable data. In our scenario, we will put a model on the “input” field. Whatever is typed in that input field will have its contents stored in an angular variable referenced as “yourName”.

Screenshot_11_25_14__6_43_AM

Reference the Variable in the HTML

Now that we are storing data in an Angular model (eg. variable), we can use that variable in our HTML. Angular variables come in the following format:

{{YOUR_VARIABLE_NAME}}

Let’s put the “yourName” variable into the Hello statement.

Screenshot_11_25_14__6_45_AM

Final Code

Here is our final code. Now, when we render this code, anything we type in the “input” field will be shown automatically in the Hello statement.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">

    <g:requires name="angularjs.min.1.3.2.jsdbx" />  
   
    <div id='container' ng-app='myApp2'>
      <label>Name:</label>
      <input ng-model="yourName" type="text" placeholder="Enter a name here"/>
      <hr/>
      <h1>Hello {{yourName}}!</h1>
    </div>
    <script>
      var app = angular.module( 'myApp2', [] );
    </script>
</j:jelly>

hellojohnandersenangular

Sources

This ServiceNow-based example was primarily derived from the following standard HTML example:

The post Angular in ServiceNow: Tutorial #1 – Model Basics appeared first on John Andersen.

Angular in ServiceNow: Tutorial #2 – The Controller

$
0
0
Sample AngularJS App in ServiceNow that demonstrates a Controller

Sample AngularJS App in ServiceNow that demonstrates a Controller

In this particular tutorial, we are going to cover AngularJS controllers and how you can set them up in ServiceNow.
Please note, as a prerequisite, you should check out my prior blog posts:

What is a Controller

A controller element sets up an AngularJS Scope within an HTML element container. The controller allows you to add functionality to an element or group of elements. Any Models contained within a controller is limited to that controller’s scope.

You can do two main things with a controller. 1) Set up initial values with the Scope by using a controller constructor function; 2) Add behavior to the Scope through user and browser events.

Use Case

In this tutorial we will build a simple form. In this form you can enter in a custom spice. You will then have the option of clicking two buttons. The first will be a “Chili” button. If you click this, then text will appear saying that the chili is very spicy. The second button will be the “Custom Spice” button. If this button is clicked then the text appears saying that item you entered into the input field is the spicy food.

We will start with the following basic Jelly/HTML code:

1
2
3
4
5
6
7
8
9
10
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
  <div style='padding:40px;'>
    <div>
      <input/>
      <button>Chili</button>
      <button>Custom spice</button>
      <p>The food is spicy!</p>
    </div>
  </div>
</j:jelly>

This code produces a form that looks like this:

Screenshot_11_26_14__7_41_AM

Set up the Library and Angular App

Now, we need to reference the AngularJS libraries. I have installed them on my instance already. You can do so in a number of ways. A couple of ideas include:

Referencing the AngularJS library that I loaded separately

Referencing the AngularJS library that I loaded separately

Declare and then Reference the Angular App

My AngularJS definition and reference.

My AngularJS definition and reference.

Create a Controller Code

As you may recall, a controller can both set up initial scope variables as well as connect events to functions to perform actions. In our example, we will set up the controller with both the constructor and a function that sets the spice variable whenever it is triggered. Controller definitions do get a little funky, so let’s break it up a bit.

In order to create a controller, you use the “controller” function on the angular module object. In our case, the angular module is “myApp”.

The controller function takes two parameters. Simple, you may say, but watch out for that second parameter because it’s a doozy!

Screenshot_11_26_14__7_18_AM

The first parameter is the name of the controller.

Screenshot_11_26_14__7_18_AM

The second parameter is a list of items. The first item in this list will be the Scope variable. The second item in the list will be the Constructor function (fully defined).

Screenshot_11_26_14__7_18_AM

Right now, we just have a shell of a constructor that does nothing. Let’s set up some initial conditions. In this example, we are going to set two variables with some default values. These variables are the “customSpice” and “spice” variables.

Screenshot_11_26_14__7_24_AM

Now we want to also add a function to the controller so that when buttons are pushed, we change things. We will add a function called “spicy”. That function will take in a spice name. Whatever is passed in there, we will set on the “spice” variable within in the controller’s scope.

Screenshot_11_26_14__7_26_AM

Add the Angular controls to the Jelly/HTML

Now that the scripting is set up, we need to prep the Jelly code so that the Angular controller, model, and events are tied into the HTML based UI.

First, let’s set up our controller scope so that it encapsulates the entire form we are working with. To do this, we will reference our controller on the DIV element surrounding the form itself.

Screenshot_11_26_14__7_30_AM

We want the “input” field to go to our “customSpice” scope variable. To do this, we set up a model on that field.

Screenshot_11_26_14__7_31_AM

Finally, let’s capture click events on the buttons. When they are clicked, we will call our “spicy” function and send in the spice name appropriate for each button.

Screenshot_11_26_14__7_33_AM

To finish this off, let’s add the “spice” variable to our output text so that it shows what spice is currently active.

Screenshot_11_26_14__7_36_AM

Final Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
  <g:requires name="angularjs.min.1.3.2.jsdbx" />  
  <div ng-app="spicyApp2" style='padding:40px;'>
    <script>
      var myApp = angular.module('spicyApp2', []);

      myApp.controller('SpicyController', ['$scope', function($scope) {
        $scope.customSpice = "wasabi";
        $scope.spice = 'very';

        $scope.spicy = function(spice) {
          $scope.spice = spice;
        };
      }] );
    </script>
    <div ng-controller="SpicyController">
      <input ng-model="customSpice"/>
      <button ng-click="spicy('chili')">Chili</button>
      <button ng-click="spicy(customSpice)">Custom spice</button>
      <p>The food is {{spice}} spicy!</p>
    </div>
  </div>
</j:jelly>
The application in action

The application in action

Sources

This ServiceNow-based example was primarily derived from the following standard HTML example:

The post Angular in ServiceNow: Tutorial #2 – The Controller appeared first on John Andersen.

Angular in ServiceNow: Tutorial #3 – REST Calls

$
0
0
Sample AngularJS App in ServiceNow that demonstrates the use of a REST based $http call

Sample AngularJS App in ServiceNow that demonstrates the use of a REST based $http call

In this particular tutorial, we are going to cover the AngularJS ability to make REST web service calls against a ServiceNow instance.

Please note, as a prerequisite, you should check out my prior blog posts:

Considerations

This example will leverage the official ServiceNow REST API that was released with Eureka earlier in 2014. If you wish to do something similar with a pre-Eureka build, I recommend you try the JSONv2 web service.

Due to browser security constraints you will typically only be able to make REST web service calls against the same instance that the javascript is running on.

The AngularJS $http Provider

AngularJS uses its own built in $http provider to allow you to build out rapid REST based web service calls to web based endpoints.

There a number of shortcut methods you can leverage when setting up your HTTP requests using the $http provider, but my preferred method is to declare everything in the request itself. This is just personal preference, and until I use AngularJS more, I can’t really say which method is best. For more detailed information on the $http provider, I recommend you read the AngularJS http Provider documentation.

A typical HTTP request in AngularJS looks somewhat like the following:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$http( {
  method: 'POST',
  url: 'http://example.com',
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    //etc, etc
  },
  data: { test: 'test' },
} )
  .success(
    function(data, status){
      //what to do with a successfull request
    })
  .error(
    function(data, status){
      //What to do in case the request failed
    });

Use Case

For this scenario, we want to have a form where a user can start typing in an Incident number. As they type, a list of the incidents that start with that string will be displayed to the right. The incident numbers will be limited to 25 numbers and they will be shown in descending order (higher incident numbers on top).

We will start with the following basic Jelly/HTML code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">

  <!-- The User Interface -->
  <div style='padding:40px;'>
    <div>
      <table><tr>
        <td style='width: 300px; vertical-align: top;'>
          <p>NUMBER</p>
          <input />
        </td>
        <td style='vertical-align: top; padding: 20px;
                   background-color: #B2B2B2; width: 200px;'>

          <div ></div>
        </td>
      </tr></table>
    </div>
  </div>
</j:jelly>

This code produces a form that looks like this:

Screenshot_11_27_14__8_49_AM

Set up the Libraries and Angular App

Now, we need to reference the AngularJS libraries. I have installed them on my instance already. You can do so in a number of ways. A couple of ideas include:

Referencing the AngularJS library that I loaded previously.

Referencing the AngularJS library that I loaded previously.

Now, this time, rather than keep my own Angular application and controller code embedded in my UI Page, I am actually going to create a UI Script library in ServiceNow called “ang_lesson_3_lib” where I will put that code. This will help keep the UI code clean and separate from the Javascript code.

I do need to reference the code in my UI page, however, and since UI Scripts are cached in the system, I will append the last changed date to the “requires” call so that the cache will be updated any time I change the angular code in my library.

How I referenced the UI Script I created.  This will be where I put my angular application and controller code.

How I referenced the UI Script I created. This will be where I put my angular application and controller code.

My AngularJS definition and reference.

My AngularJS definition and reference.

Build out the Angular Hooks in the HTML

First of all, lets set up the App and the Controller.

Screenshot_11_27_14__9_43_AM

Next we want to set up two models. The first will be on the “input” field. We want an “incnum” variable to be associated with that field.

Screenshot_11_27_14__9_45_AM

We do expect a list of numbers coming into the table cell to the right. Thus, we will want to iterate over each of those numbers so that each incident number is listed on its own line.

To handle the iteration, we will leverage the “ng-repeat” directive in Angular. We will assume that the angular variable containing the list of numbers is called “numbers”. We will interate over the “numbers” variable and store each iteration in a variable called “num”. We will also assume that each “num” variable will be in the form of:

{'number': 'INC0000001'}

So, we will create the following iteration within our table cell:

Screenshot_11_27_14__9_54_AM

Finally, we want to watch the Incident Number input field for changes (eg. someone starts typing a number). Each time the value inside the input field changes, we want to query ServiceNow for incident records that start with that string.

To do this, we use the “ng-change” directive in AngularJS.

Screenshot_11_27_14__9_57_AM

This is what our final Jelly/HTML code looks like:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
  <!-- Import AngularJS Library -->
  <g:requires name="angularjs.min.1.3.2.jsdbx" />  

  <!-- Import my UI Script - get updated timestamp to invalidate cache if script changes -->
  <g2:evaluate var="jvar_stamp">
    var gr = new GlideRecord('sys_ui_script');  
    gr.get("98dd22875ba8310060889508ee4254e6");
    gr.getValue('sys_updated_on');
  </g2:evaluate>  
  <g:requires name="ang_lesson_3_lib.jsdbx" params="cache=$[jvar_stamp]" />  


  <!-- The User Interface -->
  <div ng-app="descEditor" style='padding:40px;'>
    <div ng-controller="DescriptionText">
      <table><tr>
        <td style='width: 300px; vertical-align: top;'>
          <p>NUMBER</p>
          <input ng-model="incnum" ng-change="updateRecordList(incnum);"/>
        </td>
        <td style='vertical-align: top; padding: 20px;
                                     background-color: #B2B2B2; width: 200px;'>

          <div ng-repeat="num in numbers">{{num.number}}</div>
        </td>
      </tr></table>
    </div>
  </div>
</j:jelly>

Create the Controller Code

In our UI Script that we created and referenced in our Jelly code, we will want to build out the Angular App and the Controller code.

We will start out with the following shell:

1
2
3
4
5
6
7
8
9
var myApp = angular.module('descEditor', []);

myApp.controller('DescriptionText', [
  '$scope',
  '$http',
  function($scope, $http) {
   
  }
] );

Notice that in addition to $scope, I am also passing in $http. This is the HTTP Provider for AngularJS. It gives my controller the ability to make HTTP calls (eg. REST).

Now, lets set up the controller’s constructor such that with a couple of the following settings:

  1. Set a default value for the input field to be “INC”
  2. Set up the ServiceNow REST Table API url for incidents
  3. Set up a default “Accept” header to JSON for all REST Calls
1
2
3
4
5
6
7
8
9
10
11
var myApp = angular.module('descEditor', []);

myApp.controller('DescriptionText', [
  '$scope',
  '$http',
  function($scope, $http) {
    $scope.incnum = "INC";
    $scope.url = '/api/now/table/incident';
    $http.defaults.headers.common.Accept = "application/json";
  }
] );

Now, we will create an “updateRecordList” function that takes in an incnum prefix string that we will use to query for incident numbers starting with that string.

Screenshot_11_27_14__10_06_AM

Since we are just dong a query, we will want to do the GET method for our REST call.

We only want to return numbers that start with our prefix string. Also, we will want to build out a ServiceNow encoded query such that incident numbers are returned in descending order. This query will go in the “sysparm_query” URL parameter.

"sysparm_query=numberSTARTSWITH"+incnum+"^ORDERBYDESCnumber"

Also, we only are interested in the “number” field. We don’t need anything else back from the record. According to the ServiceNow REST api, we can use the following URL parameter:

sysparm_fields=number

Finally, we want to limit the number of results to 25. The ServiceNow REST api lets us do this in the following manner:

sysparm_limit=25

Screenshot_11_27_14__10_13_AM

Now let’s add a success and error handler to the request. If successful, we are going to get data in this format:

1
{'results':[{'number': 'INC000013'}, {'number': "INC0000014"}]}

So, we want to store the array only into our “numbers” variable that we are iterating with in our HTML code.

Screenshot_11_27_14__10_16_AM

Now, if we get an error, let’s just store the following in the “numbers” variable:

[{"number": "Error fetching list"}]

We do it in this format because the HTML code we wrote expects an array of objects that contain a “number” field. Instead of a list of numbers in this error case, however, it will show one line as “Error fetching list”.

Screenshot_11_27_14__10_19_AM

Here is our final Javascript code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var myApp = angular.module('descEditor', []);

myApp.controller('DescriptionText', [
  '$scope',
  '$http',
  function($scope, $http) {
    $scope.incnum = "INC";
    $scope.url = '/api/now/table/incident';
    $http.defaults.headers.common.Accept = "application/json";
   
    $scope.updateRecordList = function(incnum) {
      $http({
        method: 'GET',
        url: $scope.url + "?sysparm_query=numberSTARTSWITH"+incnum+
                          "^ORDERBYDESCnumber"+
                          "&sysparm_fields=number&sysparm_limit=25",
      }).
      success( function(data, status) {
        $scope.numbers = data.result;
      }).
      error ( function(data, status) {
        $scope.numbers = [{"number": "Error fetching list"}];
      });
    }
  }
] );

The Application in Action

Our application in action

Our application in action

The post Angular in ServiceNow: Tutorial #3 – REST Calls appeared first on John Andersen.


Angular in ServiceNow: Tutorial #4 – Promises

$
0
0
Sample AngularJS App in ServiceNow that demonstrates the use of REST based calls with one that uses a Promise

Sample AngularJS App in ServiceNow that demonstrates the use of REST based calls with one that uses a Promise

In this particular tutorial, we are going to build upon the use cases in our previous AngularJS tutorial. We will continue to leverage the REST API but will be introducing the concept of “Promises” in AngularJS.

Please note, as a prerequisite, you should check out my prior blog posts:

Considerations

This example will leverage the official ServiceNow REST API that was released with Eureka earlier in 2014. If you wish to do something similar with a pre-Eureka build, I recommend you try the JSONv2 web service.

Due to browser security constraints you will typically only be able to make REST web service calls against the same instance that the javascript is running on.

What is a Promise?

Web service calls in AngularJS are inherently asynchronous. This means that in a script, you may fire off a web service call. However, the next line of your script after that call cannot assume that there is a response waiting to be leveraged. The response will come separately from the function that called it.

An AngularJS Promise is a method that Angular uses to allow you to make a web service call, but establish a promise that when it gets a response back, it will continue with a certain bit of code.

There is a great example of a promise at the following allegorical blog post: Promises in AngularJS, Explained as a Cartoon

Use Case

In this use case we will build upon the use case in the previous AngularJS tutorial. In addition to the input box that filters a list of Incident record numbers, we will add a “Short Description” text area field. This field will display the contents of the resulting incident record when a valid number of fully typed out in the Incident Number input field. We will also add a couple of buttons. The first will be an “Update” button. If the Short Description is changed and the Update button is clicked, then we will post an Update to ServiceNow through AngularJS. The second button will open up the incident record itself so that we can verify that our short description was updated.

We will start with the following basic Jelly/HTML code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
  <g:requires name="angularjs.min.1.3.2.jsdbx" />  
  <g2:evaluate var="jvar_stamp">
    var gr = new GlideRecord('sys_ui_script');  
    gr.get("6c8b22875ba8310060889508ee4254d4");
    gr.getValue('sys_updated_on');  
  </g2:evaluate>  
  <g:requires name="ang_lesson_4_lib.jsdbx"  params="cache=$[jvar_stamp]" />
  <div ng-app="descEditor" style='padding:40px;'>
    <div ng-controller="DescriptionText">
      <table><tr>
        <td style='width: 300px; vertical-align: top;'>
          <p>NUMBER</p><input ng-model="incnum" ng-change="updateRecordList(incnum);"/><br/>
          <p>SHORT_DESCRIPTION</p>
          <textarea  style="width: 300px;"/><br/>
          <button >Update</button>
          <button >View Record</button>
          <p>{{status}}</p>
        </td>
        <td ng-model="inclist" style='vertical-align: top; padding: 20px; background-color: #B2B2B2; width: 200px;'>
          <div ng-repeat="num in numbers">{{num.number}}</div>
        </td>
      </tr></table>
    </div>
  </div>
</j:jelly>

This code produces a form that looks like this:

Screenshot_11_28_14__7_25_AM

Set up the initial AngularJS Script

We are going to start off with code from our last tutorial and build upon that for our Angular script. Please note that I am doing this in a separate UI Script in my ServiceNow instance. I have already referenced this script in the Jelly/HTML code above.

Here is the script we will start with:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var myApp = angular.module('descEditor', []);

      myApp.controller('DescriptionText', ['$scope', '$http', function($scope, $http) {
        $scope.incnum = "INC0010005";
        $scope.url = '/api/now/table/incident';
        $http.defaults.headers.common.Accept = "application/json";
       
          $scope.updateRecordList = function(incnum) {
            $http({
              method: 'GET',
              url: $scope.url + "?sysparm_query=numberSTARTSWITH"+incnum+"^ORDERBYDESCnumber&sysparm_fields=number&sysparm_limit=25",
              headers: {'Content-Type': 'application/json'}
              }).
            success( function(data, status) {
              $scope.numbers = data.result;
            }).
            error ( function(data, status) {
              $scope.numbers = [{"number": "Error fetching list"}];
            });
          }


        };

      }] );

Build out the Angular Hooks in the HTML

First, lets edit the Incident Number input field action. Right now we have it updating the list of matching records whenever that field changes. However, in addition to that, we want to populate the Short Description text area field as well. To do this we will add an additional function to the “ng-change” directive on the input field and have it call a “getRecordDescription” function.

Click on image for Larger View

Click on image for Larger View

Now, we want to set up a model on our Text Area field. Since it is going to contain the “short description” of the incident record, let’s tie an “incdesc” variable to the text area. That way, as changes are made to that field, they are captured into a variable.

ang_lesson_4_xml

Also, we are going to have a status label on the form for when we post updates to the short description. If the short description text is changed in the text area it will need another update so, we will want to clear the last success or failure message to indicate that this new short description doesn’t have a status yet. To do this, we will use an “ng-change” directive on the text area field. When the value changes, we will clear out any possible status that may have already been set. We will use a “clearStatus” function that we will build out later.

ang_lesson_4_xml

For our two buttons, we want to add some actions that are triggered when the buttons are pushed. For the Update button we will call a “saveDesc” function that we will develop later. For the “View Record” button, we will call a “gotoRecord()” function that we will set up soon.

ang_lesson_4_xml

This is what our final Jelly/HTML code looks like:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
  <g:requires name="angularjs.min.1.3.2.jsdbx" />  
  <g2:evaluate var="jvar_stamp">
    var gr = new GlideRecord('sys_ui_script');  
    gr.get("6c8b22875ba8310060889508ee4254d4");
    gr.getValue('sys_updated_on');  
  </g2:evaluate>  
  <g:requires name="ang_lesson_4_lib.jsdbx"  params="cache=$[jvar_stamp]" />
  <div ng-app="descEditor" style='padding:40px;'>
    <div ng-controller="DescriptionText">
      <table><tr>
        <td style='width: 300px;'>
          <p>NUMBER</p><input ng-model="incnum" ng-change="getRecordDescription(incnum); updateRecordList(incnum);"/><br/>
          <p>SHORT_DESCRIPTION</p>
          <textarea ng-model='incdesc' ng-change="clearStatus()" style="width: 300px;"/><br/>
          <button ng-click="saveDesc(incdesc)">Update</button>
          <button ng-click="gotoRecord()">View Record</button>
          <p>{{status}}</p>
        </td>
        <td ng-model="inclist" style='vertical-align: top; padding: 20px; background-color: #B2B2B2; width: 200px;'>
          <div ng-repeat="num in numbers">{{num.number}}</div>
        </td>
      </tr></table>
    </div>
  </div>
</j:jelly>

Create the Factory Angular Code the implements the Promise

First, let’s cover the need to introduce the “Promise” concept in our use case. With the ServiceNow REST API, you can get a single record once you know the SYS_ID of that record. The problem with our example is that we only know the number. Now, we could have had our incident number query also return corresponding short description fields that we could reference in our incident list, but what fun would that be.

What we are going to do instead is make a web service call that uses the REST API to submit a full incident number into a LIST query. Then we will pull the sys_id from that result. Once we get the sys_id in the response, we will make a second call to ServiceNow to get all the data on that record for that sys_id.

Since AngularJS uses asynchronous web services, we have to establish a promise around getting the sys_id for an incident number. Once we have the sys_id (the promise is fulfilled), then we turn around and use that sys_id to get all the incident’s record details.

In order to set up a promise, we have to create a “Factory” on our Angular app. I am going to name my factory “IncidentTableService”:

Screenshot_11_28_14__7_55_AM

The primary function in this factory is a getSysID function that takes in an incident number and promises to return the corresponding sys_id. Now, the factory will not have the Controller’s scope variables such as $scope.url, so we will require that the url be passed into the function with the incident number:

Screenshot_11_28_14__7_59_AM

Now, calling the REST api in a Promise situation is quite similar to how we did it in our previous tutorial within the controller. However, instead of just calling the $http provider, we are going to “return” it within our function. The following code shows that we first set up the URL to fit the API specifications, and then we set up the GET request:

Screenshot_11_28_14__8_03_AM

Aren’t quite done yet, though. Remember, when making REST requests through the controller, we used a .success and .error function attached to the $http provider call? Well a promise is handled a bit differently. For a promise, we add a “.then” call attached to the $http call.

ang_lesson_4_lib_js

In the “then” situation, a Result variable (we will establish it as “res”) will contain the data from the response. The ServiceNow API response will have a list of “results”. We will pull the first result since numbers are supposed to be unique. Once we have the first result, we want to return the sys_id value on that record.

In the following code, I do a check on the various parts of what I expect from the response. Then I return the sys_id from the response parts:

ang_lesson_4_lib_js

Now that we have our factory built, we will need to reference it in our Controller that we have already started. To do this, you enter in the name of the factory when you pass in the $scope and $http provides into the controller.

Screenshot_11_28_14__8_11_AM

Set up the rest of the Angular Code

Now let’s get back into more familiar territory. Within our Controller’s constructor, let initialize a couple of variables. First, let’s set a sys_id variable to an empty string and then let’s also set up a “status” variable where we eventually can post REST status messages for record updates.

Screenshot_11_28_14__8_16_AM

We will now build out our supporting functions that we stubbed out in the HTML for the controller.

First, let’s build a simple controller function that clears the status message as needed:

Screenshot_11_28_14__8_18_AM

Next, let’s build out a function in our controller that saves a new short description:

ang_lesson_4_lib_js

We will also set up the function that redirects us to the actual servicenow record so when they push the “View Record” button our browser will redirect to the ServiceNow stock UI for incidents:

Screenshot_11_28_14__8_22_AM

Now, our final controller function is the one that gets the description of the record. We will go into this one in more detail since we are going to leverage that Promise function that we created in our factory. This function is first going to establish the promise to our “getSysID” function from the factory we created:

Screenshot_11_28_14__8_29_AM

As you may recall, the promise function was returning the sys_id string. Thus the function within the promise is set up to have a sys_id variable passed into it. We will take that sys_id variable and store it within the controller scope. Then we will issue the GET command on the Incident Table API and submit the sys_id to the Table URL to get the description for the that specific record.

ang_lesson_4_lib_js

Now for our final step, we want to get the description on the page load, should there be a valid Incident Number set by default. To do this, we call our newly created getRecordDescription function from the bottom of the controller definition:

ang_lesson_4_lib_js

Here is our final Javascript code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
var myApp = angular.module('descEditor', []);

      myApp.factory('IncidentTableService', function($http) {
        return {
          getSysID: function(num, url){
            var reqUrl = url + "?sysparm_query=number="+num;
            return $http({
              method: 'GET',
              url: reqUrl,
              headers: {'Content-Type': 'application/json'}
              }).
              then( function(res) {
                if( !res || !res.data || !res.data.result
                    || res.data.result.length == 0 ){
                  return;
                }
                return res.data.result[0].sys_id;
              });
          }
        }
      });

      myApp.controller('DescriptionText',
                        ['$scope',
                          '$http',
                          'IncidentTableService',
                          function($scope, $http, IncidentTableService) {

        $scope.status = "";
        $scope.incnum = "INC0010005";
        $scope.url = '/api/now/table/incident';
        $scope.sys_id = '';
        $http.defaults.headers.common.Accept = "application/json";
       
        $scope.clearStatus = function() {
          $scope.status = "";
        };

        $scope.getRecordDescription = function(num) {
          $scope.incdesc = "";
          var promise = IncidentTableService.getSysID(num, $scope.url);
          promise.then(
           
            function(sys_id) {
              $scope.incid = sys_id;
             
              $http({
                method: 'GET',
                url: $scope.url+"/"+sys_id,
                headers: {'Content-Type': 'application/json'}
              }).
              success( function(data, status) {
                if( !data || !data.result ){
                  return;
                }
                $scope.incdesc = data.result.short_description;
              });
            }
   
          );
        };

        $scope.saveDesc = function(desc) {
          $http({
            method: 'PUT',
            url: $scope.url + "/" + $scope.incid,
            headers: {'Content-Type': 'application/json'},
            data: {'short_description': desc}
            }).
          success(
            function(data, status){
              $scope.status = "Successfully Updated";
            }
          ).
          error(
            function(data, status){
              $scope.status = "ERROR Updating Record: " +
                data.error.message +": "+
                data.error.detail;
            }
          )
        }

        $scope.gotoRecord = function() {
          window.location="/incident.do?sys_id="+$scope.incid;
        }

        $scope.updateRecordList = function(incnum) {
          $http({
            method: 'GET',
            url: $scope.url + "?sysparm_query=numberSTARTSWITH"+incnum+"^ORDERBYDESCnumber&sysparm_fields=number&sysparm_limit=25",
            headers: {'Content-Type': 'application/json'}
            }).
          success( function(data, status) {
            $scope.numbers = data.result;
          }).
          error ( function(data, status) {
            $scope.numbers = [{"number": "Error fetching list"}];
          });
        }

        $scope.getRecordDescription($scope.incnum);
      }] );

The Application in Action

Screenshot_11_28_14__8_37_AM

The post Angular in ServiceNow: Tutorial #4 – Promises appeared first on John Andersen.

Post a picture to an image field through REST

$
0
0

Screenshot_1_13_15__6_42_AM

This blog post is dedicated to a brilliant young inventor who is looking to solve a existing problem by building a mobile app that integrates into a ServiceNow instance.

The problem that he ran into was that he did not know how use REST (or any web service call) that would post an picture file to an “Image” field on a form to get results similar to the screenshot below:

Image file showing up on a form using the "Image" field type

Image file showing up on a form using the “Image” field type

There is no documented solution for this. However, after some research and reverse-engineering, I figured out that this is only slightly different than posting a normal attachment to a record through web services.

The example here is being done through the REST API that was introduced in the Eureka Release, but it also could be done with SOAP similarly.

We are going to use the AttachmentCreator web service that is built into ServiceNow.

Endpoint and Authentication

With the REST Table API, we will do a POST to the “ecc_queue” table.

Your POST Endpoint URL may look like this:


https://myInstance.service-now.com/now/api/table/ecc_queue

This is a protected table, so I will need to use Basic Authentication to authenticate in the request.

HTTP Headers

I am also going to send two HTTP Headers with my request:

The Accept header will tell the web service that it can respond to me in JSON format once the work is done.

Accept: application/json

The Content-Type header tells the web service that I am sending data in XML format. XML seems to work better for this since, as you will see later, the payload will be multi-lined, and it seems to be easier to do that in XML format than JSON.

Content-Type: text/xml

The Post Body

Since I am posting to the ECC Queue, I am going to post an XML body that is in the following structure:

1
2
3
4
5
6
7
8
9
<request>
  <entry>
    <agent></agent>
    <topic></topic>
    <name></name>
    <source></source>
    <payload></payload>
  </entry>
</request>

Now, let’s work on the data that goes into the XML above.

For the most part, you just use the values for each of the XML attributes as specified in the AttachmentCreator documentation on the ServiceNow wiki. There will only be on exception, and that is with the file name. Instead of posting the actual filename for the image you are submitting, you change the name to simply be the database field name that the image is to be associated with.

Let’s try it out:

Agent: This can be anything descriptive that you want.

Topic: This is “AttachmentCreator”. This string will trigger the attachment creator sensor script.

Name: This is a “:” delimited string. This is where you put the name of the field (eg. photo) and then the mime type (eg. image/jpeg)

In this example, I am posting to the Sys_User table. If I right click on the “Photo” field, I can see that the database field name is “photo”.

I need to find the database field name and use it in my web service request instead of the actual file name.

I need to find the database field name and use it in my web service request instead of the actual file name.

Source: This also is a “:” delimited string. You will put the name of the table where the record resides along with the sys_id of the actual record in the table.

Payload: This is your base64 encoded string representing the image file you are posting.

The body for my REST POST now looks like this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
<request>
<entry>
<agent>Posting a picture to a User Record</agent>
<topic>AttachmentCreator</topic>
<name>photo:image/jpeg</name>
<source>sys_user:62826bf03710200044e0bfc8bcbe5df1</source>
<payload>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
eTZfLCzhmq2Of3T18c9eryZv7q4unl1cffTkT/6Uuf74cHzz47/533/51//X//1//od//+9mk+F3
v/2jj5+Zylxerz5fXv/9bHDMNzZ3b8a77cR68rWPcE7zuYiBPWsmpt2PvmNfe+KZZVd0sFiGP9+q
BHTTAISW5TfAnbk7JovdAhEjRPuMo1nqAMEwnheuPrv5pawVmJE2C0oAXjvjB+8NSBlOz3gPwQen
heGAIXYATirvujih6h055cMDHvBo4a9QWPoM5GUpX4xUG2XuDktNMSv4zN9amZdfWnz2HBckWvtE
CMxttr7YbgBr+NkXL19c2xR/yjIXjrwSgfQsvYy0YZJblfJhrkRY5IGIX8T6ILIRjkkNl+/U4x+I
aBCsnCvXkzptj7USAVSZGgMOp5+kt/Rkcngy212O72iuqc+F0mh2/KuObxx9wou6zHU6mgE12rP3
g7Xfgz6zWiPTVDVNOdn1ZqyoFDO2YN9b9MfPZ4vdk6didi/fmNob3a2151c//tl/vH31lz/5j19c
f8Hs/3f/4o//5I++RU/+7Me/+OKzz4YHyM6iP9u7+wLQpF/7vKPXdzyzkKucAHwLnyCgunetnaVG
kZZODMc8nkHsbaYJyJncN8a1hbvlmsX3tthgMDWEPh6ZgwE+U9bepPLzMWgju3gUzVpup4acywBQ
I6P9STTMCAEsgUSwTN88CtRC/MWkLoGfFGEliyr0YJRdO1Gf7CwuJCcX6uKHX1UapAf+6lN/8so2
TUda2dA7q3Cb7szzTbnJv3T7B+//BhIVUqNUCInnuIo6HcTiZ9UCvYbhBgabTXJQIQZBcDMGN8o0
ra3pvFzkulp8NXdYpCcAr+0dVLMgwZ+GdhzqaRB9Ptcjh/ls8vzZE+/GbTYm2VY9c2yLKad5tbx5
8xOvTL/+zifPf/jDH/4Pf/5n3/3Wd6yA/XxtD5NtvudY6oqrXc429UORR06tVue6ORFbIjvVsP7y
lWg+vURXTI0lFdZG8CnXSwNEsLdaL4M/2ZkohLzl3Z3NCPFh4zGkA5W2VyPqyS8wq1AoD6TVrhqi
m1EygBl98uUBoUVMofDLk33lncCrLF3kU5Y6Q19+We/BVwPPiLaBNMW1ny2KvjLbb/Jmk0dzcJpg
KiZVB0pHtwylYJgxu8zrTNPNMGzJGBkYGQ0sS7YamkXqGH4iLlYGnoIGUDBInACEQk7Exn0Byim7
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</payload>
</entry>
</request>

The sys_id I used was for the user record of “Abel Tuter” in the demo data of my instance. If I browse to his record, I will see the profile picture posted:

Image file showing up on a form using the "Image" field type

Abel Tuter’s profile picture

The post Post a picture to an image field through REST appeared first on John Andersen.

ServiceNow User Preferences – Server and Client Access

$
0
0
ServiceNow can serve up a user's personal preferences either with server-side API access or client-side function calls.  Get it your way.

ServiceNow can serve up a user’s personal preferences either with server-side API access or client-side function calls. Get it your way.

You may already be aware of this, but ServiceNow has the capability to set and retrieve user preferences within the platform. You can easily get or set these preferences using both server-side APIs as well as client-side APIs. This article will explain how you can do this both at the server level and at the client level.

API Functions

Server Side API Calls
Since user preferences are tied to and individual user, the server-side API gets you access to those user preferences at the gs user level. To access these APIs on the current user simply use the following method:

1
2
3
4
//Set your current User Preference
gs.getUser().setPreference("DESIRED_PREFERENCE_NAME", "DESIRED_PREFERENCE_VALUE");
//Get your user's current User Preference Value
var prefVal = gs.getUser().getPreference("PREFERENCE_NAME");

To get the API on another user using a Server Side script, you would do the following:

1
2
3
4
5
6
//Set a User Preference
var user = gs.getUser().getUserByID("a2826bf03710200044e0bfc8bcbe5ded");
user.setPreference("DESIRED_PREFERENCE_NAME", "DESIRED_PREFERENCE_VALUE");

//Get the value for a specific User's User Preference
var prefVal = user.getPreference("DESIRED_PREFERENCE_NAME");

Client Side API Calls

You can also allow your client scripts to access the current user’s user preferences in the following way:

1
2
3
4
5
//Set your current user preference
setPreference("DESIRED_PREFERENCE_NAME", "DESIRED_PREFERENCE_VALUE");

//Get your current user's preference
getPreference("DESIRED_PREFERENCE_NAME");

Viewing the user preferences manually

You can also view and manage all user preferences as the system administrator. Simply navigate to User Administration > User Preferences.

User preferences can be found in the "User Preferences" module in your ServiceNow instance.

User preferences can be found in the “User Preferences” module in your ServiceNow instance.

Demo Video

Watch a Demo Video of this feature

The post ServiceNow User Preferences – Server and Client Access appeared first on John Andersen.

Referencing Multiple Styles with ServiceNow UI pages

$
0
0
There is a little code snippet that allows you to bring in styles from multiple resources easily in ServiceNow UI macros and pages.

Easily handle all sorts of styles in your UI or CMS work in ServiceNow.

A few months ago I posted an article about how to include ServiceNow stylesheet records in your UI page or UI macro (Flexible Styling with ServiceNow). Today, I would like to show an example of how you can reference many style records easily and quickly and a UI page or macro using some jelly magic. Often times, I have to bring in styles from multiple records. While I do want to let the system cache those stylesheets, I also want to get the updates automatically as well.

Again, as mentioned in my previous article, you could just list the style sheets in simple “link” statements but sometimes the browser caches those, so if you make a change to the stylesheet, that change doesn’t immediately get pulled in by the browser. Also, the linking mention requires a sys_id rather than the display name for the record. When you have several styles that you are pulling from, it can be a pain to see only SYS_ID’s vs. the nice file labels.

In order to tackle these two problems with multiple style sheets, I created the following JavaScript and jelly code snippet that allows me to simply insert the names of all the stylesheets inside of ServiceNow that I need to reference in my UI macro or my UI page. The script automatically includes all of those stylesheets with their latest versions in my page.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  <g:evaluate object="true">
    var stylesheets = [
                       //ENTER NAMES OF STYLE RECORDS HERE IN ARRAY FORMAT
                       "my_sn_style_record1.css",
                       "my_sn_style_record2.css",
                       //END OF CONFIGURATION NEEDED - LEAVE THE REST AS IS
                      ];
    var csslinks = [];
    for(var key in stylesheets){
      var css = new GlideRecord("content_css");
      css.addQuery("name", stylesheets[key]);
      css.query()
      css.next();
      csslinks.push(css.sys_id+".cssdbx?ver="+css.sys_updated_on);
    }
  </g:evaluate>
  <j:forEach var="jvar_link" items="${csslinks}">
    <link href="${jvar_link}" rel="stylesheet" type="text/css"/>
  </j:forEach>

Simply copy that code snippet and place it in your page. All you have to modify are the lines in the “stylesheets” array as shown in the following diagram:

Referencing_Multiple_Styles_with_ServiceNow_UI_pages-_John_Andersen

The post Referencing Multiple Styles with ServiceNow UI pages appeared first on John Andersen.

Linking Several Javascript Libraries into ServiceNow UI pages

$
0
0

multipleWarriors

Several days ago I posted an article about how to include Multiple ServiceNow stylesheet records in your UI page or UI macro in a way that you could easily tell which stylesheets you were using and keeping the latest version from being cached and not visible. (Referencing Multiple Styles with ServiceNow UI pages).

Today, I would like to stay on a similar vein and show an example of how you can reference Javascript UI Scripts easily and quickly and a UI page or macro using some jelly magic. Often times, I have to bring in javascript libraries from multiple “UI Script” records. While I do want to let the system cache those libraries, I also want to get the latest version of the library should it be updated.

Now you could simply just list each one out on their own in such a manner:

1
2
<g:requires name="MyUiScriptNumber1.jsdbx" />
<g:requires name="MyUiScriptNumber2.jsdbx" />

However, when those scripts get changed, there is a potential delay in when you will get the latest version in your browser due to browser caches.

In order to tackle this problem I created the following JavaScript and jelly code snippet that allows me to simply insert the names of all the UI Script libraries that I am going to use. The script automatically includes all of those libraries with their latest versions in my page.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <g:evaluate object="true">
    var uiscripts = [
                     //BEGIN EDIT
                     "MyUiScriptNumber1",
                     "MyUiScriptNumber2"
                     //END EDIT
                    ];
    var jslibs = [];
    for( var key in uiscripts ){
      var gr = new GlideRecord('sys_ui_script');  
      gr.addQuery("name", uiscripts[key]);
      gr.query();  
      gr.next();  
      jslibs.push( {"name": gr.name, "ts": gr.sys_updated_on } );  
    }
  </g:evaluate>  
  <j:forEach var="jvar_js_lib" indexVar="jvar_js_index" items="${jslibs}">
    <g:evaluate jelly="true">
      var js_lib_name = jelly.jvar_js_lib.name;
      var js_lib_ts = jelly.jvar_js_lib.ts;
    </g:evaluate>
    <g:requires name="${js_lib_name}.jsdbx" params="cache=${js_lib_ts}" />  
  </j:forEach>

Simply copy that code snippet and place it in your page. All you have to modify are the lines in the “uiscripts” array as shown in the following diagram:

multipleUIScriptsExample

Finally, this is not the only way to do this and there are a lot of other cool, tricky methods out there. This is just the method that has grown on me. I am curious to know how you have hanlded multiple UI Script declarations in the past. Feel free to post your discussion as comments below.

The post Linking Several Javascript Libraries into ServiceNow UI pages appeared first on John Andersen.

Viewing all 82 articles
Browse latest View live