65.9K
CodeProject 正在变化。 阅读更多。
Home

通过 SAP.NET Connector 2.0 从 Visual Studio 2008 连接到 SAP

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.44/5 (14投票s)

2009年4月24日

CPOL

3分钟阅读

viewsIcon

186694

本文介绍了如何通过 SAP.NET Connector 2.0 从 Visual Studio 2008 连接到 SAP

引言

SAP 是大型企业公司不可或缺的系统。 如果我们需要一些属于 SAP 的数据,我们必须连接到这个系统。 平台可以是 Visual Studio 2008、Visual Studio 2005、Eclipse 或任何其他开发工具。

但是,使用 Visual Studio 2008 连接到 SAP 时存在问题。 问题是 SAP 没有适用于 Visual Studio 2005 和 Visual Studio 2008 的连接器。 在 Visual Studio .NET 2003 平台之前,连接到 SAP 没有任何问题。

正如我在其他文章中提到的,Visual Studio 2005 和 Visual Studio 2008 没有连接器的原因主要是营销策略。 让我们不要考虑为什么 SAP 没有提供 Visual Studio 2008 的附加组件,而是考虑如何使用现有技术解决这个问题。

先决条件技术

  • Visual Studio .NET 2003
  • Visual Studio 2008
  • SAP.NET Connector 2.0
  • 任何 SAP 应用服务器

在阅读本文之前,我建议阅读这篇文章

Using the Code

正如我上面提到的,我们将首先使用 Visual Studio .NET 2003。 我们的目的是使用 Visual Studio 2003 连接到 SAP。 在操作时,我们将创建一个类库项目。 然后,我们将把对这个应用程序的引用提供给 Visual Studio 2008。 因此,使用 Visual Studio 2008 连接到 SAP 的问题将得到解决。 同时,SAP 推荐此解决方案。

让我们首先开始创建一个类库项目。

sap_conn_vis2008_1.jpg

创建类库项目后,我们将需要创建一个 SAP Connector Proxy 项目,如下所示。

sap_conn_vis2008_2.jpg

因为我们将建立与 SAP 的连接,所以我们必须查看 Server Explorer 部分下的 SAP 服务器。 我们将使用 SAP 用户信息的 BAPI 之一。 这是 BOR 对象的一般视图:

sap_conn_vis2008_3.jpg

我们将使用 USER 对象的“GetDetail”方法。 将此方法拖放到 *SAPProxy1.sapwsdl* 文件上。 稍后,我们的项目中不需要其他类。 我正在删除 *Class1.cs* 文件。

sap_conn_vis2008_5.jpg

我们现在已经完成了 Visual Studio .NET 2003 端的运算。您现在应该构建您的项目。输出“*SAPUserDetailComponent.dll*”是在 Visual Studio 2008 中连接到 SAP 时所需的文件。

现在,我们将在 Visual Studio 2008 下创建一个 Windows 项目。

sap_conn_vis2008_6.jpg

在添加上一个项目的 DLL 文件之前,我们应该向我们的项目添加两个 DLL。 首先,将“*SAPUserDetailComponent.dll*”复制到您的项目文件夹。 然后,转到“..\Program Files\SAP\SAP .NET Connector 2.0”,并将“*SAP.Connector.dll*”和“*SAP.Connector.Rfc.dll*”复制到您的项目文件夹。

sap_conn_vis2008_7.jpg

sap_conn_vis2008_9.jpg

我们应该注意另一点。 SAP Proxy 基于 SOAP 协议。 因此,我们需要将“*System.Web.Services*”DLL 添加到我们的引用中。

sap_conn_vis2008_10.jpg

我只在 Form1 中添加了简单的控件。 逻辑很简单,将获取 SAP 用户名,并将此用户的配置文件授权打印到表中以显示。 Form1 将如下图所示。

sap_conn_vis2008_11.jpg

首先,我通知 Visual Studio 构建器关于使用 *SAPUserDetailComponent* 程序集文件

using SAPUserDetailComponent;

然后,我为 GetProfiles 按钮的 Click 事件编写代码。

SAPProxy1 proxy = new SAPProxy1();

SAPProxy1 类在我们的 SAPUserDetail 组件引用中被引用。

BAPIADDR3 address = new BAPIADDR3();
BAPIUSCOMP companyName = new BAPIUSCOMP();
BAPIDEFAUL defaults = new BAPIDEFAUL();
BAPILOGOND logonData = new BAPILOGOND();
BAPISNCU snc = new BAPISNCU();
BAPIAGRTable activeGroups = new BAPIAGRTable();
BAPICOMREMTable addcomrem = new BAPICOMREMTable();
BAPIADFAXTable addfax = new BAPIADFAXTable();
BAPIADPAGTable addpag = new BAPIADPAGTable();
BAPIADPRTTable addprt = new BAPIADPRTTable();
BAPIADRFCTable addrfc = new BAPIADRFCTable();
BAPIADRMLTable addrml = new BAPIADRMLTable();
BAPIADSMTPTable addsmtp = new BAPIADSMTPTable();
BAPIADSSFTable addssf = new BAPIADSSFTable();
BAPIADTELTable addtel = new BAPIADTELTable();
BAPIADTLXTable addtlx = new BAPIADTLXTable();
BAPIADTTXTable addttx = new BAPIADTTXTable();
BAPIADURITable adduri = new BAPIADURITable();
BAPIADX400Table addx400 = new BAPIADX400Table();
BAPIPARAMTable parameter = new BAPIPARAMTable();
BAPIPROFTable profiles = new BAPIPROFTable();
BAPIRET2Table return0 = new BAPIRET2Table();

上面的变量将在调用 SAP 函数时使用。

SAP.Connector.Destination destination = new SAP.Connector.Destination();

我们需要创建一个 destination 对象来连接 SAP。 稍后,我们将如下所示设置此 destination 对象的属性。

destination.AppServerHost = YOUR HOST NAME OR IP
destination.Client = YOUR CLIENT NUMBER
destination.Password = USER'S PASSWORD
destination.SystemNumber = SYSTEM NUMBER
destination.Username = USER'S NAME

我们的 destination 对象将是 SAPConnection 类的一个参数。

SAP.Connector.SAPConnection connection = 
   new SAP.Connector.SAPConnection(destination);

并且,我们的 connection 对象将被分配给代理对象。

proxy.Connection = connection;

现在,我们打开连接。

proxy.Connection.Open();

调用 SAP 函数

proxy.Bapi_User_Get_Detail(tbUsername.Text.Trim(), out address, out companyName, 
   out defaults, out logonData, out snc, ref activeGroups, 
   ref addcomrem, ref addfax, ref addpag, ref addprt, ref addrfc, 
   ref addrml, ref addsmtp, ref addssf, ref addtel, ref addtlx, 
   ref addttx, ref adduri, ref addx400, 
   ref parameter, ref profiles, ref return0);

然后,关闭连接。

proxy.Connection.Close();

并且,我将把这个函数的结果表转换为 ADO 表,如下所示

DataTable dt = profiles.ToADODataTable();

最后一个操作是我们把数据表作为网格视图的来源。

dgProfiles.DataSource = dt; 

结果屏幕将是

sap_conn_vis2008_12.jpg

您也可以访问我的技术博客网站查看我的其他文章。

© . All rights reserved.