ORDA: asignación de una ruta a un atributo blob o imagen

Los comandos de bases de datos que no ORDA le daban la opción de poner imágenes y blobs fuera de su archivo de datos gracias al comando SET EXTERNAL DATA PATH. Este comando no está adaptado para ORDA y como tal hemos decidido agregar una funcionalidad similar en v20 R3: la posibilidad de asignar a un atributo blob o imagen una ruta a un archivo. Permítame contarle más al respecto.

Ruta HDI para imagen

En primer lugar, veamos este fragmento de código:

$myRecord:=ds.MyTable.new()
$myRecord.image:="C:/FolderWithMyFiles/myImage"
$myRecord.binary:="C:/FolderWithMyFiles/myBinary"
$myRecord.save()

Los atributos image y binary son respectivamente un atributo imagen y un atributo blob. Al asignarles una ruta en lugar de una imagen real o blob, 4D sólo pondrá dentro del fichero de datos la ruta proporcionada. Sólo cuando utilice la imagen o el blob, 4D cargará el archivo desde el disco y creará una variable imagen o blob adecuada. Para usted, será completamente transparente.

Ventajas y precauciones

Esto tiene algunas ventajas:
– No almacena archivos binarios dentro de su archivo de datos. Por lo tanto, su archivo de datos se mantiene más pequeño y rápido de mantener.
– Puede utilizar el mismo archivo para varios registros sin duplicar el contenido del archivo.
– Puede organizar los archivos como quiera e incluso utilizarlos con software ajeno a 4D.

Pero también hay un par de precauciones que debe tomar:
– Como 4D necesita el archivo en el disco debe asegurarse de que permanece accesible siempre que 4D acceda a él.
– Cuando asigne una ruta a una imagen o blob, pase por alto la propiedad del campo «Stockage» en la estructura de la base de datos (la propiedad «Stockage» le permite elegir dónde almacenar el contenido de la imagen o blob entre el archivo de datos o un archivo de datos externo).

Ruta POSIX o 4D.File

La primera parte de código asigna una ruta POSIX al atributo (sólo se aceptan rutas POSIX). Otra solución es asignar un archivo 4D.File como en este ejemplo:

$file:=File("/PACKAGE/FolderWithMyFiles/myImage")
$myRecord:=ds.MyTable.new()
$myRecord.image:=$file
$myRecord.save()

Este código asignará la ruta del archivo 4D.File al atributo.

¿Qué pasa si se cambia el Archivo en el disco?

Bueno, esta es una pregunta delicada. Como 4D almacena el contenido de los blobs e imágenes dentro de su caché, es muy posible que no ocurra nada hasta que cierre y vuelva a abrir su aplicación. Si realmente quiere poder cambiar el archivo en tiempo de ejecución, hay un truco que puede utilizar: asigne la ruta al atributo una vez más. Como 4D detectará un nuevo valor, limpiará su caché y como tal obtendrá el nuevo archivo la próxima vez que utilice la imagen o blob.
Nota: si accede a la imagen o blob a través de un navegador, por ejemplo, con Qodly o el explorador de datos, recuerde limpiar también la caché del navegador.

UtiliCE el foro si tiene alguna duda

Puede consultar la documentación para aprender a utilizar esta nueva función. Y si tiene alguna pregunta o comentario, no dude en acudir a nuestro foro. Estaremos encantados de ayudarle.

Nicolas Brachfogel
• Propietario de producto y Desarrollador Senior - Nicolas Brachfogel se unió a 4D en 2017 como Senior Developer (4D Server y networking). Como Product Owner para gestionar el lanzamiento de Apple Silicon, está a cargo de escribir historias de usuario y traducirlas en especificaciones funcionales, así como asegurarse de que las implementaciones de las funcionalidades satisfagan las necesidades del cliente. Diplomado por el Instituto Superior de Informática Aplicada (INSIA), Nicolas comenzó su carrera como desarrollador de software en 2001. Tras varios años codificando en Java y C++, pasó a especializarse en el desarrollo cliente-servidor para empresas de videojuegos. Como desarrollador/arquitecto de servidores, trabajó con éxito en las arquitecturas de servidores de muchos juegos (Dofus Arena, Drakerz, Trivial Pursuit Go!).