The Connecting to NAV Web Services series is coming to an end. I think I have covered the majority of platforms from which you would like to connect and use NAV Web Services – some things are easy and some things are a little harder. I did not cover Flash nor did i cover things like the iPhone or iPod Touch, primarily because I don’t think the demand is there. If I have forgotten any platform/language please let me know and if the demand is there I might make something work.
Including VBScript makes it possible to do Web Services from scripting like login, shutdown and maintenance scripts. I know that VBScript can also be used from certain browsers but the real idea behind including VBScript here is to enable command line scripts.
Please read this post to get a brief explanation of the scenario I will implement in VBScript.
The Script file
I created a file called TestWS.vbs and the code to implement the scenario looks like:
function InvokeNavWS(URL, method, nameSpace, returnTag, parameters)
Set xmlhttp = CreateObject("MSXML2.XMLHTTP")
request = "<Soap:Envelope xmlns:Soap="""+SoapEnvelopeNS+"""><Soap:Body><"+method+" xmlns="""+nameSpace+""">"+parameters+"</"+method+"></Soap:Body></Soap:Envelope>"
' Use Post and non-async
xmlhttp.open "POST", URL, false
xmlhttp.setRequestHeader "Content-type", "text/xml; charset=utf-8"
xmlhttp.setRequestHeader "Content-length", len(request)
xmlhttp.setRequestHeader "SOAPAction", method
' send request synchronously
' 200 == OK
if xmlhttp.status = 200 then
Set xmldoc = xmlhttp.responseXML
xmldoc.setProperty "SelectionLanguage", "XPath"
xmldoc.setProperty "SelectionNamespaces", "xmlns:tns="""+nameSpace+""""
Set InvokeNavWS = xmldoc.selectNodes("//tns:"+returnTag)
Set InvokeNavWS = nothing
' Get the Company list
Set SystemService_Companies = InvokeNavWS(systemServiceURL, "Companies", systemServiceNS, "return_value", "")
' Read one customer
Set CustomerPage_Read = InvokeNavWS(CustomerPageURL, "Read", CustomerPageNS, "Customer", "<No>"+no+"</No>")
' Read Customers
Set CustomerPage_ReadMultiple = InvokeNavWS(CustomerPageURL, "ReadMultiple", CustomerPageNS, "Customer", filters)
baseURL = "http://localhost:7047/DynamicsNAV/WS/"
systemServiceURL = baseURL + "SystemService"
soapEnvelopeNS = "http://schemas.xmlsoap.org/soap/envelope/"
systemServiceNS = "urn:microsoft-dynamics-schemas/nav/system/"
customerPageNS = "urn:microsoft-dynamics-schemas/page/customer"
Set Companies = SystemService_Companies()
for i = 0 to Companies.length-1
cur = Companies(0).text
customerPageURL = baseURL+escape(cur)+"/Page/Customer"
display "URL of Customer Page:"
Set Customer10000 = CustomerPage_Read("10000")
display "Name of Customer 10000: "+Customer10000(0).childNodes(2).firstChild.nodeValue
Set Customers = CustomerPage_ReadMultiple("<filter><Field>Country_Region_Code</Field><Criteria>GB</Criteria></filter><filter><Field>Location_Code</Field><Criteria>RED|BLUE</Criteria></filter>")
display "Customers in GB served by RED or BLUE warehouse:"
for i = 0 to Customers.length-1
display "THE END"
- Displaying things are done using WScript.echo – this will result in a messagebox if you are using WScript to run the script and a commandline output if you are using CScript (I use CScript)
Running the script
Using the command:
C:\users\freddyk>SCript /nologo testws.vbs
I get the following:
and of course you can now to things as redirecting the output to a file and typing or searching in that file:
This is something network administrators are experts in doing – I won’t try to compete in any way.
I hope this is helpful.
Microsoft Dynamics NAV