SAP接口编程-RFC系列01 : RFC Hello World

SAP系统与外部环境接口,SAP统称ABAP Connectivity。时至今日,连接方法已经非常复杂了。根据SAP官方WIKI: http://wiki.scn.sap.com/wiki/display/ABAPConn/ABAP+Connectivity+Home 有如下方法,非常庞杂:

Remote Function Call (RFC)
Unified Connectivity (UCON) Internet
Communication Framework (ICF)
Internet Communication Manager (ICM)
REST Library
Web Services ABAP
SAP HANA Cloud Connector
SAP Java Connector (SAP JCo)
SAP Java Resource Adapter (SAP JRA)
SAP Business Connector (SAP BC)
SAP .Net Connector (SAP NCo)
SAP ABAP Connector (SAP ACo)
SAP Internet Transaction Server (SAP ITS)

本系列将对RFC/JCo/NCo进行讲解。并给出实际应用的综合案例。

首先给出RFC系列,在RFC系列中,我将通过VBA和C#语言来说明。VBA并不是一门优雅和有战斗力的语言,但在Office中,Excel是数据展示非常好的平台,而VBA是Office默认的宏语言,这么多年,微软也没有升级,所以在Office中连接SAP,就将就用VBA吧。好在SAP ABAP编程接口,主要是给熟悉SAP的用户和顾问使用的,只要编程语言支持COM,支持ActiveX,都可以。所以熟悉其他语言的用户,很容易翻译过去。

我的习惯,第一支程序,首先做一件最简单的事情,熟悉环境,然后再慢慢展开。所以,今天第一支程序,连接到SAP系统,目的就达到了。

环境准备

打开VBE

(我使用的是2013版,假设您已经使用2007或以上版本)在EXCEL中,通过ALT+F11,或者通过Ribbon面板【开发工具】- 【Visual Basic】就可以进入Visual Basic Environment环境,简称VBE。

添加SAPLogon控件引用

通过RFC实现SAP接口,有两种方法,一种是通过ActiveX控件,适用于所有支持ActiveX技术的语言,另外一种是RFC SDK,适用于C或者C++。
ActiveX控件,只要在Windows上安装了SAP GUI,就会有这些ActiveX控件。连接到SAP,需要用到SALLogon控件,这个控件对应的文件是wdtlog.ocx,Windows7 64位默认安装后文件的路径是C:\Program Files (x86)\Common Files\SAP Shared。

添加的方法:在VBE中,通过菜单【工具】-【引用】,调出下面的Form,然后点击浏览按钮。

找到上面所说的wdtlog.ocx文件

点击打开按钮,引用Form变成如下样子,就表示成功了。

编写代码

接下来,新建一个module,编写连接到SAP的代码:

Option Explicit
Dim sapLogon As SAPLogonCtrl.SAPLogonControl
Dim sapConnection As SAPLogonCtrl.Connection
'-----------------------
 ' 登陆至SAP
 '-----------------------
Public Sub Logon()
     Set sapLogon = New SAPLogonCtrl.SAPLogonControl
     Set sapConnection = sapLogon.NewConnection()
' Logon parameters: hwnd, silent
sapConnection.Logon 0, False

Debug.Print sapConnection.IsConnected

Call Logoff
End Sub

Public Sub Logoff()
If sapConnection.IsConnected = tloRfcConnected Then
sapConnection.Logoff
End If
End Sub

运行

运行时,系统弹出登陆对话框

然后如果在立即窗口中打印出1,就表示成功连接到SAP系统了。刚才的程序是连接之后立即调用Logoff注销,如果我们注释掉这一句,通过RFC连接到SAP后,可以在SAP系统通过SM04查看连接状态

代码说明:

通过SAPLogonControl对象的NewConnection方法获得Connection对象。
Connection对象的Logon方法建立和SAP系统的连接。连接之后,通过IsConnected属性,获得连接的状态。
Connection对象的Logoff方法注销登陆

注意事项

在Office 2003之前,可以将控件拖放到form上,但Office 2003之后,由于安全方面的原因,微软已经不允许这样做了,提示如下错误:对于指定的操作,该使用者不收信任。

那么,2003之后的版本怎么办呢?还好,有两种办法:
一是在VBE界面中,通过菜单【工具】->【引用】添加对SAPLogonControl的引用,然后在代码中使用。、二是使用晚绑定(后续说明)

SAPLogonControl的版本:

ActiveX控件都有两个版本,非unicode版和unicode版。如果SAP不是Unicode版本(并不代表不支持unicode),使用unicode版本的ActiveX控件会出现错误。运行过程中提示:Data type not supported,非常诡异。unicode版在Windows7 64位下面默认安装的位置是C:\Program Files (x86)\SAP\FrontEnd\SAPgui,文件名为wdtlogU.ocx。

作者:stone0823
来源:CSDN
原文:https://blog.csdn.net/stone0823/article/details/48708975

发表回复