Lentitud de Update en lineas de Doc. por DI-API

Buenas tardes colegas, quisiera comentarles sobre un inconveniente que estoy teniendo, tengo desarrollado un Addon en donde a través de UI API agrego un Botón a un formulario nativo, dicho botón lo que realiza es asignar los lotes a los articulos de forma automática (a través de las funciones proporcionadas por la DI API) a cada linea de una orden de venta (ya que recupera los lotes disponibles ordenados según el vencimiento).
Todo el proceso y la codificación funciona correctamente, pero se hace sumamente lento cuando las ordenes de venta superan las 20 lineas.
Se que mis búsquedas y recorridos de los lotes no entran en bucles innecesarios porque se hace lento al momento de hacer el Orden.Update()

Si por ejemplo dejo comentado la linea del código donde hace este Orden.Update() el recorrido que realiza internamente es bastante rápido.

Más abajo parte del código que se ejecuta dentro de un FOR que recorre cada linea de las ordenes de venta que voy a actualizar:

Dim Orden As Documents = _SBO.GetBusinessObject(BoObjectTypes.oOrders)
                                    Dim Orden_lines As Document_Lines
                                   
                                    If Orden.GetByKey(OrderEntry) Then
                                        Orden_lines = Orden.Lines
                                        Orden_lines.SetCurrentLine(VisOrder)
                                        If RelQtty <> 0 Then
                                            If ManBtchNum = "Y" Then


                                                Dim _Consulta2 As String = "SELECT T0.DistNumber, ISNULL(T1.Quantity,0)-ISNULL(T1.CommitQty,0) FROM OBTN  T0 with(nolock) INNER JOIN OBTQ  T1 with(nolock) ON T0.ItemCode = T1.ItemCode AND T0.SysNumber = T1.SysNumber WHERE T1.Quantity > 0  AND T1.ItemCode = '" & (ItemCode) & "' and T1.WhsCode = '" & Orden_lines.WarehouseCode & "'order by isnull(convert(varchar, T0.ExpDate, 112), '20501231') asc"
                                                _DataTable2.ExecuteQuery(_Consulta2)
                                                _Grid2.DataTable = _Form.DataSources.DataTables.Item("dtAuxLot")
                                                Dim cantauxlote As Integer = 0
                                                For numfila2 As Integer = 0 To _Grid2.Rows.Count - 1
                                                    Dim valorFila2 As Integer = _Grid2.GetDataTableRowIndex(numfila2)
                                                    
                                                    Dim DistNumber, Quantity As String
                                                    DistNumber = _Grid2.DataTable.GetValue(0, valorFila2)
                                                    Quantity = _Grid2.DataTable.GetValue(1, valorFila2)
                                                    If (RelQtty - cantauxlote) <= Quantity Then
                                                        If (RelQtty - cantauxlote) <> 0 Then
                                                            If numfila2 <> 0 Then
                                                                Orden_lines.BatchNumbers.Add()
                                                            End If
                                                            Orden_lines.BatchNumbers.BatchNumber = DistNumber
                                                            Orden_lines.BatchNumbers.Quantity = (RelQtty - cantauxlote)
                                                            cantauxlote = cantauxlote + (RelQtty - cantauxlote)
                                                            If cantauxlote = RelQtty Then
                                                                numfila2 = (_Grid2.Rows.Count - 1)
                                                            End If
                                                        End If
                                                    Else
                                                        If numfila2 <> 0 Then
                                                            Orden_lines.BatchNumbers.Add()
                                                        End If

                                                        Orden_lines.BatchNumbers.BatchNumber = DistNumber
                                                        Orden_lines.BatchNumbers.Quantity = Quantity
                                                        cantauxlote = cantauxlote + Quantity
                                                        If cantauxlote = RelQtty Then
                                                            numfila2 = (_Grid2.Rows.Count - 1)
                                                        End If
                                                    End If



                                                Next

                                                errNum = Orden.Update()

                                                If Not errNum.Equals(0) Then
                                                    _SBO.GetLastError(errNum, errDes)
                                                    MessageBox.Show(errDes)
                                                Else
                                                  
                                                End If

                                                _Grid2.DataTable.Clear()
                                          
                                            End If

                                        End If

                                    End If

Alguna recomendación que pueda aplicar?
Como les dije al momento de que la orden de venta tienen aproximadamente 20 lineas el proceso se hace muy lento al momento de hacer el Orden.Update() , por ejemplo una orden de 20 lineas tarda minimamente 6 minutos en procesar.
Si la orden tiene por ejemplo 5 lineas lo hace muy rápido y en segundos.
Desde ya muchas gracias.

Atte.-
Arturo M.

1 me gusta

Hola @Artu_Marecos
Prueba actualizar la orden de venta mediante un XML (oBusinessObject.Browser.ReadXML)

2 Me gusta

Muy buenas tardes.
Por suerte pude encontrar una forma de optimizar el proceso dentro mi código para hacerlo mucho más rápido.
De todas formas gracias por la recomendación @andresramirez , en algún momento puedo tener la necesidad de actualizar algún documento por XML.

Saludos.-

@Artu_Marecos
Seria muy útil para la comunidad compartir la solución que encontraste.

2 Me gusta

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