热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用VisualBasic开发SAP接口程序初探的方法与原理

本文介绍了利用VisualBasic开发SAP接口程序的方法与原理,以及SAPR/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAPR/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAPR/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。
SAP R/3系统是业界最先进、最稳定的ERP系统,国际和国内大型企业采用该系统的比例遥遥领先于其它ERP系统的总和。SAP R/3内建了二次开发平台,使用的开发语言叫做ABAP,是一种类似于COBOL的编程语言。ABAP在报表输出方面功能相对较弱(只能按行打印在屏幕上或者导出到Excel中处理),所以日常工作中经常需要在外部开发程序。通过程序接口自动读取SAP R/3的数据表(视图),在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。



  SAP R/3的接口方式主要有RFC、IDOC、BAPI三种,本文要介绍的是相对比较简单的RFC(Romote Function Call,远程函数调用)。SAP系统RFC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标准或自定义函数,获得函数返回的数据进行处理后显示或打印。下面是RFC调用的模型:





  本文主要不是讨论SAP R/3函数的开发,因为使用SAP的公司一般都有专门的ABAP开发人员。大家如果有机会接触ABAP平台,可以通过事务代码SE37进入ABAP开发平台的"函数编制器"进行函数开发测试。如图:

  下面主要以VB为例介绍一下SAP接口RFC的开发思路。在SAP客户端SAP Gui Client安装的时候,注意选择安装附带的SDK包(最保险是选择完全安装)。RFC接口程序开发,主要用的是"SAP.Functions"这个控件,通过控件在外部程序模拟SAP Gui Client的用户登录和函数调用,然后返回函数的值。请看下面的程序片段和重点注解(尤其是test_Click()):


Private Sub Command1_Click()
 ' 定义R/3用户名和密码变量(用户名应由SAP管理员开运行函数的权限)
 Dim logname As String * 22, password As String * 22
 Call logonr3(logname, password) ' 调用SAP登录界面程序
 If logflag Then ' 调用生产、开发系统开关
  StatusBar1.Visible = True
  StatusBar1.SimpleText = "正在登录SAP R/3系统..."
  Dim R3AppServer As String, R3Client As String, R3SystemNo As String
  If Form2.opPRD.Value Then
   ' 以下服务器参数请根据客户配置情况更改
   R3AppServer = "10.3.1.4" ' 生产系统服务器IP
   R3Client = "800"     '生产系统集团代码
   R3SystemNo = "00" '生产系统号
  Else
   R3AppServer = "10.3.3.1" ' 开发系统服务器IP
   R3Client = "101"
   R3SystemNo = "00"
  End If
  Unload Form2 ' 释放 Form2 , 所有控件及值不可用
  Set Functions = CreateObject("Sap.Functions") ' 创建RFC的本地对象
  Set Connect = Functions.Connection ' 设置连接
  Connect.ApplicationServer = R3AppServer ' 赋值服务器IP
  Connect.Client = R3Client ' 赋值SAP集团代码
  Connect.Language = "ZH" ' 置SAP系统界面中文
  Connect.User = Trim(logname) ' 赋值SAP登录用户名
  Connect.password = Trim(password) ' 赋值SAP登录用户密码
  Connect.SystemNumber = R3SystemNo ' 赋值SAP系统号
  If Not Connect.Logon(0, True) Then ' 软件登录SAP并判断
   MsgBox "登录SAP R/3失败,请重新登录!", vbOKOnly + vbExclamation, "系统提示"
   Command1.SetFocus
  Else ' 登录SAP成功
   Command1.Enabled = False
   Command2.Enabled = True
   test.Enabled = True
  End If

  StatusBar1.SimpleText = ""
  StatusBar1.Visible = False
 End If
End Sub

Private Sub Command2_Click() ' 注销SAP登录
 Connect.LogOff
 Command2.Enabled = False
 Command1.Enabled = True
 test.Enabled = False
End Sub

Private Sub Command3_Click() ' 退出SAP接口演示程序
 If Form1.Command2.Enabled Then
  MsgBox "退出前请断开SAP R/3系统!", vbOKOnly + vbInformation, "系统提示"
 Else
  End
 End If
End Sub

Private Sub Form_Load()
 Command2.Enabled = False
 test.Enabled = False
 logoflag = False
End Sub

Private Sub test_Click() ' SAP RFC远程调用处理主演示
 Dim GetCustomers As Object
 Dim Customers As Object
 Dim i As Integer
  ' 通过RFC接口远程运行SAP内部函数RFC_CUSTOMER_GET
 ' 赋要调用的SAP内建函数名
 Set GetCustomers = Functions.Add("RFC_CUSTOMER_GET")

 GetCustomers.Exports("KUNNR") = "0000000103" ' 向函数入口赋值(客户代码)
 ' 向函数入口赋查询表名称
 Set Customers = GetCustomers.Tables("CUSTOMER_T")

 If GetCustomers.Call Then ' 调用成功遍历显示客户所有信息条目
  For i = 1 To Customers.rowcount
   MsgBox Customers(i, "KUNNR")
  Next i
 Else
  MsgBox " 搜索出错! 出错信息: " + GetCustomers.Exception
 End If
End Sub
  SAP的RFC调用是其接口技术中最简单和易用的一种方式,该方式开发比较简便,特别适合于外部报表开发,但对于大数据量的查询效率相对较低。大家在熟练掌握后,可以进一步学习高级的IDOC和BAPI接口开发技术。


推荐阅读
  • 如何在窗口右下角添加调整大小的手柄
    本文探讨了如何在传统MFC/Win32 API编程中实现类似C# WinForms中的SizeGrip功能,即在窗口的右下角显示一个用于调整窗口大小的手柄。我们将介绍具体的实现方法和相关API。 ... [详细]
  • Ralph的Kubernetes进阶之旅:集群架构与对象解析
    本文深入探讨了Kubernetes集群的架构和核心对象,详细介绍了Pod、Service、Volume等基本组件,以及更高层次的抽象如Deployment、StatefulSet等,帮助读者全面理解Kubernetes的工作原理。 ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 主板IO用W83627THG,用VC如何取得CPU温度,系统温度,CPU风扇转速,VBat的电压. ... [详细]
  • 探讨如何修复Visual Studio Code中JavaScript的智能感知和自动完成功能在特定场景下无法正常工作的问题,包括配置检查、语言模式选择以及类型注释的使用。 ... [详细]
  • 本文详细介绍了在 Windows 7 系统中配置 Nginx 1.10.3 和 PHP 7.1.1 NTS 的步骤,包括修改 PHP 配置文件、处理依赖项以及创建批处理脚本启动和停止服务。重点解释了如何解决常见的运行时错误。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • ServiceStack与Swagger的无缝集成指南
    本文详细介绍了如何在ServiceStack项目中集成Swagger,以实现API文档的自动生成和在线测试。通过本指南,您将了解从配置到部署的完整流程,并掌握如何优化API接口的开发和维护。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 本文介绍了如何使用PHP代码实现微信平台的媒体素材上传功能,详细解释了API接口的使用方法和注意事项,确保文件路径正确以避免常见的错误。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 本文将详细介绍多个流行的 Android 视频处理开源框架,包括 ijkplayer、FFmpeg、Vitamio、ExoPlayer 等。每个框架都有其独特的优势和应用场景,帮助开发者更高效地进行视频处理和播放。 ... [详细]
author-avatar
小于2502919693
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有