NAV4U (онлайн-журнал) » Blog Archive » Введение в веб-службы в Microsoft Dynamics NAV 2009. Часть 1.

Введение в веб-службы в Microsoft Dynamics NAV 2009. Часть 1.

Как известно появление Dynamics NAV 2009 в ноябре 2008 года было событием знаковым. При сохранении всего богатства функционала, наработанного за десятилетия эволюционного развития, была представлена новая технологическая платформа.

В первую очередь это конечно трехзвенная архитектура. Новый Microsoft Dynamics NAV Server обеспечил не только повышенную безопасность и масштабируемость системы, но и позволил реализовать ряд новых технологий, в частности ролеориентированного клиента и возможность публиковать веб-службы.

Если про ролеориентированный клиент и его преимущества хоть и кратко, но уже было написано , то про веб-службы я еще не писал.

Начну, как водится, издалека. Итак, представим себе компанию, которая решила внедрить себе ERP решение. Уже автоматизирована операционная деятельность (закупки, продажи, склад, производство и т.п.), финансы (расчеты, денежные средства), возможно бухгалтерия (рекомендую это делать на базе NAV EXPRESS). Но возможно, что в компании есть ряд задач, где использование Dynamics NAV нерационально. Причины могут быть различны, например, стоимость рабочего места или наличие программного обеспечения заточенного под определенную деятельность. Это не важно. Важен факт, что есть другое программное обеспечение и перед нами встает задача интегрировать два продукта: Dynamics NAV и «нечто».


Для этих целей можно использовать целый букет инструментов: например Microsoft Dynamics NAV Application Server или C\ODBC. Можно использовать стандартные средства Microsoft SQL Server. Не забываем о портах данных и XML портах. В общем, задачи решались.

Хотя каждый способ имеет свои преимущества, также он имеет и недостатки. Основной из них заключается в том, что при записи информации в Dynamics NAV извне, встроенная бизнес-логика (программный код, написанный на C/AL) не отрабатывает. Это плохо, ведь именно ради встроенной бизнес-логики и приобретается Dynamics NAV.
Именно эту проблему и должны решить веб-службы Microsoft Dynamics NAV – обеспечить доступ к данным и встроенной бизнес логике из сторонних приложений.

Что такое веб-служба? Я нашел такое определение.

Веб-служба (Web Services или Web-служба) - это набор услуг в виде программных приложений, идентифицированных сетевым адресом URI (Uniform Ressourse Identifier), интерфейсы и связывания (binding) которого определяются XML-средствами. Веб-службы обеспечивают прямые взаимодействия через Интернет с другими агентами программного обеспечения, используя сообщения, основанные также на XML-формате.
Т.е. веб-служба это программа, к которой можно обратиться по URI, а обмен информации происходит в формате XML.

Основу технологии составляют:

  • Интернет-протоколы HTTP и/или SMTP;
  • протоколы SOAP;
  • язык WSDL.

Но это можно было делать и раньше, с помощью NAS, MSMQ и довольно серьезного программирования.

Прелесть Microsoft Dynamics NAV 2009 заключается в том, что в качестве веб-служб могут выступать страницы (page) и программные модули (codeunit). Т.е. потенциально у нас более 1500 готовых веб-служб, к которым стороннее приложение может получить доступ.

Предлагаю перейти к более детальному рассмотрению.

Начнем с того, что разберем как же происходит публикация веб-службы. На самом деле все просто – нужная страница / программный модуль включаются в специальную табличку. Все.

Dynamics NAV 2009 поддерживает как классическую версию клиента, так и ролеориентированную, поэтому и публикацию веб-службы можно осуществлять из любого клиента.

Для классического клиента путь такой: Administration – IT Administration – General Setup – Web Services. Для ролеориентированного практически тоже самое: Departments – Administration - IT Administration – General - Web Services.

В любом случае попадем мы в одно место – форму / страницу над системной таблицей 2000000076 Web Services

Публикация веб-службы Dynamics NAV

В таблице доступно четыре поля:

  1. Object Type - тип публикуемого объекта, может принимать значение Page и Codeunit
  2. Object ID – идентификатор публикуемого объекта
  3. Service Name – имя веб-служба. Именно под этим именем данная веб-служба будет видна сторонним приложениям.
  4. Published – данный флаг указывает опубликована веб-служба или нет.

На приведенной выше картинке показано, что веб-служба ItemCard на базе страницы с идентификатором 30 опубликована.

Неплохо бы в этом убедиться.

Однако вначале лирическое отступление. Как было сказано выше – веб-служба это программа, к которой можно обратиться по URI. Однако такой запрос должен кто-то обработать. Скажу, что сам Microsoft Dynamics NAV Server этим не занимается. Данную функцию исполняет отдельная служба Microsoft Dynamics NAV Business Web Services. Надеюсь понятно, почему сделано именно так? Отдельную службу можно поместить на другом сервере (физическом), повысив таким образом безопасность системы в целом. Кстати по умолчанию Microsoft Dynamics NAV Business Web Services запускается вручную. Поэтому перед тем как проверять работоспособность веб-служб проверьте, что служба отвечающая за обработку запросов работает:

Microsoft Dynamics NAV Business Web Services

Теперь можно перейти к проверке того, что наша веб-служба опубликована и доступна. Для этого воспользуемся браузером, например, Internet Explorer.

В строке адреса введем URI веб-служб Microsoft Dynamics NAV 2009 SP1:
http://localhost:7047/DynamicsNAV/WS/CRONUS%20International%20Ltd./Services

 Проверка доступности веб-службы с помощью Internet Explorer

Второй ссылкой как раз идет наша веб-служба под именем, заданным в поле Service Name. Кстати если решите использовать в имени веб-службы пробелы, то Dynamics NAV заменит их на символ подчеркивания.

Итак, мы убедились, что веб-служба работает. Теперь ее можно использовать с помощью стороннего приложения. В качестве такого приложения может быть что угодно. Например Infopath из поставки Microsoft Office. Также приложение можно разработать самостоятельно используя Microsoft Visual Studio.

Этим мы сейчас и займемся. Разработаем небольшое приложение, которое будет использовать нашу веб-службу. Для разработки использовалась Visual Studio 2008 и язык программирования C# (кто не знает - учите, рано или поздно пригодится).

Итак запустим Microsoft Visual Studio 2008. Создадим новый проект (File – New – Project). Тип проекта Visual C#, шаблон – Windows Forms Application.

Новый проект Windows Forms Application

Назвал я проект незамысловато: ConsumingWS_ItemCard.

Пока проект состоит из пустой формы и запускать его не очень интересно. Поэтому быстренько укажем приложению ссылку на веб-службу. Для этого щелкните Project – Add Services References. Далее кнопка Advanced, затем кнопка Add Web References.

В поле URL нужно ввести адрес веб-службы. Введем http://localhost:7047/DynamicsNAV/WS/CRONUS%20International%20Ltd/Page/ItemCard . Его мы видели в Internet Explorer когда проверяли опубликована наша веб-служба или нет.

Добавить ссылку на веб-службу в проект (Add Web Reference)

В большом поле слева перечислены методы, предоставляемые данной веб-службой. Сюда входят: Create, CreateMultiple, Read, ReadMultiple, Update, UpdateMultiple, Delete и IsUpdated. Это стандартные методы для всех страниц. Сокращенно они называются CRUD функции управления данными (сокращенно от create, read, update, delete — создание, чтение, обновление, удаление).

Изменим имя ссылки на веб-службу и нажмем кнопку Add Reference. Я использовал имя ItemCardWS.

Теперь создадим элемент управления, в котором будут отображаться данные. В данном примере это будет DataGridView. Перетянем его на форму из панели инструментов (группа Data).

DataGridView выбор Data Source

Укажем ему в качестве источника данных нашу веб-службу, это можно сделать либо с помощью окна DataGridView Tasks или с помощью окна свойств (свойство DataSource).

Теперь приложение можно запустить (нажмите F5). Хотя в элементе управления появились столбцы, данных в нем пока нет.

Кстати видимость, последовательность и заголовки столбцов можно настроить в том же DataGridView Tasks.

Но сейчас нас больше волнует наполнение элемента управления данными. Легко догадаться, что делать мы это будем с помощью метода ReadMultiple. Наполнение элемента управления данными будет осуществляться при открытии формы.

Дважды щелкните по пустой части формы, чтобы открыть редактор кода и создать обработчик события Load.

Напомню, что я довольно подробно писал про архитектуру событий в C# в статьях посвященных подключаемым компонентам (Addin’ам), в частности здесь.

Но перед тем как писать код в методе Form1_Load определим переменную связанную с нашей веб-службой.

private ItemCardWS.ItemCard_Service ItemCardService;

Этот код можно поместить над методом Form1_Load.

А вот, что мы поместим в сам метод Form1_Load

ItemCardService = new ItemCardWS.ItemCard_Service(); 
ItemCardService.UseDefaultCredentials = true; 
dataGridView1.DataSource = ItemCardService.ReadMultiple(null, null, 0);

В целом наш код должен выглядеть примерно так:

Пример кода приложения работающего с веб-службой

Теперь если приложение запустить, то откроется страшненькое окошко, где будут перечислены все поля, доступные на странице Item Card.

После наведения небольшого марафета (отредактирован список полей, добавлено автоматическая подстройка под размер окна и т.п.), приложение будет выглядеть примерно так:

Пример работы приложения работающего с веб-службой Dynamics NAV

Но красота это не главное. Главное для нас сейчас понять как это работает.

Благо я привел кратенький код и не злоупотреблял директивой using.

Про директиву using также было написано в статьях про подключаемые компоненты (Addin’ы), в частности здесь.

Для начала было создано свойство ItemCardServices типа ItemCardWS.ItemCard_Service. ItemCardWS – это имя, которые мы присвоили ссылке на веб-службу в окне Add Reference.
Далее в функции Form1_Load мы инициировали ранее создание свойство ItemCardServices с помощью директивы new и конструктора по умолчанию.

Это стандартные операции и они довольно детально были расписаны в статьях про подключаемые компоненты из предыдущего выпуска.

А вот следующая строка представляет интерес, т.к. связана с авторизацией и правами доступа. Дело в том, что абы кто не сможет пользоваться нашим приложением, т.к. веб-служба отдает данные только тем пользователям, для которых заведен Login в Dynamics NAV (как не трудно догадаться Windows Login).

Данная строка говорит, что должна использоваться текущая учетная запись:

ItemCardService.UseDefaultCredentials = true;

Если же бизнес-процесс подразумевает, что пользоваться данным приложением может множество пользователей и заводить для них регистрационные имена в Dynamics NAV нецелесообразно, то можно поступить следующим образом.

Создать специального пользователя и настроить для него права доступа. Работать с веб-службой от имени этого пользователя. Для этого вместо указанной выше строки нужно использовать следующий код:

ItemCardService.UseDefaultCredentials = false;
ItemCardService.Credentials = new System.Net.NetworkCredential(”<user>”,”<password>”,”<domain>”);

Последняя строка отвечает за получение данных от веб-службы.

dataGridView1.DataSource = ItemCardService.ReadMultiple(null, null, 0);

Внимательные граждане заметили, что мы не использовали ни один из доступных параметров (передали пустые объекты). Конечно, это сделано для простоты и наглядности, чего не хватает остальным источникам (лично мне не хватало именно этого).

После того как предварительное знакомство завершено. Можно перейти к более глубокому изучению работы с веб-службами Dynamics NAV 2009.

Метки:



Оставьте свой отзыв!