Transactional Web Service |
Top Previous Next |
In addition to using the Simple Reporting Service to retrieve data from Navigator, it is possible to complete a number of transactions on Navigator using web service calls.
In order to do this, you will need to contact your Navigator Account Manager to be allocated an API key - which is targeted specifically to allow the calls you wish to make.
Each Navigator transaction contains the following information :-
API Key: The API Key supplied by Navigator Session Key: An optional Session Key used for security - this is retrieved using a login call if needed for the call in question Method Name: The name of the transaction to call
In addition each call may have a specific set of parameters sent and returned.
The URL for the web service is : https://services.dmservices.co.uk/DmsNavigator.NavigatorWebService.svc/CallProgExt
The web service uses HTTP POST to accept a text/text data structure that may be XML or JSON in the following format :-
XML
<request> <apikey>i[api key]</apikey> <method>[method name]</method> <parameters> <[parameter 1 name]>[parameter 1 data]</[parameter 1 name]> <[parameter 2 name]>[parameter 2 data]</[parameter 2 name]> <[parameter 3 name]>[parameter 3 data]</[parameter 3 name]> ... <[parameter n name]>[parameter n data]</[parameter n name]> </parameters> </request>
JSON
{ "request": { "apikey": "[api key]", "method": "[method name]", "parameters": { "[parameter name 1]": "[parameter 1 data]", "[parameter name 1]": "[parameter 2 data]", "[parameter name 2]": "[parameter 3 data]", ... "[parameter name n]": "[parameter n data]"
} } }
The web service call returns a result containing the following information :-
Method : The transaction method name called resultcode: 1/0 to indicate success or failure message: a general message indicating reason for failure or generic success message result: a list of returned parameters
XML
<response> <method>WIN.TEST</method> <resultcode>[1/0 - success or failure</resultcode> <message>[Error Message or information]</message> <result> <[result 1 name]>[result 1 data]</[result 1 name]> <[result 2 name]>[result 2 data]</[result 2 name]> <[result 3 name]>[result 3 data]</[result 3 name]> ... <[result n name]>[result n data]</[result n name]> </result> </response>
JSON
{ "response:{ "method": "[method name]", "resultcode": "[1/0]", "message": "[message returned]", "result": { "result 1 name": "[result 1 data returned", "result 2 name": "[result 2 data returned", "result 3 name": "[result 3 data returned", ... "result n name": "[result n data returned" } } }
Many transactional calls are available, in theory duplicating almost anything that Navigator itself can do - for example posting a nominal journal, or adding a stock record.
A typical use of this will be in Excel. Excel supports macros written in VBA. For those that are familiar, sample VBA call made to make a call and parse the result is as follows -
Excel VBA Sample
Public Sub CallProg()
' call prog Dim wsControl As Worksheet Dim apiKey As String Dim MethodName As String Set wsControl = Sheets("Control") apiKey = wsControl.Cells(3, 2) ' assumes the API key is stored in cell B3 in Control Sheet MethodName = wsControl.Cells(4, 2) ' assumes the method name is stored in cell B4 in Control Sheet
' Set up XML for call Dim xml As String xml = "<request>" xml = xml & "<apikey>" & apiKey & "</apikey>" xml = xml & "<method>" & MethodName & "</method>" xml = xml & "<parameters>"
' Assumes that the control sheet has a list of parameter names in columm A and the data in column B starting at column 7 onwards
Dim rowno As Integer rowno = 7 Do xml = xml & "<" & wsControl.Cells(rowno, 1) & ">" & wsControl.Cells(rowno, 2) & "</" & wsControl.Cells(rowno, 1) & ">" rowno = rowno + 1 Loop Until wsControl.Cells(rowno, 1) = "" xml = xml & "</parameters>" xml = xml & "</request>"
' Make the call Destws = wsControl.Cells(5, 2) ' Assumes the destination sheet for the call result is stored in cell B5 in Control Sheet
Sheets(Destws).Activate With ActiveSheet.QueryTables.Add(Connection:="URL;https://services.dmservices.co.uk/DmsNavigator.NavigatorWebService.svc/CallProgExt", Destination:=Range("A2")) .PostText = xml .RefreshStyle = xlOverwriteCells .SaveData = True .BackgroundQuery = False .Refresh End With
' Now parse the result xml = Range("A2").Text
ActiveSheet.Cells(4, 1) = "Batch No" ActiveSheet.Cells(4, 2) = getXML(xml, "BatchNo") ' This example extracts a result of "BatchNo" and displays in cell B4 in the reault sheet
End Sub
Public Function getXML(xml As String, NodeName As String) As String ' Function to extract XML result information Dim oXml As MSXML2.DOMDocument60 Set oXml = New MSXML2.DOMDocument60 oXml.LoadXML xml Dim oSeqNodes, oSeqNode As IXMLDOMNode
Set oSeqNodes = oXml.SelectNodes("//response/result")
getXML = oSeqNodes(0).SelectSingleNode(NodeName).Text End Function
|