Koppeling met webservice van Navision2009R2

navision2009R2

Voorbereiding koppeling Navision2009R2

Hier zal ik een kleine uitleg geven hoe u met c# een koppeling kunt maken met Navision2009R2 via de web service die Navision2009R2 aanbiedt.
Voor u de web service kunt bereiken moet u in Navision2009R2 de functie aanzetten.
Ik ga ervan uit dat u basis kennis heeft van programmeren en navision zodat ik alleen uitleg geef hoe u makkelijk kunt koppelen en gegevens uit het systeem kunt halen.

Hoe voeg ik een Webservice toe?

Selecteer Add Service Reference in visual studio:

visualstudio-add-service

visualstudio-add-service

Click nu op advance

visualstudio-add-service-advance

visualstudio-add-service-advance

Selecteer Add Web Reference

 

visualstudio-add-web-reference

visualstudio-add-web-reference

Type in de URL en de namespace voor de SystemService Web Reference

visualstudio-url-namespace

visualstudio-url-namespace

Voeg voor de customer page de webreference

visualstudio-customer-page-web-reference

visualstudio-customer-page-web-reference

Wanneer u een web reference toevoegd, Dan zal visual studio een config bestand toevoegen waar het gegevens in opslaat.

Authenticatie

In de volgende voorbeeld maken wij gebruik van Windows Authenticatie. In Web Reference hoef je alleen de eigenschap UseDefaultCredentials in service class op true te zetten, dan zal .net automatisch de standaard windows gegevens gebruiken om te koppelen met de Navision web service.

Als je via een ander gebruikersnaam en wachtwoord wilt authenticeren dan veranderd u deze lijn

someService.UseDefaultCredentials = true;

naar dit:

someService.Credentials = new NetworkCredential("user", "password", "domain");

De code

Wij gaan gebruik maken van een standaard console app die je in Visual studio kunt creƫren.

using System;
using System.Net;
using testApp.CustomerPageRef;
using testApp.SystemServiceRef;
namespace testApp
{
class Program
{
static void Main(string[] args)
{
// main program code
}
}
}

 

vervang // main program code met het volgende:

string baseURL = "<a href="http://localhost:7047/DynamicsNAV/WS/%22;">http://localhost:7047/DynamicsNAV/WS/";</a>
SystemService systemService = new SystemService();
systemService.Url = baseURL + "SystemService";
systemService.UseDefaultCredentials = true;
Console.WriteLine("Companies:");
string[] companies = systemService.Companies();
foreach (string company in companies)
Console.WriteLine(company);
string current = companies[0];

 

Hiermee haal ik alle bedrijven op in Navision.
Nu dat ik de string current heb gevuld met het bedrijfsnaam. Kan ik current gebruiken om het volgende te doen:

string customerPageURL = baseURL + Uri.EscapeDataString(current) + "/Page/Customer";
Console.WriteLine("\nURL of Customer Page: " + customerPageURL);
Customer_Service customerService = new Customer_Service();
customerService.Url = customerPageURL;
customerService.UseDefaultCredentials = true;

Met het volgende ga ik klant met id 10000 uitlezen:

Customer cust10000 = customerService.Read("10000");
Console.WriteLine("\nName of Customer 10000: " + cust10000.Name);

Nu gaan wij een filter toepassen om alle klanten uit het systeem te halen met als locatie GB en met locatie code RED of BLUE:

Customer_Filter filter1 = new Customer_Filter();
filter1.Field = Customer_Fields.Country_Region_Code;
filter1.Criteria = "GB";
Customer_Filter filter2 = new Customer_Filter();
filter2.Field = Customer_Fields.Location_Code;
filter2.Criteria = "RED|BLUE";
Console.WriteLine("\n Customers in GB served by RED or BLUE warehouse:");
Customer_Filter[] filters = new Customer_Filter[] { filter1, filter2 };
Customer[] customers = customerService.ReadMultiple(filters, null, 0);
foreach (Customer customer in customers)
Console.WriteLine(customer.Name);
Console.WriteLine("\n Einde");
Console.ReadLine();

Voer nu de console app voor de resultaat.

voor mee info hier link naar originele post in het engels.