AXForum  
Вернуться   AXForum > Рынок > Полезное по Microsoft Dynamics
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.03.2005, 12:56   #1  
Ronix is offline
Ronix
Участник
 
8 / 10 (1) +
Регистрация: 29.03.2005
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  
Kirvisniemi is offline
Kirvisniemi
Moderator
 
342 / 13 (1) ++
Регистрация: 21.12.2004
Зачем все так сложно?

Через ASP.Net получить доступ к данным Navision, которые лежат на SQL очень легко - сразу и напрямую через ADO.Net. Зачем городить огород с веб-сервисами? К данным в fdb аналогично через C/ODBC
 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:11.