Blog

ServiceNow to Microsoft Excel Integration

I don't really like this post in a way, as I believe data should stay in ServiceNow.  When you migrate data outside of ServiceNow, you expose it to potential security and PCI issues.

However this is a good example of how to use REST Webservices with ServiceNow.

Here is the video from youtube that details how to do this.  The video shows the major points and it pretty cool. However it misses some critical steps which I detail below (Step 3 in particular)

 

How to Connect ServiceNow to Excel using REST Webservices

Step 1: Google Chrome Advanced REST Client Extension

1. Watch the video above.
2. Read the Wiki on REST Webservices
3. Download and install the Chrome Advanced Rest Client Extension
4. Use the Chrome REST Plugin to put in REST details
- GET (That pulls data from ServiceNow)
- Instance: https://<yourinstance>.service-now.com/api/now/table/incident
For <yourinstance>, try a developer instance of ServiceNow.  Don't try on your company's instance first.
5. Add Headers (in the form section)
Accept | application/xml
Authorization | Click Contruct in value field
Enter Basic login (Note the user account you use needs the admin, rest_webservices, and/or itil role)
6.  Run the query.  If successful, you will need to copy the details to notepad (especially the authorization string, which is something like Basic Yxxxxxxx32434Mw==)  You will need that in the excel part.

Step 2: Create the Excel File

1. Create a new excel file
2. Create two new worksheets: incidents, problem.  (Note the spelling is important)
2. Enable the "Developer" tab in the Ribbon if not enabled.
3. Click Developer > Visual Basic
4. Click New > Module
5. Paste this code in there from the video (switch out the InstanceURL and Authorization code lines with your info)

Sub ServiceNowRestAPIQuery()

' Replace with your Service Now Inctance URL
InstanceURL = "https://dev16551.service-now.com"
' Replace with your Authorization code
AuthorizationCode = "Basic YWRtaW46U0NONHF1aWw="
' Add more tables ascomma seperated with no spaces
TableNames = ("incident,problem")

Dim ws As Worksheet
Dim objHTTP As New WinHttp.WinHttpRequest
Dim columns As String
Dim Header As Boolean
Dim jsonString As String
Dim Resp As New DOMDocument
Dim Result As IXMLDOMNode
Dim ColumnsArray As Variant

TablesArray = Split(TableNames, ",")

For x = 0 To UBound(TablesArray)

'Table Choices
Select Case TablesArray(x)

 Case "incident"
Set ws = Sheets("incidents")
columns = "number,company,close_notes,impact,closed_at,assignment_group"
ColumnsArray = Split(columns, ",")
OtherSysParam = "&sysparm_limit=100000"
SysQuery = "&sysparm_query=active%3Dtrue"
 
Case "problem"
'Sheet name
Set ws = Sheets("problem")
'Columns to Query
columns = "number,short_description,state"
ColumnsArray = Split(columns, ",")
'Query filter Parameters
OtherSysParam = "&sysparm_query=state=1"
'Other Query Parameters
SysQuery = ""
 End Select

URL = InstanceURL & "/api/now/table/"
Table = TablesArray(x) & "?"
sysParam = "sysparm_display_value=true&sysparm_exclude_reference_link=true" & OtherSysParam & SysQuery & "&sysparm_fields=" & columns
URL = URL & Table & sysParam
objHTTP.Open "get", URL, False
objHTTP.SetRequestHeader "Accept", "application/xml"
objHTTP.SetRequestHeader "Content-Type", "application/xml"

' Authorization Code
objHTTP.SetRequestHeader "Authorization", AuthorizationCode
objHTTP.Send '("{" & Chr(34) & "short_description" & Chr(34) & ":" & Chr(34) & "Test API2" & Chr(34) & "}")

Debug.Print objHTTP.Status
Debug.Print objHTTP.ResponseText
ws.Select
Header = False
i = 1
Range("A1").Select
Cells.Clear

Resp.LoadXML objHTTP.ResponseText
For Each Result In Resp.getElementsByTagName("result")
 For n = 0 To UBound(ColumnsArray)
If Header = False Then
ActiveCell.Offset(0, n).Value = ColumnsArray(n)
End If
ActiveCell.Offset(i, n).Value = Result.SelectSingleNode(ColumnsArray(n)).Text
Next n
i = i + 1
Header = True
Next Result
 'MsgBox Time
Next x
End Sub

Step 3: Setup Visual Basic

1. Click the Play button in Visual Basic.  Notice that nothing works
2. Click View > Immediate Window
3. Click the Play button again in Visual Basic.  Notice the error messages in the immediate window.  It is missing important libraries to run.
4. Click Tools > References.  Check these libraries
- Microsoft WinHttp Services, version 5.1
- Microsoft xml v6.0
5. Click Ok
6. Run again.  Notice data in now in your excel sheets.