PDA

Ver la Versión Completa : Ejemplo RFC_READ_TABLE


rogerclavell
07/05/12, 10:43:37
Hola,

Os paso un ejemplo de como leer datos de las tablas de sap desde visual studio 2010 y el connector sap 3.0.

Imports SAP.Middleware.Connector

Private Sub leertabla()

'Parametros de conexión a SAP
Dim param As New RfcConfigParameters
param(RfcConfigParameters.User) = "tu_usuario"
param(RfcConfigParameters.Password) = "tu_password"
param(RfcConfigParameters.SystemID) = "sap_maquina"
param(RfcConfigParameters.Client) = "sap_mandante"
param(RfcConfigParameters.Name) = "sap_groupname"
param(RfcConfigParameters.AppServerHost) = "sap_ip"
param(RfcConfigParameters.SystemNumber) = "sap_numero_sistema"
param(RfcConfigParameters.Language) = "ES"
Try

'Conexión a SAP
Dim conex As RfcDestination
conex = RfcDestinationManager.GetDestination(param)


Dim rfcFunction As IRfcFunction = conex.Repository.CreateFunction("RFC_READ_TABLE") 'Función RFC de SAP
rfcFunction.SetValue("QUERY_TABLE", "MCHB") 'Tabla sobre la que queremos buscar
rfcFunction.SetValue("DELIMITER", "~") 'Delimitador de valores

'Campos que queremos mostrar
Dim tblFields As IRfcTable = rfcFunction.GetTable("FIELDS")
tblFields.Append()
tblFields.SetValue("FIELDNAME", "MATNR")
tblFields.Append()
tblFields.SetValue("FIELDNAME", "ERSDA")
tblFields.Append()
tblFields.SetValue("FIELDNAME", "LGORT")

'Condición WHERE para realizar la busqueda
Dim tblOptions As IRfcTable = rfcFunction.GetTable("OPTIONS")
tblOptions.Append()
tblOptions.SetValue("TEXT", "MATNR EQ '000000000100000008'")

'Ejecutar la función
rfcFunction.Invoke(conex)

'Recuperar los datos que nos devuelve SAP
Dim tblResult As IRfcTable = rfcFunction.GetTable("DATA")

'Recorrer los datos que nos muestra SAP
Dim misResultados(tblResult.RowCount - 1, 0) As String
For i As Integer = 0 To tblResult.RowCount - 1
Dim sRes() As String = Split(tblResult.Item(i).GetString(0), "~") 'Separarlos por el delimitador
ReDim Preserve misResultados(tblResult.RowCount - 1, UBound(sRes))
For i2 As Integer = 0 To UBound(sRes)
misResultados(i, i2) = sRes(i2) 'Guardarlos en un vector de strings
Next
Next


Catch ex As Exception
MsgBox(ex)
End Try

End Sub

Espero sirva de ayuda.

zehiter
18/06/13, 15:47:19
Muchas gracias por tu ejemplo rogerclavell ya lo estoy implementando para leer datos de una tabla Z desde VB 2010 :D

Tengo una pregunta ojalá puedas ayudarme, resulta que cuando me conecto a SAP para leer los datos una vez que cierro mi aplicación VB el usuario se queda conectado en SAP, esto lo he comprobado ejecutando la transacción SM04. Cómo le hago para cerrar la sesión desde VB :confused:

zehiter
20/06/13, 16:19:15
Ya lo tengo, una vez que me conecto a SAP desde VB, sobre la misma conexión mando llamar la función TH_DELETE_MODE pero esta en una función Z con el parámetro "modulo de acceso remoto" ;)