NAV2009 и Web Service, пример


(Для удобства отдельный .doc файл c текстом поста и качественными картинками прикрепляю)

Попробую привести развернутый пример c картинками, включающий в себя:
- Инсталляцию 3 звеньев NAV 2009 на 2 компьютера (клиент + сервер /база  + server tier (промежуточное звено)/)
- Регистрация и использование функционала Web сервисов NAV

Что особо примечательно возможности Web service NAV актуальны вне зависимости от используемого, на основной массе рабочих машин, клиентcкого интерфейса NAV (Классического или RT /Role Tailored, новый клиент/).

Открытые источники, на основе которых сформирован материал:

Microsoft Dynamics NAV W1 2009 (Product DVD):
https://www.mibuso.com/dlinfo.asp?FileID=1022 
(Международный (W1) дистрибутив Navision 2009 (~1,1 Gb).
В дистрибутиве по умолчанию только демо-лицензия. Т.е. по сути, вы будете иметь 2-пользовательскую систему с демо-лицензией)

Visual C# 2008, Express Edition (бесплатная редакция, надо только прорегистрироваться)
https://www.microsoft.com/express/download

Microsoft Dynamics NAV 2009 Developer and IT Pro Help:
https://www.microsoft.com/downloads/details.aspx?FamilyID=eec997be-50c8-4d27-8bf2-fa93c9ac282a&DisplayLang=en
- nav_install.zip (286 KB)...
“Walkthrough: Installing the Three Tiers On Two Computers”.
/Также есть статья MSDN(https://msdn.microsoft.com/en-us/library/dd355184.aspx )/

- cside.zip (6.3 MB)…
“Walkthrough: Registering and Consuming a Page Web Service”
/Также есть статья MSDN(https://msdn.microsoft.com/en-us/library/dd355316.aspx )/

 

Пример: 

0. В качестве отправной точки у меня есть сервер Windows Server 2003 (MOW-GTSC-3) c установленным на нем SQL Server 2005, а в качестве клиента буду использовать машину под управлением Windows Vista

СЕРВЕР:   (шаги 1-6 выполняются на серверной машине)

 

1. Запускаю Autorun.exe c дистрибутива NAV2009

 

2. Устанавливаем Database Components

 

3. В результате у нас появляется база данных “Demo Database NAV (6-0)”

 

4. Устанавливаем NAV Server service

 

5. В результате у нас появляется два новых сервиса: Microsoft Dynamics NAV Server (стартует автоматически /Automatic/) и Microsoft Dynamics NAV Business Web Services (по умолчанию стартует вручную /Manual/)

 

6. Запускаем сервис Microsoft Dynamics NAV Business Web Services

 

7. Переходим на клиентскую машину, устанавливаем RoleTailored Client

КЛИЕНТ: (шаги 7-27 выполняются на клиентской машине)

 

8. Запускаем RT клиента, пункт меню Windows \ Start \ Programs \“Microsoft Dynamics NAV 2009”

В результате имеем ошибку: “...1251 ..code page on your computer does not match the 1252 code page…”

 

Проблема вызвана тем, что у нас в системе по умолчанию стоит русская кодовая страница, и она не стыкуется c латинской кодовой странице, проставленной в международной демонстрационной базе.

9. Отключим проверку кодовой страницы в настроечной SQL таблице NAV ($ndo$dbproperty)

 

10. Запускаем RT клиента, пункт меню Windows \ Start \ Programs \“Microsoft Dynamics NAV 2009”

 

11. Устанавливаем Classic Client

 

12. Запускаем классического SQL клиента, пункт меню Windows \ Start \ Programs \“Microsoft Dynamics NAV 2009 Classic with Microsoft SQL Server”

 

13. Добавляем необходимое количество пользователей в Windows Logins и запускаем синхронизацию

 

14. Проверяем через Internet Explorer (IE) (https://mow-gtsc-3:7047/DynamicsNAV/WS/services ) что у нас есть доступ к Web Service

 

15. Заходим в классического SQL клиента, в Administration \ General Setup \ Web Service, добавляем строчку, публикующую как Web service карточку клиента – Page 21
(так же можно опубликовать codeunit, подробнее смотри:
https://msdn.microsoft.com/en-us/library/dd339004.aspx )

 

16. Проверяем через Internet Explorer (IE)
(https://mow-gtsc-3:7047/DynamicsNAV/WS/CRONUS_International_Ltd/services
https://mow-gtsc-3:7047/DynamicsNAV/WS/CRONUS_International_Ltd/Page/Customer)
что у нас есть доступ к сервису Page/Customer

 

17. С сайта https://www.microsoft.com/express/download ставим Visual C# 2008 Express Edition (бесплатная редакция, надо только прорегистрироваться)

 

18. Запускаем Visual C# 2008 Express Edition

19. Создаем новый Project (Console Application) c именем PrintCustomerList

20. В Solution Explorer жмем References, правая кнопка мыши,  Add Service Reference

 

21. В окне Add Service Reference жмем кнопку Advanced

 

22. Жмем Add Web Reference

 

23. Пробиваем в URL: https://mow-gtsc-3:7047/DynamicsNAV/WS/services  и жмем Go

 

24. Нажимаем View Service

 

25. В Web Reference name пробиваем WebService и жмем Add Reference

26. Переходим в Program.cs

И вставляем код:

using System;
using System.Collections.Generic;
using System.Text;

namespace PrintCustomerList
{
    // import newly generated Web service proxy
    using WebService;
   
    class Program
    {
        static void Main(string[] args)
        {
            // Create instance of service and setting credentials
            Customer_Service service = new Customer_Service();
            service.UseDefaultCredentials = true;
            service.Url = "https://mow-gtsc-3:7047/DynamicsNAV/WS/CRONUS_International_Ltd/Page/Customer";
            // Create instance of customer
            Customer cust = new Customer();
            cust.Name = "Customer Name";
            Msg("Pre Create");
            PrintCustomer(cust);
           
            // Insert customer
            service.Create(ref cust);
            Msg("Post Create");
            PrintCustomer(cust);

            // Create filter for searching for customers
            List<Customer_Filter> filterArray = new List<Customer_Filter>();
            Customer_Filter nameFilter = new Customer_Filter();
            nameFilter.Field = Customer_Fields.Name;
            nameFilter.Criteria = "C*";
            filterArray.Add(nameFilter);

            Msg("List before modification");
            PrintCustomerList(service, filterArray);

            cust.Name = cust.Name + "Updated";
            service.Update(ref cust);

            Msg("Post Update");
            PrintCustomer(cust);

            Msg("List after modification");
            PrintCustomerList(service, filterArray);
            service.Delete(cust.Key);

            Msg("List after deletion");
            PrintCustomerList(service, filterArray);

            Msg("Press [ENTER] to exit program!");
            Console.ReadLine();
        }

        // Print list of filtered customers
        static void PrintCustomerList(Customer_Service service, List<Customer_Filter> filter)
        {
            Msg("Printing Customer List");
           
            //conduct the actual search
            Customer[] list = service.ReadMultiple(filter.ToArray(), null, 100);
            foreach (Customer c in list)
            {
                PrintCustomer(c);
            }
            Msg("End of List");
        }

        static void PrintCustomer(Customer c)
        {
            Console.WriteLine("No: {0} Name: {1}", c.No,c.Name);
        }

        static void Msg(string msg)
        {
            Console.WriteLine(msg);
        }
    }
}
Варианты кода:
Вместо
            service.UseDefaultCredentials = true;
            service.Url = "https://mow-gtsc-3:7047/DynamicsNAV/WS/CRONUS_International_Ltd/Page/Customer";

можно воспользоваться прямой подстановкой пользователя и пароля
            service.UseDefaultCredentials = false;
            service.Credentials = new System.Net.NetworkCredential("user", "password", "DOMAIN");
            service.Url = "https://mow-gtsc-3:7047/DynamicsNAV/WS/CRONUS_International_Ltd/Page/Customer";

также можно использовать прямой IP
   service.Url = "https://157.58.48.33:7047/DynamicsNAV/WS/CRONUS_International_Ltd/Page/Customer";

 

27. Запускаем Debugger… видим что приложение отрабатывает

NAV2009WebService.doc