Navision Database: доступ через C/ODBC WebService/ASP.NET приложение

 

Игорь Кудряшов

Alba Spectrum Technologies

(095) 918-3314, (095) 918-3111, help@albaspectrum.com  

 

 

Navision (прежняя Navision Attain) сегодня вместе с Microsoft Great Plains, Axapta, Solomon, Microsoft CRM и Microsoft RMS поддерживается компанией Microsoft в рамках Microsoft Business Solutions.  Navision имеет множество возможностей для адаптации и настройки под задачи заказчика. 

 

Здесь мы опишем простой случай использования C/ODBC драйвера.  Этот драйвер и технология, описанная ниже,  позволяют работать с Native или C/SIDE Navision базой данных.  Navision также доступна на Microsoft SQL сервере – в этом случае, используются традиционные Microsoft технологии, такие как OLEDB, MS SQL Server драйвер для создания ADO.NET соединения.   

 

 

Наша цель помочь отделам информационных технологий поддерживать и настраивать Navision используя свои внутренние ресурсы. В этой статье мы рассмотрим доступ  к данным Navision Attain с помощью WebService и представление полученных данных в ASP.NET приложении. Данные WebService будет получать от MS SQL Server 2000, сопряженного с Attain Database через интерфейс C/ODBC. Целью наших действий будет являться создание страницы просмотра Navision Items. Приступим:

 

  1. Для нашей работы мы используем Navision Attain 3.6 в составе Navision Database Server, Navision Application Server и Navision Client. Данные компоненты установлены на Windows XP. Для обеспечения работы через C/ODBC интерфейс, необходимо установить соответствующий компонент с дистрибутивного диска Navision Attain.

 

  1. Создадим ODBC DSN для доступа к нашим данным Navision. Для этого выберем Start -> Control Panel -> Administrative Tools -> Data Sources (ODBC). Затем выбираем вкладку System DSN и нажимаем кнопку Add. Мы будем использовать C/ODBC 32-bit драйвер для доступа к данным. Зададим Data Source Name  как Navision, Connection оставим Local. В качестве базы данных (кнопка Database) выберем \Program Files\Navision Attain\Client\database.fdb (демонстрационная база данных). Затем нажмем кнопку Company (единственной доступной компанией для демонстрационной базы является CRONUS. Ее и будем использовать). Важным условием для корректной работы с C/SIDE базами данных является корректное выставление опций для C/ODBC соединения. Нажмем кнопку Options и посмотрим на доступные опции – нас будет интересовать параметр Identifiers – он определяет вид идентификаторов, которые будут переданы клиентской программе. Для корректной работы MS SQL Server 2000 с C/ODBC источником мы будем использовать тип a-z,A-Z,0-9,_”. На этом создание источника данных завершено. Приступим к организации Linked Server

 

  1. Откроем SQL Server Enterprise Manager.  Откройте дерево сервера, который будете использовать, в нем выберите пункт Security и подпункт Linked Servers. Правой кнопкой в контекстном меню выберите New Linked Server. В появившемся диалоговом окне, в меню Provider Name выберем Microsoft OLE DB Provider for ODBC Drivers. Пусть наш Linked Server называется NAVISION. В строке Data Source введем имя ODBC источника – у нас он назывался также NAVISION. Linked Server готов! Выберем в нем список таблиц и увидим данные из баз Navision Attain.

 

  1. Далее нам необходимо создать небольшую хранимую процедуру для выборки по продажам. Текст процедуры приведен ниже:

     

SET ANSI_NULLS ON

SET ANSI_WARNINGS ON

GO

 

CREATE PROCEDURE NavisionItems AS

 

DBCC TRACEON(8765)

SELECT * FROM OPENQUERY(NAVISION, 'SELECT * FROM Item')

 

RETURN

Поясним некоторые моменты. Директива TRACEON(8765) позволяет откорректировать работу с данными переменной длины, возвращаемыми C/ODBC драйвером. Без нее мы не сможем выбирать поля из таблиц Navision, т.к. будем получать ошибки типа:

 

OLE DB error trace [Non-interface error:  Unexpected data length returned for the column:  ProviderName='MSDASQL', TableName='[MSDASQL]', ColumnName='Ship_to_Filter', ExpectedLength='250', ReturnedLength='1'].

Server: Msg 7347, Level 16, State 1, Line 1

OLE DB provider 'MSDASQL' returned an unexpected data length for the fixed-length column '[MSDASQL].Ship_to_Filter'. The expected data length is 250, while the returned data length is 1.

 

Директива OPENQUERY открывает связанный сервер и передает ему запрос на выполнение, возвращая после этого выбранные данные. Необходимым условием для создания хранимой процедуры является задание директив ANSI_NULLS и ANSI_WARNINGS, которые позволяют использовать в хранимых процедурах выполнение гетерогенных запросов. Проверить корректность работы процедуры можно, задав команду в MS SQL Query Analizer EXEC NavisionItems

  1. Теперь приступим к собственно созданию ASP.NET приложения. Для разработки воспользуемся свободно распространяемой RAD средой ASP.NET WebMatrix. Ознакомиться с ней и загрузить ее можно по адресу http://asp.net/webmatrix. (Перед ее установкой необходимо иметь установленный .NET SDK 1.1)

 

  1. Запустив WebMatrix, выберем создание XML Web Service  в окне установки. Предлагаемые параметры оставим по умолчанию, лишь зададим имя файла NavisionItems, имя класса NavisionItems, имя Namespace как NavDemo. Модифицируем код веб-сервиса как показано ниже (заменив строки текста на актуальные значения):

 

<%@ WebService language="VB" class="NavisionItems" %>

 

Imports System

Imports System.Web.Services

Imports System.Xml.Serialization

 

Public Class NavisionItems

 

<WebMethod> Function GetNavisionItems() As System.Data.DataSet

Dim connectionString As String = "server='(local)'; trusted_connection=true; database='Alba'"

Dim dbConnection As System.Data.IDbConnection = New System.Data.SqlClient.SqlConnection(connectionString)

 

Dim queryString As String = "EXEC NavisionItems"

Dim dbCommand As System.Data.IDbCommand = New System.Data.SqlClient.SqlCommand

dbCommand.CommandText = queryString

dbCommand.Connection = dbConnection

 

Dim dataAdapter As System.Data.IDbDataAdapter = New System.Data.SqlClient.SqlDataAdapter

dataAdapter.SelectCommand = dbCommand

 

Dim dataSet As System.Data.DataSet = New System.Data.DataSet

dataAdapter.Fill(dataSet)

 

Return dataSet

End Function

End Class

 

  1. Теперь приступим к написанию ASP.NET приложения для отображения результатов выборки веб-сервиса. Создадим пустую ASP.NET страницу с помощью помощника WebMatrix. Назовем новую страницу TestNavisionItems.aspx . На странице расположим элементы управления DataGrid и Button. После этого перейдем в режим Code и из пункта меню Tools запустим WebService Proxy Generator. В появивишемся диалоговом окне укажем в строке WSDL URL http://localhost/NavisionItems.asmx (если вы запускаете веб-сервис на другом хосте или веб-сервер работает на другом порту – измените необходимые значения). Примечание – в это время, если вы используете веб-сервис на локальной машине с помощью идущего вместе с WebMatrix веб-сервера Cassini, то он должен быть уже запущен к этому моменту. Задаем имя Namespace как NavDemo и выполняем генерацию кода. Далее, задаем обработчик событий для нашего элемента управления Button:

 

         Sub Button1_Click(sender As Object, e As EventArgs)
                 ' Insert page code here
                 '
                 Dim wsProxy As New NavDemo.NavisionItems()
 
                 DataGrid1.DataSource = wsProxy.GetNavisionItems()
                 DataGrid1.DataBind()
         End Sub

 

  1. Далее, запускаем нашу страницу, нажимаем кнопку, расположенную на форме и получаем список Navision Items!

 

Желаем вам удачи в процессе настройки Navision и формирования отчетности! Если вам нужна помощь наших специалистов -  мы всегда готовы вам помочь.  Позвоните нам в Москве (095) 918-3314, (095) 918-3111 , в США: 1-866-528-0577 или пишите: help@albaspectrum.com

 

Игорь Кудряшов – ведущий разработчик в Ronix Systems

( http://www.ronix.ru ), европейском подразделении Alba Spectrum Technologies ( http://www.albaspectrum.com ), компании – партнере Microsoft Business Solutions, обслуживающей клиентов по  Российской Федерации, включая города Москва, Санкт-Петербург, Екатеринбург, Казань, Новосибирск и др.