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):
http://www.mibuso.com/dlinfo.asp?FileID=1022 
(Международный (W1) дистрибутив Navision 2009 (~1,1 Gb).
В дистрибутиве по умолчанию только демо-лицензия. Т.е. по сути, вы будете иметь 2-пользовательскую систему с демо-лицензией)



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



Microsoft Dynamics NAV 2009 Developer and IT Pro Help:
http://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(http://msdn.microsoft.com/en-us/library/dd355184.aspx )/


— cside.zip (6.3 MB)…
“Walkthrough: Registering and Consuming a Page Web Service”
/Также есть статья MSDN(http://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) (http://mow-gtsc-3:7047/DynamicsNAV/WS/services ) что у нас есть доступ к Web Service


 


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


 



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


 




17. С сайта http://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: http://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 = «http://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 = «http://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 = «http://mow-gtsc-3:7047/DynamicsNAV/WS/CRONUS_International_Ltd/Page/Customer«;


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


 


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



NAV2009WebService.doc

Comments (2)

  1. spike_by:

    а почему Visual C# 2008 Express Edition стал триал ?

  2. Express редакция бесплатная, но прорегистрироваться в течении 30 дней надо, вроде как, все равно. Т.е. нет не триал, а халява, но с регистрацией.