如果我们找BAPI可以通过SAP标准事物代码:BAPI查询到已经释放的BAPI
如果只知道事物代码,可以通过下面的方式查询相应的BAPI
例如我们找创建销售订单的BAPI 我们知道事物代码是VA01
1、 我们进入VA01 界面,找到system --> status
2、 在事物代码位置上双击,找到PACKAGE VA
3、 用SE80打开包 VA
4、 打开业务工程---》业务对象类型。根据我们的业务需求。我们要找销售订单的创建,所有BUS2032 销售订单 的可能性最大。
5、 双击 BUS2032 打开方法 ,寻找和创建销售订单名字相同的方法 这里我们要找的就是SalesOrderCreateFromDat2。将光标定位在 这个一行 点击 上面的程序 按钮。 即可看见程序源代码找到 'BAPI_SALESORDER_CREATEFROMDAT2。同样的我们可以看到修改订单的BAPI删除的BAPI,我们也可以使用同样的方法找找。
6、 同样我们可以双击SalesOrderCreateFromDat2 行 ,在d出的窗口中找到 ABAP 子屏幕。如果单选按钮是 API功能 ,名称一栏即为我们要找BAPI,如果是函数模块即为一个FM
如下图:
7、 通过包我们也可以找到该包下所有的程序和函数组。
你说的这个问题有点难。根据你的描述,可以推知你的BADI的接口没有相应的你要取得地这些屏幕内容。
屏幕上的这些内容是用户在运行VL02N的时候手动输入的么?还是这些内容是系统根据某些条件自动显示出来的。如果是后者,那么你可以找到这些条件,根据相同的条件在你的BADI里通过Select或者FM取得这些数据。
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接口程序开发,主要用的是"SAPFunctions"这个控件,通过控件在外部程序模拟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 ' 调用生产、开发系统开关
StatusBar1Visible = True
StatusBar1SimpleText = "正在登录SAP R/3系统"
Dim R3AppServer As String, R3Client As String, R3SystemNo As String
If Form2opPRDValue Then
' 以下服务器参数请根据客户配置情况更改
R3AppServer = "10314" ' 生产系统服务器IP
R3Client = "800" '生产系统集团代码
R3SystemNo = "00" '生产系统号
Else
R3AppServer = "10331" ' 开发系统服务器IP
R3Client = "101"
R3SystemNo = "00"
End If
Unload Form2 ' 释放 Form2 , 所有控件及值不可用
Set Functions = CreateObject("SapFunctions") ' 创建RFC的本地对象
Set Connect = FunctionsConnection ' 设置连接
ConnectApplicationServer = R3AppServer ' 赋值服务器IP
ConnectClient = R3Client ' 赋值SAP集团代码
ConnectLanguage = "ZH" ' 置SAP系统界面中文
ConnectUser = Trim(logname) ' 赋值SAP登录用户名
Connectpassword = Trim(password) ' 赋值SAP登录用户密码
ConnectSystemNumber = R3SystemNo ' 赋值SAP系统号
If Not ConnectLogon(0, True) Then ' 软件登录SAP并判断
MsgBox "登录SAP R/3失败,请重新登录!", vbOKOnly + vbExclamation, "系统提示"
Command1SetFocus
Else ' 登录SAP成功
Command1Enabled = False
Command2Enabled = True
testEnabled = True
End If
StatusBar1SimpleText = ""
StatusBar1Visible = False
End If
End Sub
Private Sub Command2_Click() ' 注销SAP登录
ConnectLogOff
Command2Enabled = False
Command1Enabled = True
testEnabled = False
End Sub
Private Sub Command3_Click() ' 退出SAP接口演示程序
If Form1Command2Enabled Then
MsgBox "退出前请断开SAP R/3系统!", vbOKOnly + vbInformation, "系统提示"
Else
End
End If
End Sub
Private Sub Form_Load()
Command2Enabled = False
testEnabled = 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 = FunctionsAdd("RFC_CUSTOMER_GET")
GetCustomersExports("KUNNR") = "0000000103" ' 向函数入口赋值(客户代码)
' 向函数入口赋查询表名称
Set Customers = GetCustomersTables("CUSTOMER_T")
If GetCustomersCall Then ' 调用成功遍历显示客户所有信息条目
For i = 1 To Customersrowcount
MsgBox Customers(i, "KUNNR")
Next i
Else
MsgBox " 搜索出错! 出错信息: " + GetCustomersException
End If
End Sub
SAP的RFC调用是其接口技术中最简单和易用的一种方式,该方式开发比较简便,特别适合于外部报表开发,但对于大数据量的查询效率相对较低。大家在熟练掌握后,可以进一步学习高级的IDOC和BAPI接口开发技术。
几点建议,仅供参考:
1、如下这段,不知你的具体用途,但从其摆放位置来看,应该有问题:因为当L_GIT-VALSTK_CATG 不在 GT_VALSTK_CATG_RNG范围内时,前面做的一大堆工作都是浪费,那么是否可考虑前移此判断?
IF L_GIT-VALSTK_CATG IN GT_VALSTK_CATG_RNG
COLLECT L_GIT INTO DT_GIT
ELSE
CLEAR L_GIT
ENDIF
2、程序逻辑应该有问题,你是想先找到采购订单号出现位置index,然后从此行开始循环ekbe,但是你用了BINARY SEARCH ,理论上讲其可以加快搜索速度,但应该存在bug,比如有5条数据其订单号分别为A B B B C,那么你用BINARY SEARCH找号码为B的项的位置,index 应该为3而不是你期望的2(仅从BINARY SEARCH逻辑上分析的,此点有待验证)
3、也是个人认为比较重要的一点:
因为EKKO的数据在EKBE中可能无对应数据,那么会存在EKKO空循环一次,同时还会在EKBE中查找18次(LOG(300000,2)=18),且查找18次后还无结果;另一方面,一条数据也可能会对应EKBE中多条数据,即是说你即使找准了位置index,还是要将数据量为30万条的EKBE拿来循环,且会多次循环,势必影响速度。
建议:第一层循环EKBE,并记录下EKBE前一行的EBELN,如果当前行EBELN等于前一行EBELN,则无需重新读EKKO,如果不等则从EKKO中读取一次,且EKBE中任一EBELN在EKKO中是有且只有唯一记录,因此不需要再循环EKKO。这样的结果是只需要将EKBE循环一次,EKKO也只需要读取<1万次
主机厂让填写资料sap编码意思是主机厂需要开放源代码。sap编码是一个开放源代码,SAP有一个专门的平台供开发人员开发报表或增强,它使用SE38进入,并且使用Z开头的程序名称来命名。
SE38进入LSKEYF00,DISPLAY,找到form JUMP_THE_WALL,在CALL 'GET_DEVELOPER_KEY' ID 'NAME' FIELD 'ABCDEFGHIJKL' ID'CUSTID' FIELD '1234567890' ID'KEY' FIELD DUMMY_KEY 这里设置断点,再进入另一个session,运行“se38”,输入LSKEYF00,CHANGE,这时会停在断点上。在FILED NAME输入“SY-SUBRC”,然后回车,后面有个值,把它修改成0, 然后点修改,然后“F6”;代码跳到下一个地方,然后再次修改成0,然后点修改;然后“F6”,然后“F6”。然后出来什么请求框,一路“对勾过去”,然后会跳到LSKEYF00的编辑画面,然后INSERT这个按钮是可以按下的。把光标停在你设断点的那行下面一行,然后点INSERT;在光标处会多出以下的字符:{INSERT REQUEST ID &$&$&$&$}INSERT把中间的“”退格删除.然后输入(如果不能输入就在外面写好下面的话,CTRR+V可以过来的)SY-SUBRC =0保险起见,在下一行:CHECK SY-SUBRC EQ 2后面可以加入上面同样的语句。然后EDIT/CHECR/SYNATX CHECK检查语法是否出错;正确的话,最下面会有信息提示你的输入是正确的。这时你的最上面的LSKEYF00后面应该是ACTIVE(REVISED)。然后保存。这时可能还会进入调试模式,再继续修改SY-SUBRC的值为0;再保存,系统会d出创建request的对话框,自己创建一个request,然后确定,整个过程就ok了。
以上就是关于sap abap 怎么查找事务代码的bapi全部的内容,包括:sap abap 怎么查找事务代码的bapi、sap系统中,如何从系统界面上获取某数值,来用为我编写的程序代码所用,请大家指教。、利用VisualBasic开发SAP接口程序初探等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)