ORDA: Assegnazione di un percorso a un attributo di blob o immagine

Tradotto automaticamente da Deepl

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.

Percorso HDI per l’immagine

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.

Nicolas Brachfogel
- Proprietario del prodotto e sviluppatore senior - Nicolas Brachfogel è entrato in 4D nel 2017 come Senior Developer (4D Server e networking). In qualità di Product Owner per gestire il rilascio di Apple Silicon, si occupa di scrivere le storie degli utenti e di tradurle in specifiche funzionali, nonché di assicurarsi che le implementazioni delle funzionalità soddisfino le esigenze dei clienti. Diplomato all'Institut Supérieur d'Informatique Appliquée (INSIA), Nicolas ha iniziato la sua carriera come sviluppatore di software nel 2001. Dopo diversi anni di codifica in Java e C++, si è specializzato nello sviluppo di client-server per aziende di videogiochi. Come sviluppatore/architetto di server, ha lavorato con successo alle architetture server di molti giochi (Dofus Arena, Drakerz, Trivial Pursuit Go!).