Spanish Ayuda con JobDone al grabar

ebqlabs

Active Member
Licensed User
Hola, estoy realizando uan grabación por JobDone.

Tengo un for de unos check box, que los que estan chequeados le digo me haga la grabación. Todo funciona bien pero al parece el B4A lee muy rapido que solo me guarda el ultimo registro. y antes de ir al Jobdone mande un mensaje y al ir haciendo pausa me guardaba todos. Alguna ayuda o comentario. Saludos



NO HACIENDO LA PAUSA DE UN MENSAJE, ME GRABO SOLAMENTE UNO
B4X:
Sub btnGrbAct_Click
''''''''''''''''''''''''''''''''''''''''''''''''''''''''INI CHECK ENTREGA
    For i = 0 To lstChecksUno.Size - 1
        Dim chk As CheckBox
        chk.Initialize("")
        chk = lstChecksUno.Get(i)
  
        If (chk.Checked = True) Then
           GrbTabItm.initialize("GrbTabItm", Me)
           GrbTabItm.Download2("www.mipagina", Array As String("iCodInp", -1, "iNumCtr", ctr_num, "iLtrRpz", ltr_rpz, "iCodItm", chk.tag ,"iFlgEst", flg_est))      
        Else

        End If       
    Next

End Sub

Y HACIENDO PAUSA CON UN MENSAJE ME GRABA TODOS

B4X:
Sub btnGrbAct_Click
''''''''''''''''''''''''''''''''''''''''''''''''''''''''INI CHECK ENTREGA
    For i = 0 To lstChecksUno.Size - 1
        Dim chk As CheckBox
        chk.Initialize("")
        chk = lstChecksUno.Get(i)
  
        If (chk.Checked = True) Then
       Msgbox("HACIENDO PAUSA", "PRESIONE ACEPTAR")
           GrbTabItm.initialize("GrbTabItm", Me)
           GrbTabItm.Download2("www.mipagina", Array As String("iCodInp", -1, "iNumCtr", ctr_num, "iLtrRpz", ltr_rpz, "iCodItm", chk.tag ,"iFlgEst", flg_est))       
        Else

        End If       
    Next

End Sub





y el jobdone es asi

B4X:
Sub JobDone(job As HttpJob)

If job.Success = True Then
            Select job.JobName
                 Case "GrbTabItm"        
            End Select
            Else
            Msgbox("Error de conexion", "")
        End If
 
Last edited:

IdasI4A

Active Member
Licensed User
Longtime User
Cada vez que hace un GrbTabItm.Download2 tienes que esperar la respuesta antes de hacer otro, (es asincrono, el código continua sin esperar la respuesta)

Para hacer lo que tu haces yo lo hago más o menos así
B4X:
Sub Globals

   Dim f_Indice As InputStream
End Sub

Sub InicioGrabar
   f_Indice=0
   Grabar
End Sub

Sub Grabar
   Dim chk As CheckBox
   
   If f_Indice=lstChecksUno.Size - 1 Then
     ' fin de la grabacion ya hemos gradado todos.
     Return
   End If

   chk.Initialize("")
   chk = lstChecksUno.Get(f_Indice)

   If (chk.Checked = True) Then
    GrbTabItm.initialize("GrbTabItm", Me)
    GrbTabItm.Download2("www.mipagina", Array As String("iCodInp", -1, "iNumCtr", ctr_num, "iLtrRpz", ltr_rpz, "iCodItm", chk.tag ,"iFlgEst", flg_est))   
   Else
End Sub

Sub JobDone(job As HttpJob)

   f_Indice=f_Indice+1
   JobDone.Release
   Grabar ' Mandamos el otro.
End Sub

Espero que te ayude.
 

ebqlabs

Active Member
Licensed User
jhalaw.png


Me sale este error al real izarlo como dices.
Cada vez que hace un GrbTabItm.Download2 tienes que esperar la respuesta antes de hacer otro, (es asincrono, el código continua sin esperar la respuesta)

Para hacer lo que tu haces yo lo hago más o menos así
B4X:
Sub Globals

   Dim f_Indice As InputStream
End Sub

Sub InicioGrabar
   f_Indice=0
   Grabar
End Sub

Sub Grabar
   Dim chk As CheckBox
  
   If f_Indice=lstChecksUno.Size - 1 Then
     ' fin de la grabacion ya hemos gradado todos.
     Return
   End If

   chk.Initialize("")
   chk = lstChecksUno.Get(f_Indice)

   If (chk.Checked = True) Then
    GrbTabItm.initialize("GrbTabItm", Me)
    GrbTabItm.Download2("www.mipagina", Array As String("iCodInp", -1, "iNumCtr", ctr_num, "iLtrRpz", ltr_rpz, "iCodItm", chk.tag ,"iFlgEst", flg_est))  
   Else
End Sub

Sub JobDone(job As HttpJob)

   f_Indice=f_Indice+1
   JobDone.Release
   Grabar ' Mandamos el otro.
End Sub

Espero que te ayude.
 

ebqlabs

Active Member
Licensed User
Inclusive cuando aquí también me sale error, cuando declaro como numero

B4X:
f_Indice= 0

aquí también al declararlo el f_indice

B4X:
Sub JobDone(job As HttpJob)

   f_Indice=f_Indice+1
   JobDone.Release
   Grabar ' Mandamos el otro.
End Sub
 
Last edited:

IdasI4A

Active Member
Licensed User
Longtime User
Perdón, f_Indice es un entero
B4X:
Sub Globals
     Dim f_Indice As Int 
End Sub
 

ebqlabs

Active Member
Licensed User
Perdón, f_Indice es un entero
B4X:
Sub Globals
     Dim f_Indice As Int
End Sub
Que se supone que hace este código

B4X:
If f_Indice=lstChecksUno.Size - 1 Then
     ' fin de la grabacion ya hemos gradado todos.
     Return
    End If

Saludos

Una pregunta, si tengo dos o tres consulta por .download2 como lo realizo para que carga uno primero, luego el otro y el otro ? saludos
 
Last edited:

IdasI4A

Active Member
Licensed User
Longtime User
El problema es que quiere hacer dentro de un bucle for la instrucción "GrbTabItm.Download2", pero para hecer un "GrbTabItm.Download2" hay que esperar que el anterior responda. Por eso no te funciona.
Yo lo que intento hacer es ese bucle for pero esperando a que acabe un "GrbTabItm.Download2" para lanzar el siguiente. Por eso para iniciar la grabación pongo un contador a 0 (f_Indice=0) y llamo a la funcion Grabar. En esta funcion compruebo que el indice no es el último (If f_Indice=lstChecksUno.Size - 1Then) si es el último ya he acabado, sino es el último hago llamo a "GrbTabItm.Download2"
En JobDone hago f_indice=f_indice+1 y llamo de nuevo a la funcion Grabar para que haga una nueva iteración.

En realidad se trata de hacer el bucle, pero hasta que no obtenemos el resutado de "GrbTabItm.Download2" no lanzar la siguiente iteración.

Si te fijas bien estamos haciendo el bucle for, llamando recursivamente a la función grabar.
For i=0 -> f_indice=0
to lstChecksUno.Size - 1 -> If f_Indice=lstChecksUno.Size - 1
cada itenacion es llamar a la funcion Grabar

En la función Grabar faltaba la parte del else
B4X:
Sub Grabar
 Dim chk AsCheckBox
 If f_Indice=lstChecksUno.Size - 1Then' fin de la grabacion ya hemos gradado todos.ReturnEndIf

 chk.Initialize("")
 chk = lstChecksUno.Get(f_Indice)
If (chk.Checked = True) Then
 GrbTabItm.initialize("GrbTabItm", Me)
 GrbTabItm.Download2("www.mipagina", ArrayAsString("iCodInp", -1, "iNumCtr", ctr_num, "iLtrRpz", ltr_rpz, "iCodItm", chk.tag ,"iFlgEst", flg_est))
Else
  f_indice=f_indice+1 
  Grabar
End if
End Sub

Espero que te sirva.
 
Top