https://foro.gambas-es.org/viewtopic.php?f=22&t=5228&p=30829#p30829
-----------------------------------
shordi
Miercoles, 09 Marzo 2016, 18:28

Re: Software Libre Vs Software Privativo
-----------------------------------
[quote user="Shell" post="30826"]Además de los tickets supongo que tambien se creara un log para detallar la actividad de la aplicación.
Supongo que el sistema de tickets estará basado en eso.[/quote]
Son cosas distintas, cada aplicación tiene su propia tabla de log. El código es muy sencillo.
Tengo una serie de funciones en un módulo que graban altas, modificaciones, bajas, etc. de los datos de un result en la base de datos.
Algo así:
[code linenumbers=false syntax=gambas]
Public Function grabaRegistro(tabla As String, campoClave As String, clave As Variant, oContenedor As Object, Optional laConexion As Connection) As Boolean

    Dim rsDatos As Result
    Dim cad as string
    Dim f As ResultField
    Dim cad, v As String
    '... abre conexiones, comprobaciones
    '....  bla bla bla y luego
     rsDatos = laConexion.edit(tabla, campoClave & "= &1", clave)
    '... grabar datos y demás
    '..., bla, bla bla y luego
        For Each f In rsDdatos.Fields
           cad &= f.name & ": " & rsDatos[f.name] & "\n"
        Next
       ' el resultado de este bucle es una cadena que contiene los campos y su contenido que ese han grabado en la tabla en cuestión. Algo así como:
       'rowid: 1234
       'apellidos: Garcia Garcia
      ' nombre: Pepe
      ' dirección: su casa de él
      ' etc. etc.
      'y ahora se llama a la función que genera una entrada en la tabla de logs
        iComun.hlog("Modifica " & tabla, cad) 
    End If
  Endif
  Return lret
  
 Catch
     
    Return False

End 
[/code]
Esta es la función que graba un registro en la tabla de log ad_hlog por cada actividad en la base de datos
[code linenumbers=false syntax=gambas]
Public Sub hlog(tipo As String, detalle As String)
     
    detalle = Replace(detalle, "'", "\\'")
    detalle = Replace(detalle, "\"", "\\\"")
    detalle = "insert into ad_hlog (tipo, detalle, usr,fmod) values ('" & String.Mid(tipo, 1) & "', '" & String.Mid(detalle, 1) & "', '" & String.Mid(iComun.usuario.nick, 1) & "', " & "now()" & ")"
    iComun.datos.exec(detalle)
      
 Catch
   'si hay algún error se envía un error a una cuenta de correo que es parte del sistema de tickets
    ieMail.sendmail(icomun.entorno["mailprograma"], [icomun.entorno["mailerrores"]], "Error en hlog", "Error al grabar en hlog esto: \n" & detalle, iComun.mailserver)
 
End
[/code]
No sé si parece engorroso, pero funciona de manera automática y te genera un seguimiento muy efectivo de lo que hace el usuario.
De vez en cuando insertas líneas que la invocan directamente en puntos concretos del código. Por ejemplo después de validarse tenemos esta línea:

[code linenumbers=false syntax=gambas]iComun.hlog("Entrada", Format(Now, "dd/mm/yyyy hh:nn:ss") & ": se conecta al sistema.") [/code]
y en el evento close del formulario principal:
[code linenumbers=false syntax=gambas]iComun.hlog("Salida", Format(Now, "dd/mm/yyyy hh:nn:ss") & ": se desconecta del sistema.") [/code]

El sistema de tickets se compone de esos correos que genera el programa automáticamente  en caso de error y de un formulario que rellena una tabla de mensajes y que son recibidos por mí mediante un sistema de alertas hecho a base de crons y demás.


