Permalink
Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
174 lines (126 sloc) 5.22 KB
`JorgeChB 2012-06-14 GitExportar
`áéíóúüÁÉÍÓÚÜñÑçÇ€
`Guarda todos los métodos de la estructura en ficheros de texto independientes
`Si el método tiene nombre, lo guarda como nombre.txt
`Si no tiene nombre, lo guarda como zzz ID# del método en el recurso CC4D
`$1 TEXT Path en formato Mac de la carpeta en la que hay que guardar los ficheros, p.ej. "Unibody_HD:ZincoGit:src:"
`Esto usa los plugins:
`API PAck de Rob Laveaux http://www.pluggers.nl
`DynamicStructure de http://www.deepskytech.com
`4D Toolbox
C_BLOB($blob)
C_LONGINT($id;$err;$where;$i)
C_TEXT($guardarEn;$str;$str2;$pre;$filePath;$methodName;$fileName;$tmpFile;$cmd)
ARRAY INTEGER($methodIDs;0)
ARRAY STRING(31;$methodNames;0)
ARRAY LONGINT($allTheMethodIDs;0)
C_DATE($date)
C_TIME($time)
$guardarEn:=$1
`primero metemos en una matriz todos los ids de todos los métodos que existen en la estructura:
$err:=API Get Resource ID List ("CC4D";$allTheMethodIDs)
`luego preparamos otra matriz de TEXTos del mismo tamaño que $allTheMethodIDs en la que guardar los nombres de los métodos:
ARRAY TEXT($allTheMethodNames;Size of array($allTheMethodIDs))
`API Get Method Names nos dice los nombres e ids de los "Project Methods" pero no de los triggers
`ni de los "DataBase Methods": esos habrá que conseguirlos por otros medios.
API Get Method Names ($methodNames;$methodIDs)
`Copiamos los nombres a $allTheMethodNames:
For ($i;1;Size of array($methodNames))
$where:=Find in array($allTheMethodIDs;$methodIDs{$i})
$allTheMethodNames{$where}:=$methodNames{$i}
End for
`Y destruimos $methodNames y $methodIDs por que ya no nos sirven para nada más.
DELETE ELEMENT($methodNames;1;Size of array($methodNames))
DELETE ELEMENT($methodIDs;1;Size of array($methodIDs))
`ver http://groups.google.com/group/4d-tech/browse_thread/thread/e5829c59216d5354/f28ef93978feded0
`El index 1 del resource "DBPR" contiene 16 bytes, los bytes 1 y 2 son el id del recurso CC4D que contiene "On Startup",
`los bytes 2 y 3 el id de "On Server Startup", etc.
`Si los bytes son 0xffff es que ese método On XXX no existe (está vacío).
$err:=API Get Indexed Resource ("DBPR";1;$blob)
`Vamos a ver cuales existen, y a poner el nombre de los que existan en $allTheMethodNames
If ($err=0)
$id:=$blob{0}*256+$blob{1}
If ($id#0xFFFF)
$where:=Find in array($allTheMethodIDs;$id)
$allTheMethodNames{$where}:="On Startup"
End if
$id:=$blob{2}*256+$blob{3}
If ($id#0xFFFF)
$where:=Find in array($allTheMethodIDs;$id)
$allTheMethodNames{$where}:="On Server Startup"
End if
$id:=$blob{4}*256+$blob{5}
If ($id#0xFFFF)
$where:=Find in array($allTheMethodIDs;$id)
$allTheMethodNames{$where}:="On Exit"
End if
$id:=$blob{6}*256+$blob{7}
If ($id#0xFFFF)
$where:=Find in array($allTheMethodIDs;$id)
$allTheMethodNames{$where}:="On Server Shutdown"
End if
$id:=$blob{8}*256+$blob{9}
If ($id#0xFFFF)
$where:=Find in array($allTheMethodIDs;$id)
$allTheMethodNames{$where}:="On Server Open Connection"
End if
$id:=$blob{10}*256+$blob{11}
If ($id#0xFFFF)
$where:=Find in array($allTheMethodIDs;$id)
$allTheMethodNames{$where}:="On Web Connection"
End if
$id:=$blob{12}*256+$blob{13}
If ($id#0xFFFF)
$where:=Find in array($allTheMethodIDs;$id)
$allTheMethodNames{$where}:="On Server Close Connection"
End if
$id:=$blob{14}*256+$blob{15}
If ($id#0xFFFF)
$where:=Find in array($allTheMethodIDs;$id)
$allTheMethodNames{$where}:="On Web Authentication"
End if
End if
C_BOOLEAN($invisible;$trigSaveNew;$trigSaveRec;$trigDelRec;$trigLoadRec)
C_LONGINT($triggerID;$kk)
For ($i;1;Count tables)
$tableName:=Table name($i)
GET TABLE PROPERTIES($i;$invisible;$trigSaveNew;$trigSaveRec;$trigDelRec;$trigLoadRec)
If ($trigSaveNew | $trigSaveRec | $trigDelRec | $trigLoadRec)
$err:=ds_GetTriggerInfos ($i;$triggerID;$kk;$kk;$kk;$kk)
If ($triggerID#0)
$where:=Find in array($allTheMethodIDs;$triggerID)
$allTheMethodNames{$where}:="["+$tableName+"]TRIGGER"
End if
End if
End for
`IDs.txt es una tabla con los IDs, fecha y hora de modificación, y nombre de los métodos.
$filePath:=$guardarEn+" IDs.txt"
$file:=AP fopen ($filePath;0)
For ($i;1;Size of array($allTheMethodIDs))
$id:=$allTheMethodIDs{$i}
$methodName:=$allTheMethodNames{$i}
If ($methodName="")
`No sabemos el nombre lo guardamos por ID
$methodName:="zzz "+String($id;"##00000")
$allTheMethodNames{$i}:=$methodName
End if
$str:=String($id)+"\t"
$err:=API Get Resource Timestamp ("CC4D";$id;$fecha;$hora)
$year:=String(Year of($fecha))+"-"
$mes:=String(Month of($fecha))+"-"
$dia:=String(Day of($fecha))
$str:=$str+$year+$mes+$dia+"\t"+String($hora)+"\t"+$methodName+"\n"
AP FPRINT ($file;$str)
End for
AP FCLOSE ($file)
DocumentConvert ($filePath;"MACROMAN";"UTF8";"")
`Exportar los ficheros uno por uno
For ($i;1;Size of array($allTheMethodIDs))
$id:=$allTheMethodIDs{$i}
$tmpFile:=GitGetMethodTextById ($id)
DocumentConvert ($tmpFile;"MACROMAN";"UTF8";"")
$fileName:=$allTheMethodNames{$i}+".txt"
$filePath:=$guardarEn+$fileName
$cmd:="mv "+pathToUnix ($tmpFile)+" "+pathToUnix ($filePath)
$err:=TBX Execute In Shell (Mac to UTF8 ($cmd);$reply)
End for