Os comandos de bases de dados não ORDA davam-lhe a possibilidade de colocar imagens e blobs fora do seu arquivo de dados graças ao comando SET EXTERNAL DATA PATH. Este comando não está adaptado ao ORDA e, como tal, decidimos acrescentar uma funcionalidade semelhante na v20 R3: A possibilidade de atribuir a um blob ou a um atributo de imagem um caminho que aponta para um arquivo. Vou falar mais sobre isso.
Antes de mais, vejamos este pedaço de código:
$myRecord:=ds.MyTable.new()
$myRecord.image:="C:/FolderWithMyFiles/myImage"
$myRecord.binary:="C:/FolderWithMyFiles/myBinary"
$myRecord.save()
Os atributos image e binary são, respectivamente, um atributo picture e um atributo blob. Ao atribuir um caminho a eles em vez de uma imagem ou blob real, 4D só vai colocar dentro do arquivo de dados o caminho fornecido. Só quando usar a imagem ou o blob é que 4D vai carregar o arquivo do disco e criar uma imagem apropriada ou uma variável blob. Para você, será completamente transparente.
Vantagens e precauções
Essa maneira de fazer tem algumas vantagens:
– Não armazena arquivos binários dentro de seu arquivo de dados. Como consequência, o arquivo de dados fica mais pequeno e mais rápido de manter.
– Pode utilizar o mesmo arquivo para vários registos sem duplicar o conteúdo do arquivo.
– Pode organizar os arquivos da maneira que quiser e até mesmo usá-los com software fora de 4D.
Mas também há algumas precauções que precisa tomar:
– Como 4D precisa do arquivo no disco, deve ter certeza que ele fica acessível sempre que 4D o acessa.
– Quando atribuir um caminho a uma figura ou blob, ele contorna a propriedade do campo “Stored” na estrutura do banco de dados (a propriedade “Stored” permite escolher onde armazenar o conteúdo da figura ou blob entre o arquivo de dados ou um arquivo de dados externo).
Caminho POSIX ou 4D.File
O primeiro pedaço de código atribui um caminho POSIX ao atributo (apenas caminhos POSIX são aceites). Outra solução é atribuir um 4D.File como neste exemplo:
$file:=File("/PACKAGE/FolderWithMyFiles/myImage")
$myRecord:=ds.MyTable.new()
$myRecord.image:=$file
$myRecord.save()
Este código atribuirá o caminho do arquivo 4D.File ao atributo.
E se mudar o arquivo no disco?
Bem, essa é uma questão complicada. Como 4D armazena o conteúdo de blobs e imagens dentro de seu cache, pode muito bem não acontecer nada até que feche e reabra sua aplicação. Se realmente quiser ser capaz de mudar o arquivo durante a execução, há um truque que pode usar: Atribua o caminho para o atributo mais uma vez. Como 4D detectará um novo valor, limpará seu cache e assim obterá o novo arquivo na próxima vez que usar a imagem ou blob.
Nota: Se acessar a imagem ou blob através de um navegador, por exemplo com Qodly ou o explorador de dados, lembre-se também de limpar o cache do navegador.
Utilize o fórum se tiver alguma dúvida
Pode consultar a documentação para saber como utilizar esta nova funcionalidade. E se tiver alguma questão ou comentário, não hesite em contactar o nosso fórum. Teremos todo o prazer em ajudá-lo.