.Net Interop: Consume a third party web service (Check VAT Registration No.)

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 constructor

CountryCode := 'BE';
VATNumber := '0885815777';
//VATNumber := '0863844386';
//VATNumber := '0891609053';

CheckVATService.checkVat(CountryCode,VATNumber,Success,Name,Address);

IF Success THEN
MESSAGE(Name + '\' + Address)
ELSE
MESSAGE('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!

Comment List
Related
Recommended