SAP接口编程-RFC系列09 : 使用BAPI

2024-02-05 13:58

本文主要是介绍SAP接口编程-RFC系列09 : 使用BAPI,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用BAPI

SAP 的 BAPI 和 Function Module 经常让大家迷惑和混淆。究竟 BAPI 和 Functional Module 有什么区别呢?我的理解,BAPI 是基于 Function Module 的,但提供面向对象的接口调用方式。比如说,我们想获得总账科目的期间余额,我们可以通过 RFC 远程调用BAPI_GL_GETGLACCPERIODBALANCES函数来实现,也可以使用类似GeneralLedger.GetGLAccountPeriodBalances这种面向对象的方式来实现。后者就是 BAPI 调用,底层上 BAPI 也是调用的BAPI_GL_GETGLACCPERIODBALANCES 函数。

在 SAP 系统中查看 BAPI

在 SAP 中,我们可以使用事务码:SWO2查看 BAPI,并且进行测试。比如我们想获得会计科目的期间余额,我们先找到相关对象:
这里写图片描述

双击 General Ledger 前面的小圆圈:

这里写图片描述

在这个界面中,我们可以查看方法的参数,并进行测试。我们先点击 Parameters 按钮查查参数:
这里写图片描述

BAPI 方法的参数,和 FM 的参数名并不一定相同。比如 AccountBalances 参数,在 FM 中对应的参数名称是 ACCOUNT_BALA NCES,以 BAPI 方式调用,需要用 BAPI 的参数名称,切记。
BAPI 测试,点击工具栏上的 Test/Execute 按钮:
这里写图片描述

填充 input parameters

运行,得到如下结果:

通过 BAPI 控件调用 SAP BAPI

OK,下面编写接口实现的代码。在外部使用 BAPI,关键是 BAPI ActiveX 控件的使用,对应的文件是 wdobapi.ocx,Win7 默认路径:C:\Program Files (x86)\SAP\FrontEnd\SAPgui\wdobapi.ocx。添加对 ocx 控件的引用。

Option ExplicitPublic Sub TestGetACBalacne()Call LogonCall DoGetAccBalance("Z900", "0010010100", "2015")Call logoff
End SubPrivate Sub DoGetAccBalance(cocd As String, glAccount As String, year As String)' Function: Get account period balances, just like FAGLB03Dim bapiControl As New SAPBAPIControlLib.SAPBAPIControlDim glObj As Object 'general ledger objectDim ret As SAPFunctionsOCX.StructureDim acBalance As SAPTableFactoryCtrl.TableSet bapiControl.Connection = sapConnection ' global variable' creating business object' return value of GetSAPObject() is of type Object' first parameter indicates ObjectType, other ten parameters is objectKeySet glObj = bapiControl.GetSAPObject("GeneralLedger")' Invoke methodglObj.GetGLAccountPeriodBalances _CompanyCode:=cocd, _Glacct:=glAccount, _fiscalYear:=year, _CurrencyType:="10", _AccountBalances:=acBalance, _Return:=ret' Error occuredIf ret("TYPE") = "E" ThenCall DebugWriteBapiError(ret)Exit SubEnd IfIf acBalance.rowcount > 0 Then' Write acBalance internal table in worksheetDim sht As WorksheetSet sht = ThisWorkbook.Worksheets.Addsht.Name = sht.Name + "_GLBalances"Call WriteTable(acBalance, sht)End IfSet acBalance = NothingSet glObj = NothingSet bapiControl = Nothing
End SubPrivate Sub DebugWriteBapiError(error As SAPFunctionsOCX.Structure)Debug.Print "Type:", error.Value("TYPE")Debug.Print "Code:", error.Value("CODE")Debug.Print "Message:", error.Value("MESSAGE")
End Sub

程序结果:

这篇关于SAP接口编程-RFC系列09 : 使用BAPI的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/681133

相关文章

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(