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… видим что приложение отрабатывает
Comments
Anonymous
February 10, 2009
а почему Visual C# 2008 Express Edition стал триал ?Anonymous
February 10, 2009
The comment has been removed