29.03.2005, 12:56 | #1 |
Участник
|
Navision Database: доступ через C/ODBC WebService/ASP.NET приложение
Игорь Кудряшов 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. 2. Создадим 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 3. Откроем 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. 4. Далее нам необходимо создать небольшую хранимую процедуру для выборки по продажам. Текст процедуры приведен ниже: 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 5. Теперь приступим к собственно созданию ASP.NET приложения. Для разработки воспользуемся свободно распространяемой RAD средой ASP.NET WebMatrix. Ознакомиться с ней и загрузить ее можно по адресу http://asp.net/webmatrix. (Перед ее установкой необходимо иметь установленный .NET SDK 1.1) 6. Запустив 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 7. Теперь приступим к написанию ASP.NET приложения для отображения результатов выборки Web-service. Создадим пустую ASP.NET страницу с помощью помощника WebMatrix. Назовем новую страницу TestNavisionItems.aspx . На странице расположим элементы управления DataGrid и Button. После этого перейдем в режим Code и из пункта меню Tools запустим WebService Proxy Generator. В появивишемся диалоговом окне укажем в строке WSDL URL http://localhost/NavisionItems.asmx (если вы запускаете Web-service на другом хосте или веб-сервер работает на другом порту – измените необходимые значения). Примечание – в это время, если вы используете Web-service на локальной машине с помощью идущего вместе с 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 8. Далее, запускаем нашу страницу, нажимаем кнопку, расположенную на форме и получаем список 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, обслуживающей клиентов по Российской Федерации, включая города Москва, Санкт-Петербург, Екатеринбург, Казань, Новосибирск и др. |
|
29.03.2005, 13:24 | #2 |
Moderator
|
Зачем все так сложно?
Через ASP.Net получить доступ к данным Navision, которые лежат на SQL очень легко - сразу и напрямую через ADO.Net. Зачем городить огород с веб-сервисами? К данным в fdb аналогично через C/ODBC |
|