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.
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 xmlhttp.send request
' 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) else Set InvokeNavWS = nothing end if
' Get the Company list function SystemService_Companies() Set SystemService_Companies = InvokeNavWS(systemServiceURL, "Companies", systemServiceNS, "return_value", "") end function
' Read one customer function CustomerPage_Read(no) Set CustomerPage_Read = InvokeNavWS(CustomerPageURL, "Read", CustomerPageNS, "Customer", "<No>"+no+"</No>") end function
' Read Customers function CustomerPage_ReadMultiple(filters) Set CustomerPage_ReadMultiple = InvokeNavWS(CustomerPageURL, "ReadMultiple", CustomerPageNS, "Customer", filters) end function
sub display(str) WScript.echo str end sub
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() display "Companies:" for i = 0 to Companies.length-1 display Companies(i).text next cur = Companies(0).text
customerPageURL = baseURL+escape(cur)+"/Page/Customer" display "" display "URL of Customer Page:" display customerPageURL
Set Customer10000 = CustomerPage_Read("10000") display "" 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 "" display "Customers in GB served by RED or BLUE warehouse:" for i = 0 to Customers.length-1 display Customers(i).childNodes(2).firstChild.nodeValue next
display "" display "THE END"
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.
Freddy Kristiansen PM Architect Microsoft Dynamics NAV