I comandi di database non ORDA offrivano la possibilità di inserire immagini e blob al di fuori del file di dati grazie al comando SET EXTERNAL DATA PATH. Questo comando non è adatto a ORDA e per questo motivo abbiamo deciso di aggiungere una funzionalità simile nella v20 R3: La possibilità di assegnare a un attributo blob o immagine un percorso che punta a un file. Vi spiego meglio.
Per prima cosa, analizziamo questo pezzo di codice:
$myRecord:=ds.MyTable.new()
$myRecord.image:="C:/FolderWithMyFiles/myImage"
$myRecord.binary:="C:/FolderWithMyFiles/myBinary"
$myRecord.save()
Gli attributi image e binary sono rispettivamente un attributo picture e un attributo blob. Assegnando loro un percorso invece di un’immagine o di un blob vero e proprio, 4D inserirà nel file di dati solo il percorso fornito. Solo quando si utilizzerà l’immagine o il blob, 4D caricherà il file dal disco e creerà una variabile immagine o blob appropriata. Per l’utente sarà completamente trasparente.
Vantaggi e precauzioni
Questo modo di procedere presenta alcuni vantaggi:
– Non si memorizzano file binari all’interno del file di dati. Di conseguenza, il file di dati rimane più piccolo e più veloce da mantenere.
– È possibile utilizzare lo stesso file per più record senza duplicare il contenuto del file.
– È possibile organizzare i file nel modo desiderato e persino utilizzarli con software diversi da 4D.
Ma ci sono anche un paio di precauzioni da prendere:
– Poiché 4D ha bisogno del file sul disco, è necessario assicurarsi che rimanga accessibile ogni volta che 4D vi accede.
– Quando si assegna un percorso a un’immagine o a un blob, si bypassa la proprietà del campo “Memorizzato” nella struttura del database (la proprietà “Memorizzato” consente di scegliere dove memorizzare il contenuto dell’immagine o del blob tra il file di dati o un file di dati esterno).
Percorso POSIX o 4D.File
Il primo pezzo di codice assegna un percorso POSIX all’attributo (sono accettati solo percorsi POSIX). Un’altra soluzione è quella di assegnare un 4D.File come in questo esempio:
$file:=File("/PACKAGE/FolderWithMyFiles/myImage")
$myRecord:=ds.MyTable.new()
$myRecord.image:=$file
$myRecord.save()
Questo codice assegnerà il percorso del file 4D.File all’attributo.
Cosa succede se si cambia il file sul disco?
Questa è una domanda complicata. Poiché 4D memorizza il contenuto di blob e immagini all’interno della sua cache, è possibile che non accada nulla finché non si chiude e riapre l’applicazione. Se si vuole davvero essere in grado di modificare il file in fase di esecuzione, c’è un trucco che si può usare: Assegnare nuovamente il percorso all’attributo. Quando 4D rileverà un nuovo valore, pulirà la sua cache e quindi otterrete il nuovo file la prossima volta che userete l’immagine o il blob.
Nota: se si accede all’immagine o al blob tramite un browser, ad esempio con Qodly o Data Explorer, ricordarsi di cancellare anche la cache del browser.
Utilizzate il forum per qualsiasi domanda
Potete consultare la documentazione per imparare a utilizzare questa nuova funzione. Se avete domande o commenti, non esitate a contattare il nostro forum. Saremo più che felici di aiutarvi.