Utilizar web services de Dynamivs NAV en .NET

Como sabeis, a partir de la versión 2009, Dynamics NAV (Navision) incorpora web services nativos. Este artículo muestra como crear un sencillo web service y como llamarlo desde una aplicación externa desarrollada en .NET

Requisitos
Para poder desarrollar este ejemplo hace falta tener instalado:
Servidor de la última versión de Navision Dynamics NAV 2009 SP1.
Cliente clásico de Navision.
Visual Studio 2008 en alguna de sus variantes Express o Professional.
(Podeis descargar estos componentes desde www.navidemo.com)

Dynamics NAV
Desde el cliente clásico, crear una nueva Codeunit, declarar la variable Itm de tipo Record y subtipo Item, añadir el siguiente código:

GetStock(Almacen : Code[10];Producto : Code[20];Fecha : Date) Stock : Decimal
CLEAR(Itm);
IF Producto = » THEN
  ERROR(‘GetStock: Debe especificarse el codigo de producto.’);
IF NOT Itm.GET(Producto) THEN
  ERROR(‘GetStock: Codigo de producto incorrecto.’);
IF Almacen <> » THEN
  Itm.SETRANGE(«Location Filter», Almacen);
IF Fecha = 0D THEN
  Fecha := TODAY;
Itm.SETFILTER(«Date Filter», ‘..%1’, Fecha);

Itm.CALCFIELDS(Inventory, «Qty. on Purch. Order», «Qty. on Sales Order», «Trans. Ord. Receipt (Qty.)»,  «Trans. Ord. Shipment (Qty.)»);

Stock := (Itm.Inventory + Itm.»Qty. on Purch. Order» – Itm.»Qty. on Sales Order» + Itm.»Trans. Ord. Receipt (Qty.)» – Itm.»Trans. Ord. Shipment (Qty.)»);

Esta función retorna el stock más lo pendiente de recibir de proveedores menos lo pendiente de entregar a clientes más lo pendiente de recibir de otros almacenes menos lo pendiente de entregar a otros almacenes, opcionalmente de un almacén en concreto y a una fecha determinada.

Deberemos abrir el formulario 810 Web Services y publicar una referencia a la Codeunit creada anteriormente con el nombre wsNAVtest

.NET
Desde Visual Studio crear un nuevo proyecto de tipo Windows Application, y añadir una Web Reference a http://localhost:7047/dynamicsnav/ws/Codeunit/wsNAVtest  (deberemos sustituir localhost por el nombre del servidor de Navision si no está en nuestra máquina).
En el Form1 añadir un botón y añadir el siguiente código en el evento Button1_Click:

Dim myWS As New wsNAVtest.wsNAVtest
Dim myAlmacen As String
Dim myProducto As String
Dim myDate As Date
Dim myStock As Decimal

Try
  ‘Instanciamos nuevamente la URL para que se pueda cambiar de servidor o de empresa
 
‘(Fijaos que el nombre de la empresa “CRONUS España S.A.” esta incluido en la URL)
  myWS.Url = «http://localhost:7047/dynamicsnav/ws/CRONUS España S.A./Codeunit/wsNAVtest«

  ‘Usuario y password con acceso al servidor y a Dynamics NAV (Navision)
  myWS.Credentials = New System.Net.NetworkCredential(«user», «pass», «domain»)

  ‘Finalmente ejecutamos la función que nos retorna el stock
 
‘<almacen> y <fecha> se pueden dejar en blanco. <producto> es obligatorio
  myStock = myWS.GetStock(myAlmacen, myProducto, myDate))

  ‘Lo mostramos 
  MsgBox( myStock )

Catch ex As System.Web.Services.Protocols.SoapException
  MsgBox(ex.Message)

End Try

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *