Skip to Content
avatar image
Former Member

RFC_READ_TABLE - can´t get silent login to work...

Hello everybody,


I have a code in an excel file that I use to gather data from tables. For this I´m using RFC_READ_TABLE. The active login via popup works like a charm, however any attempt to get it working via silent login utterly fails. My script is complex and long, chaining multiple tables along and gathering mass amounts of data, that is why I spare you with my code and provide an easy example from the internet.

Basically the problem is here:

If oSAP.Connection.Logon(0, False) = True Then

When set to false, it asks me for credentials. When I provide them, everything is fine.

When I however set it to:

If oSAP.Connection.Logon(0, True) = True Then

I receive an error 1001 exactly here:

 Set oFuBa = oSAP.Add("RFC_READ_TABLE")

I suspect my login is somehow not working, maybe wrong application server - I do not know.

When I login via popup & credentials, my application server is empty and my login is working perfectly.

Does anybody know, why the silent login is not working in this example code? Is the application server mandatory? Why does it work with empty application server as long as the popup is used?

I´d be glady if anybody could lend me a hand here. Thank you very much in advance.

Sub RFCReadTable()
    ' https://www.linkedin.com/pulse/connect-sap-r3-call-custom-fm-from-ms-excel-erkan-kopuz
    ' https://saplsmw.com/Import_tables_directly_into_Access_from_SAP_using_RFCs
    ' http://sapass.metro.client.jp/Sap_Active_X/UseFunctionControl.htm
    Set oSAP = CreateObject("SAP.Functions")
    oSAP.Connection.ApplicationServer = "" ' IP des Appl-Servers (SM51->Details)
    oSAP.Connection.SystemNumber = "01"           ' Systemnummer, meißt im Namen des Appl-Servers enthalten
    oSAP.Connection.System = "XA1"                ' Entwicklungs-, Test-, Produktivsystem
    oSAP.Connection.Client = "100"                ' Mandant
    oSAP.Connection.Language = "DE"               ' Sprache "EN", "DE" ...
    oSAP.Connection.User = "USER1"                ' SAP-User
    oSAP.Connection.Password = "xyz"              ' SAP-Passwort
    oSAP.Connection.UseSAPLogonIni = False
     
    ' RFC-Login, wobei
    ' Logon(0, False): Logon-Fenster anzeigen
    ' Logon(0, True): Silent logon, Passwort muss gesetzt sein
    If oSAP.Connection.Logon(0, False) = True Then
      Dim oFuBa As Object
         
      ' FuBa RFC_READ_TABLE abfragen
      Set oFuBa = oSAP.Add("RFC_READ_TABLE")
       
      ' EXPORTING
      Set e_query_table = oFuBa.Exports("QUERY_TABLE")
      Set e_delimiter = oFuBa.Exports("DELIMITER")
      Set e_rowCount = oFuBa.Exports("ROWCOUNT")
       
      e_query_table.Value = "STXH" ' Tabelle STXH
      e_delimiter.Value = ";"      ' Spalten mit ";" getrennt
      e_rowCount.Value = "100"     ' max. 100 Datensätze lesen, 0 = alle
       
      ' TABLES
      Set t_options = oFuBa.Tables("OPTIONS")
      Set t_fields = oFuBa.Tables("FIELDS")
      Set t_data = oFuBa.Tables("DATA")
       
      ' WHERE-Bedingung
      t_options.AppendRow
      t_options(1, "TEXT") = "TDOBJECT EQ 'TEXT'"
       
      ' Welche Spalten sollen gelesen werden
      t_fields.AppendRow
      t_fields(1, "FIELDNAME") = "TDOBJECT"
      t_fields.AppendRow
      t_fields(2, "FIELDNAME") = "TDNAME"
      t_fields.AppendRow
      t_fields(3, "FIELDNAME") = "TDID"
      t_fields.AppendRow
      t_fields(4, "FIELDNAME") = "TDTITLE"
      t_fields.AppendRow
      t_fields(5, "FIELDNAME") = "TDLUSER"
       
      If oFuBa.Call = True Then
        ' Schnittstellenparameter "TABLES-DATA" holen
        ' Rückgabe in Excel-Sheet einfügen
         
        Dim iRow As Integer
        iRow = 1
             
        ' Rückgabemenge beinhaltet Strings, die mit dem festgelegten Separator ";" getrennt sind
        For Each oDataLine In t_data.Rows
 
         
          Dim vFields As Variant
          vFields = Split(oDataLine(1), ";")
           
          '
          For iCol = LBound(vFields) To UBound(vFields)
            ActiveWorkbook.Sheets(1).Cells(iRow, iCol + 1) = Trim(vFields(iCol))
          Next iCol
                 
         iRow = iRow + 1
        Next
      Else
        ' Exception?
        MsgBox oFuBa.Exception
      End If
 
      ' Logoff
      oSAP.Connection.Logoff
     
    Else
      ' Login not possible
      MsgBox "Login failed"
    End If
 
End Sub

Add comment
10|10000 characters needed characters exceeded

  • Get RSS Feed

1 Answer

  • May 15 at 08:22 AM

    Hi Björn,

    I think either the application server host name or a message server is necessary to establish an RFC connection to an ABAP server. Maybe it is selected from the "SAP R/3 Logon" popup.

    If the ApplicationServer value is set, try to capture a security trace on the ABAP server, follow SAP note

    495911 - Logon problem trace analysis

    Note that calling RFC_READ_TABLE FM is not supported

    382318 - FAQ|Function module RFC_READ_TABLE

    2503119 - Information about function module RFC_READ_TABLE

    Best regards,

    Antal

    Add comment
    10|10000 characters needed characters exceeded