Игорь Кудряшов
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. Приступим:
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
<%@ 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
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
Желаем вам удачи в процессе настройки 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, обслуживающей клиентов по Российской Федерации, включая города Москва, Санкт-Петербург, Екатеринбург, Казань, Новосибирск и др.