Spanish Grabar en webservice php maestro detalle

Miguel Santillan

Member
Licensed User
Buenas tardes, los molesto por la siguiente inquietud.
soy novato en b4a aunque ya llevo mas o menos tres meses pegándome contra las paredes, he avanzado demasiado por me faltan conceptos.
Los molesto porque uno de ellos es fundamental.
He grabado en el el teléfono dos tablas sqlite, una cabeza y otra detalle. Ahora quiero pasar la info a mi servidor que tiene programas en php y actualizar bases postgresql.
El problema es que la cabecera la grabo bien, pero no se en que momento debo enviar los detalles porque el envío de estos arrancan antes que termine la actualización de la cabecera.
TODO ESTO EN UN MODULO DE SERVICIO.
Estoy usando OkHttpUtils2. Aclaro porque no se si usando OkHttP se hace de la misma manera.

Adjunto un ejemplo recortado que he armado enviando solo una tabla, faltaria la segunda.

Muchas gracias
Miguel

B4X:
Sub Service_Start (StartingIntent As Intent)
    Dim Proceso As String
    If File.Exists(File.DirRootExternal,"db.db") = False Then
        File.Copy(File.DirInternal,"db.db",File.DirRootExternal,"db.db")
    End If
    If SQL1.IsInitialized = False Then
        SQL1.Initialize(File.DirRootExternal, "db.db", True)
    End If
    Dim Query As String
    Registro = SQL1.ExecQuery("select campo1, campo2 from tabla")
    
    For n = 0 To Registro.RowCount - 1
        Registro.Position = n
        X_campo1       = Registro.GetInt("campo1")
        X_campo2        = Registro.GetString("campo2")
        If X_id_pedido <> 0  Then
            Proceso = "Procesa Pedidos"
            ExecuteRemoteQuery("insert into base_server (campo1, campo2 ) values (" & X_campo1 & "," & X_campo2")", Proceso)
        End If
    Next
    Service.StopAutomaticForeground 'Call this when the background task completes (if there is one)
End Sub

Sub ExecuteRemoteQuery(Query As String, JobName As String)
    Dim json As JSONParser
    Dim num As Int
    Dim Cantidad_registros As Int
    Dim Registros As List
    Dim Conta As Int
    Dim Externa As String
    Dim Interna As String
    Dim Porcentaje As Double
    Dim Proceso As String
    Dim Descripcion_error As String

    Dim job As HttpJob
    job.Initialize(JobName, Me)
    If JobName = "Procesa Pedidos" Then
        job.PostString("http://" & Main.Direccion_ip & "/xx/sincroniza1.php", Query)
        wait for(job) JobDone(job As HttpJob)
        Dim json As JSONParser
        Dim req As OkHttpRequest
        Dim Query As String
        ProgressDialogHide
        If job.Success Then
            Dim res As String
            res = job.GetString
            Dim parser As JSONParser
            parser.Initialize(res)
            Dim m As Map
            m = parser.NextObject
            Registros = m.Get("Respuesta")
            Cantidad_registros = Registros.Size
            If Registros.Size > 0 Then
                For i = 0 To Registros.Size - 1
                    m = Registros.Get(i)
                    Codigo_error      = m.Get("codigo_error")
                Next
                job.Release
            End If
        Else
            Codigo_error = "Con Errores"
        End If
    End If
end sub
 

edgar_ortiz

Active Member
Licensed User
Longtime User
Miguel,

En teoría el envío del "detalle" debe hacerse en el "Job Done (Job.Success)" de cada "maestro" enviado.

Espero te sirva

Saludos,

Edgar
 
Top