…(Для удобства отдельный .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… видим что приложение отрабатывает
а почему Visual C# 2008 Express Edition стал триал ?
Express редакция бесплатная, но прорегистрироваться в течении 30 дней надо, вроде как, все равно. Т.е. нет не триал, а халява, но с регистрацией.