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。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值