Mostrar datos en una grilla por DI API(.NET) - SAP

Buenos días, apreciados colegas, ya he podido recuperar mi cuenta y quisiera aprovechar para consultarles esto que me ha estado atascando desde hace varias semanas.
Como bien lo indico en el título, estoy incursionando en el mundo del desarrollo a través de DI API en .NET y la verdad soy nuevo en este tema del desarrollo y hasta tal vez les cause gracia mi pregunta, pero en fin, la cuestión es que necesito mostrar dentro de un datagridview todos los registros de la tabla OITM (o todos los productos cargados en el maestro de artículos). La verdad he buscado mucho y aparentemente la forma más ideal, según las documentaciones del SDK de SAP, sería utilizar un Recordset, pero no estoy tan familiarizado con este método. A continuación les comparto un código, que dicho sea de paso, se encuentra en la documentación. He intentado adaptar a mis necesidades, pero no conseguí mucho.

Sub llenarGrillaPrueba()

    Dim Count As Long
    Dim i As Long
    Dim RecSet As SAPbobsCOM.Recordset
    RecSet = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset)
    RecSet.DoQuery("select ""ItemCode"" from OITM where ""ItemCode"" IN ('429','1009')")
    'RecSet.DoQuery("select * from OITM where ""InvntItem"" = 'Y' ORDER BY ""ItemCode"" ASC") 

    Count = RecSet.RecordCount

    While RecSet.EoF = False
        For i = 0 To Count - 1             
            DataGridView1.Rows(i).Cells("codigo").Value = RecSet.Fields.Item("ItemCode").Value              
            RecSet.MoveNext()
        Next i
    End While
End Sub

Ese es el código que en teoría debería llenarle la grilla, pero me sale una excepción diciendo que está fuera del rango del índice.

La verdad hice muchas pruebas, un registro puedo cargar sin problemas, pero si intento cargar más de un registro, me sale el error del rango.
Alguien que conozca bien el funcionamiento del Recordset que pueda ayudarme? O alguien que me indique alguna forma de hacer esto?

Observación rápida: Hay otra forma de cargar la grilla (que me funcionó), que es mediante un método llamado “GetItemList”, pero no conseguí filtrar desde allí. Igual si saben alguna forma para filtrar los datos desde aquí, también me serviría.

La idea principal es crear un campo de texto donde pueda implementar un evento que por cada letra escrita por el usuario, vaya filtrando la información en la grilla.

También encontré esto en este foro, pero no sé muy bien cómo funciona: Llenar una grilla con las formas de pago con diapi - nº 3 por Esteban_P

Desde ya, muchas gracias por su atención. Espero puedan ayudarme con esto. Saludos.

He conseguido la solución después de horas de búsqueda, gracias igual a todos por tomarse el tiempo de leer mi problema. Un saludo para todos.

Pues para quedar estupendamente @AleVecca
¿podrías aportarnos la solución?
¿si?
Además, marcarías el tema como solucionado.
Gracias.

Buenos días @meqs, por supuesto. La solución que resuelve mi problema sería este código:

Sub llenarGrillaCodigo(ByVal v_codigo As String, ByVal dgOITM As DataGridView) 'dgOITM = DataGridOITM

    dgOITM.Rows.Clear()
    Dim Count As Long
    Dim cantFilas As Integer
    Dim i As Long
    Dim RecSet As SAPbobsCOM.Recordset
    RecSet = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset)
   
    RecSet.DoQuery("SELECT T0.""ItemCode"", T0.""ItemName"", T0.""InvntryUom"", T1.""ItmsGrpNam"" 
                    FROM OITM T0  INNER JOIN OITB T1 ON T0.""ItmsGrpCod"" = T1.""ItmsGrpCod"" 
                    WHERE T0.""InvntItem"" = 'Y' AND T0.""validFor"" = 'Y' 
                    AND  T1.""ItmsGrpCod"" IN('103','106','109','115') AND ""ItemCode"" like'" & v_codigo & "%' ORDER BY ""ItemCode""")
    Count = RecSet.RecordCount
    cantFilas = Count

    If cantFilas <= 0 Then
        MsgBox("No existen coincidencias.", MsgBoxStyle.Exclamation)
    Else 
        dgOITM.Rows.Add(cantFilas)
        While RecSet.EoF = False
            For i = 0 To Count - 1
                dgOITM.Rows(i).Cells("codigo").Value = RecSet.Fields.Item("ItemCode").Value
                dgOITM.Rows(i).Cells("descripcion").Value = RecSet.Fields.Item("ItemName").Value
                dgOITM.Rows(i).Cells("unidadMedida").Value = RecSet.Fields.Item("InvntryUom").Value
                dgOITM.Rows(i).Cells("grupoPT").Value = RecSet.Fields.Item("ItmsGrpNam").Value
                RecSet.MoveNext()
            Next i
        End While
    End If

End Sub

Bien, espero sea entendible lo que hice o en todo caso si notan que hay algo que puedo mejorar, estaré atento a sus comentarios.

Un cordial saludo para todos.

1 me gusta

Este tema se cerró automáticamente 7 días después de la última publicación. No se permiten nuevas respuestas.