Show TOC

Calling BAPIs from Visual BasicLocate this document in the navigation structure

Use

This example illustrates a BAPI call in Visual Basic using the BAPI ActiveX Control. This report uses the service BAPI BapiService.MessageGetDetail() , to display the short text and the long text of error messages.

'
' Visual BASIC 5.0
' Copyright SAP AG Walldorf Juli 1998
'
' read a message short and longtext using the BAPI                     
' BAPI_MESSAGE_GETDETAIL of the object BapiService  
 
' constant for user identification
Const cstrMUsrClient        As String = "000"
Const cstrMUsrUser          As String = "MYUSER"
Const cstrMUsrPassword      As String = "MYPASS"
Const cstrMUsrLanguage      As String = "EN"
 
' constant for system identification
Const cstrMSysSystem        As String = "P45"
Const cstrMSysMessageServer As String = "p45main.wdf.sap-ag.de"
Const cstrMSysGroupName     As String = "PUBLIC"
'
' constant values for reading message texts
Const cstrMMsgId            As String = "SX"
Const cstrMMsgNumber        As String = "101"
Const cstrMMsgVariable1     As String = "var1"
Const cstrMMsgVariable2     As String = "var2"
Const cstrMMsgVariable3     As String = "var3"
Const cstrMMsgVariable4     As String = "var4"
Const cstrMMsgLanguage      As String = "DE"
 
' other constant
Const cstrMPathfile         As String = "D:\A\saptext.rtf"
 
' password for login in R/3
Dim strMUsrPassword         As String
 
' react on button START
Private Sub cmdMsgStart_Click()
 
'   define object for BAPI ActiveX control
    Dim oBAPICtrl       As Object
'   define object for R/3 logon control
    Dim oLogonCtrl      As Object
'   business object BapiService
    Dim boBapiSercice   As Object
 
'   for BAPI: BapiService.MessageGetDetail
    Dim oMsgReturn      As Object
    Dim oMsgText As Object
    Dim intCounter      As Integer
'   to open the file you need a file channel
    Dim intChannel      As Integer
 
 
'   create BAPI ActiveX control object
    Set oBAPICtrl            = CreateObject("SAP.BAPI.1")
'   create R/3 logon control object
    Set oLogonCtrl           = CreateObject("SAP.Logoncontrol.1")
'   connection object is part of the BAPI ActiveX Control object
    Set oBAPICtrl.Connection = oLogonCtrl.NewConnection
 
'   fill logon parameters for system to use
    oBAPICtrl.Connection.System        = txtSysSystem
    oBAPICtrl.Connection.MessageServer = txtSysMessageServer
    oBAPICtrl.Connection.GroupName     = txtSysGroupName
'   fill logon parameter for user
    oBAPICtrl.Connection.Client        = txtUsrClient
    oBAPICtrl.Connection.User          = txtUsrUser
    oBAPICtrl.Connection.Password      = strMUsrPassword
    oBAPICtrl.Connection.Language      = txtUsrLanguage
 
'   user logon to R/3
    If oBAPICtrl.Connection.Logon(frmStart.hWnd, False) = False Then
        MsgBox "R/3 connection failed"
        End
    End If
 
'   create BAPI service object
    Set boBapiService = oBAPICtrl.GetSAPObject("BapiService")
 
'   call method of BapiService
    boBapiService.MessageGetDetail id:=txtMsgId, _
                                   Number:=txtMsgNumber, _
                                   Language:=txtMsgLanguage, _
                                   Textformat:=cboMsgTextformat.Text, _
                                   message:=strMsgShorttext, _
                                   Return:=oMsgReturn, _
                                   Text:=oMsgText
 
'   fill field in form
'    If txtMsgShorttext = "" Then
'        MsgBox "No message read"
'    End If
 
'   user logoff from R/3
    oBAPICtrl.Connection.Logoff
 
'   error handling check if RETURN parameter is not empty and react
    If oMsgReturn.Value("TYPE") <> "" Then
        lblReturn.Caption = oMsgReturn.Value("TYPE") + _
                            ". " + _
                            oMsgReturn.Value("ID") + _
                            ". " + _
                            oMsgReturn.Value("NUMBER") + _
                            ". " + _
                            oMsgReturn.Value("MESSAGE") + _
                            ". " + _
                            oMsgReturn.Value("MESSAGE_V1") + _
                            ". " + _
                            oMsgReturn.Value("MESSAGE_V2") + _
                            ". " + _
                            oMsgReturn.Value("MESSAGE_V3") + _
                            ". " + _
                            oMsgReturn.Value("MESSAGE_V4") + _
                            ". " + _
                            oMsgReturn.Value("LOG_NO") + _
                            ". " + _
                            oMsgReturn.Value("LOG_MSG_NO")
 
    Else
 
'       fill form fields
        txtMsgShorttext = strMsgShorttext
        arrayText       = oMsgText.Data
 
'       handling of non RTF texts
        If cboMsgTextformat.Text <> "RTF" Then
            For intCounter = 1 To oMsgText.RowCount
                If intCounter = 1 Then
                    rtfMsgLongtext.Text = arrayText(intCounter, 1)
                Else
                    rtfMsgLongtext.Text = rtfMsgLongtext.Text + _
                                         Chr(13) + Chr(10) + _
                                         arrayText(intCounter, 1)
                End If
            Next intCounter
        End If
 
'       handling of RTF texts
        If cboMsgTextformat.Text = "RTF" Then
'           save text as rtf file
            intChannel = FreeFile
            Open cstrMPathfile For Output As #intChannel
                For intCounter = 1 To oMsgText.RowCount
                    Print #intChannel, arrayText(intCounter, 1)
                Next intCounter
            Close #intChannel
            rtfMsgLongtext.LoadFile cstrMPathfile, rtfRTF
        End If
    End If
End Sub