Борис Макушкин
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 Business Solutions. Navision имеет множество возможностей для кастомизации. Сегодня мы опишем простой случай использования C/ODBC драйвера. Этот драйвер и технология позволяют работать с Native или C/SIDE Navision базой данных. Navision также доступна на Microsoft SQL Server – в этом случае вы используете традиционные 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 специалист и ведущий девелопер в Alba Spectrum Technologies – компании – партнере Microsoft Business Solutions в городах Москва, Петербург, Екатеринбург, Казань, Ростов и обслуживающей всю Российскую Федерацию, Европу, США и Бразилию (www.albaspectrum.com)
