Vote
Bury
9
Some time ago, I did a session at Direction EMEA in Berlin. Apparently, some people were inspired with this. Not only did I introduce "cannibalism" (never expected this to be something "hot, new and inspiring" but rather something "obvious" - let's spend a blogpost on that as well.. :) ), but also I showed an example of consuming a third party web service. And some time ago (quite some time, actually), I promised one of the attendees to blog about the VAT example I showed there.
In fact, you can see this as "consuming a third party web service". There are tons of those out there .. and this example is quite useful, if you ask me (more useful than getting the weather info, or a list of songs of a certain genre, is it.. ;°) ).
What Web Service?
A functional consultant pointed me to a certain official webservice that had some promising capabilities. This is the website that uses that same webservice:
http://ec.europa.eu/taxation_customs/vies/
As you can see, you can validate the VAT Number in quite some European countries. This is something customers definitely want .. so what if we could build such a functionality in NAV. We would need a web service, right? Well, here it is, just for free:
http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
Basically, using this web service, is kind of the same way as using any web service - so also quite the same as I described in this blogpost: NAV 2009 R2 .Net Interop: Calling a Web Service (come to think of it - I can make this blog quite short and let's share the objects I created here).
Building the Proxy
This will take the majority of your time - at least 2 minutes (because Visual Studio doesn't load very fast). I'm not going to create a service reference, but a web reference.

Create a new project in Visual Studio
Make sure you're using .Net Framework 3.5
Create a class library called "VATValidation" (at least I did)

So you get this:



Now, right click "References" and click "Service Reference":

As I mentioned, I'm going to use a web reference, so let's click Advanced / Add Web Reference and provide the url I mentioned above. Give it a proper name (I used "VATValidationService") and click "Add Reference":

That's it, people! Build you're solution and get the hell out of Visual Studio!
Deploy
You're safe now .. you're almost back in you familiar habitat (we like to call C/AL). Just first copy the dll (which is the proxy class you'll need in NAV) to your classic client and server:

Get the dll from yourproject\VATValidation\bin\Debug

Copy it to:

C:\Program Files (x86)\Microsoft Dynamics NAV\60\Classic\Add-ins
C:\Program Files (x86)\Microsoft Dynamics NAV\60\Service\Add-ins



(in my case, the server is running on my laptop, but obviously, you should put the dll wherever it will be used - NST, failover, ...). In this case, my NST will be executing the business logic, so I don't have to put it client-side.
Use
Let's go to nav and write some very simple code there - it's not functional in any way, it's just a test-codeunit that uses the service. You can build the business logic any way you like.
First declare some variables:






Name


DataType


Subtype


Length




CheckVATService


DotNet


'VATValidation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.VATValidation.VATValidationService.checkVatService


  




CountryCode


Code


  


10




VATNumber


Text


  


1024




Name


Text


  


1024




Address


Text


  


1024




Success


Boolean


  


  





Then, OnRun, I wrote these lines of code:
CheckVATService := CheckVATService.checkVatService(); //the constructorCountryCode := 'BE';VATNumber := '0885815777';//VATNumber := '0863844386';//VATNumber := '0891609053';CheckVATService.checkVat(CountryCode,VATNumber,Success,Name,Address);IF Success THENMESSAGE(Name + '\' + Address)ELSEMESSAGE('No Success');
I agree, the business logic is not useable at all .. but that was not the intention. I just provided you the way to use the CheckVat function .. and now it's up to you.
The Download
The download contains my test-objects from my demo-db. Take them "as is" .. so if you want to implement this at a customer, do that on your own risk - and reconsider the code (make it "partner ready" :-) ).
The download contains:

The RTC codeunit. You'll have to provide an action on some page to be able to run it.
A classic codeunit. Did't mention it above, but this is code what it would look like in the classic environment. It also works .. but who wants to write that? :-) It's just there for your reference/comparison.
The Proxy class. In the folder mentioned above, you'll find the dll that you'll have to deploy

Enjoy!

My goal is to share my love and knowledge of Microsoft Dynamics software. If you want fluff-free stories about software with legs, you've come to the right place.

DynamicsTips.com is the place to get the latest news and technical tips on Microsoft Dynamics products, whether you're a developer or a user.


Stay In Touch,
Follow Me!