Los
Ganchos del Proyecto y Copias de Seguridad
Cada vez que
uno se enfrenta a nuevas novedades en nuevas versiones es un poco reacio a
usarlas siguiendo el criterio de ‘más vale malo conocido que bueno por
conocer’. Sin embargo cuando se hace muy
patente las mejoras que incorpora entonces todas las reticencias iniciales
desaparecen. Esto es lo que se pretende con este artículo, demostrar de una
forma fácil y asequible una ventaja muy práctica que te dan los ganchos del
proyecto y es el poder usarlos para hacer copias de seguridad.
El objetivo
es un sistema fácil y cómodo de hacer copias de seguridad de tus proyectos. La
propuesta es: cada vez que se abra un proyecto y sea la primera vez que se abre
en ese día se procede a realizar una copia de seguridad de todo el proyecto.
Al lado del
proyecto existe un fichero *.INI en el que se guardan dos datos:
- Directorio donde se van a guardar las copias de
seguridad
- Fecha de la última copia de seguridad.
Para hacer las
copias de seguridad pudes usar el Winzip o la herramienta que estimes oportuna,
en mi caso uso el veterano ARJ que además puedo distribuirlo con los ejemplos
de este artículo. Si quieres usar otro compresor te bastará con cambiar esa
línea de código.
Backup.INI
Tenemos que
crearnos un fichero *.INI que en nuestro caso le vamos a llamar Backup.ini y
que tiene el siguiente contenido:
[backupdir]
backupdir=c:\backup
[backupFecha]
backupFecha=26/06/2003
Como se puede ver, son dos epigrafes y una
línea en cada uno de ellos con el mismo nombre.
El primer epigrafe me guarda el directorio
donde se encuentran las copias de seguridad.
El segundo epigrafe la fecha de la ultima
copia de seguridad realizada.
MisUtiles.VCX
Esta fichero de clases tiene una clase
llamada miGancho y se basa en la clase
ProjectHook. En esta clase hemos
escrito sólo en el INIT con lo que este gancho se dispara siempre que se abre
el proyecto. El Código que se ha puesto en el INIT es:
lcClassPath = ADDBS(JUSTPATH( THIS.CLASSLIBRARY ))
DECLARE GetPrivateProfileString IN WIN32API ;
STRING sectionName, STRING KeyName, STRING
stdVal,;
STRING @BUFFER, INTEGER BufferLen, STRING
IniName
DECLARE integer WritePrivateProfileString in Win32API as
WritePrivStr ;
String
cSection, String cKey, String cValue, String cINIFile
lcBuffer = SPACE(255)
GetPrivateProfileString(
[backupdir],'backupdir',"",@lcBuffer, LEN(lcBuffer),
lcClassPath+"backup.ini")
IF NOT EMPTY( lcBuffer)
lcBackupDir
= ADDBS(STRTRAN( lcBuffer, CHR(0),""))
IF NOT
DIRECTORY( lcBackupDir)
MD
(lcBackupDir)
ENDIF
ELSE
lcBackupDir
= ADDBS(FULLPATH(CURDIR()))
ENDIF
THIS.cBackUpDir = lcBackupDir
lcBuffer = SPACE(255)
GetPrivateProfileString( [backupFecha],'backupFecha',"",@lcBuffer,
LEN(lcBuffer), lcClassPath+"backup.ini")
IF NOT EMPTY( lcBuffer)
lcbackupFecha = LEFT(ADDBS(STRTRAN( lcBuffer, CHR(0),"")),10)
ELSE
lcbackupFecha = DTOC(DATE())
ENDIF
THIS.cbackupFecha = lcbackupFecha
IF ctod(THIS.cbackupFecha) < DATE()
ELSE
RETURN
ENDIF
IF _VFP.ACTIVEPROJECT.FILES.COUNT > 0
lcYear =
ALLTRIM( STR( YEAR(DATE())))
lcMonth =
PADL(ALLTRIM( STR( MONTH(DATE()))),2,"0")
lcDay =
PADL(ALLTRIM( STR( DAY(DATE()))),2,"0")
lcTempname =
lcYear+lcMonth+lcDay
lcTempname =
lcTempname+"_"+CHRTRAN( TIME(), ":","")
lcTempname =
THIS.cBackUpDir + JUSTSTEM( _VFP.ACTIVEPROJECT.NAME)+lcTempname+"_PO"
RUN /n3
ARJ.EXE a -x*.pdf -x*.exe -x*.arj -x*.doc &lcTempname
ENDIF
= WritePrivStr( [backupFecha],'backupFecha',
DTOC(DATE()),lcClassPath+"backup.ini")
En el código
puedes ver que se declaran las funciones del API que se van a usar, se cargan
una serie de propiedades con el path de los archivos de Backup y la fecha de la
última copia.
Una vez se tomen los
datos anteriores usamos el ARJ para hacer la copia de seguridad. Seguramente
tendrás que personalizartelo un poco para que puedas adaptarlo a tus
necesidades.
Una vez tenemos ya
todo nuestro código preparado, la pregunta que se nos plantea es: ¿dónde lo
pongo?. Para relacionar el proyecto con ese trozo de código que es basicamente
una clase, lo único que tienes que hacer son 4 pasos:
1. Abre el Proyecto.
2. Vete a la ventana de dialogo
del proyecto a través de CRTL+J o a través del
menú Project - >Opciones.
3. La ventana de dialogo tiene
un aspecto parecido a éste:
4. Marca el
checkbox “Clases del Proyecto:”. Encuentra dondes está la librería de
clases.-
5. Selecciona tu archivo de clases que tiene la clase
migancho y pulsa en ‘Acepar’.
Y ya está....
Ya ves que es una forma sencilla, fácil de
tener siempre una copia de seguridad diaria de todos los proyectos.
FoxPress – Julio – Agosto de
2003
© 2003 FoxPress. All rights reserved