热门标签 | 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接口开发技术。


推荐阅读
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 手把手教你使用GraphPad Prism和Excel绘制回归分析结果的森林图
    本文介绍了使用GraphPad Prism和Excel绘制回归分析结果的森林图的方法。通过展示森林图,可以更加直观地将回归分析结果可视化。GraphPad Prism是一款专门为医学专业人士设计的绘图软件,同时也兼顾统计分析的功能,操作便捷,可以帮助科研人员轻松绘制出高质量的专业图形。文章以一篇发表在JACC杂志上的研究为例,利用其中的多因素回归分析结果来绘制森林图。通过本文的指导,读者可以学会如何使用GraphPad Prism和Excel绘制回归分析结果的森林图。 ... [详细]
  • 微软评估和规划(MAP)的工具包介绍及应用实验手册
    本文介绍了微软评估和规划(MAP)的工具包,该工具包是一个无代理工具,旨在简化和精简通过网络范围内的自动发现和评估IT基础设施在多个方案规划进程。工具包支持库存和使用用于SQL Server和Windows Server迁移评估,以及评估服务器的信息最广泛使用微软的技术。此外,工具包还提供了服务器虚拟化方案,以帮助识别未被充分利用的资源和硬件需要成功巩固服务器使用微软的Hyper - V技术规格。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
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社区 版权所有