一,创建Function Module
1,在SM11,创建需要的structure
2,在SE80,建Function group
3,在SE37,创建Function Module
Note:一个Function Group只能包含一个BAPI;参数传值;必须有有一个BAPIRETURN类型的EXPORT参数
二,封装
1,在SWO1,建Object Type
2,把Function Module作为一个Method加入,utilities->API Methods->Add Method
3,release Object和Module。使在BAPI Browser 中可以看到。也就是外部能够调用。
三,调用
1,如在另一系统中用ABAP调用,先在SM59中建RFC联到有BAPI的R/3,(ZGOGO)
在SE38的程序中调用,Call Function "ZBAPIXXXXX" DESTINATION ZGOGO EXPORTING ...
2,如用JAVA调用
引入包;(不一定要用IBM的)
import com.sap.rfc.*;
import com.sap.rfc.exception.*;
import com.ibm.sap.bapi.*;
import com.ibm.sap.bapi.generated.*;
建立连接;调用。。。(See CALL_BAPI.java)
VBA for SAP
Private Sub CommandButton1_Click()Set oFunction = CreateObject("SAP.LogonControl.1")Set oConnection = oFunction.NewConnectionoConnection.Client = "500"oConnection.Language = "EN"oConnection.User = "user"oConnection.Password = "pasword"oConnection.ApplicationServer = "sap1.yok.com.cn"oConnection.SystemNumber = "01"result = oConnection.Logon(0, True)Set ofun = CreateObject("SAP.FUNCTIONS")Set ofun.Connection = oConnectionSet func = ofun.Add("RFC_READ_TABLE")func.Exports("QUERY_TABLE") = "MARA"If func.Call = True ThenSet oline = func.tables.Item("DATA")Row = oline.rowcounti = 1Do While i <= Row Cells(i, 1) = Mid(Trim(oline.Value(i, 1)), 4, 22) i = i + 1 Loop Else MsgBox "FAIL"End IfEnd Sub
VBA2 Private Sub CommandButton1_Click() Dim sapFunctionCtrl As Object 'Function Control (Collective object) Dim sapConnection As Object 'Connection object Dim theFunc As Object 'Function object Set sapFunctionCtrl = CreateObject("SAP.Functions") Set sapConnection = sapFunctionCtrl.Connection sapConnection.Client = "800" sapConnection.user = "user" sapConnection.Language = "EN" If sapConnection.logon(0, False) <> True Then MsgBox "No connection to R/3!" End If Set theFunc = sapFunctionCtrl.Add("ZRFCPING") If theFunc.call Then ' call the RFC FM MsgBox "RFC call is okay" End If sapFunctionCtrl.Connection.logoff Set sapConnection = Nothing Set sapFunctionCtrl = Nothing End Sub