Vincular arquivos a cadastros

A vinculação de arquivos a cadastros é útil para associar quaisquer arquivos de nosso sistema de arquivos virtual (VFS) ou da LobStorage a um determinado cadastro do sistema. Arquivos armazenados no sistema de arquivos virtual tem como característica ser de acesso publico, já arquivos armazenados na LobStorage são de acesso privado.

Configurando o ambiente para a importação

Para realizar a configuração do ambiente de forma a possibilitar a importação, é necessário seguir os seguintes passos:

Deve ser criado o diretório de vínculo. Este diretório será utilizado para receber o arquivo x-model onde serão definidas algumas propriedades relativas à importação e é também onde será definido o campo de chave estrangeira que será a base do relacionamento com o cadastro. Este diretório deverá ficar em /Dados/Sistema/Relações/Relações entre Cadastros/Relações entre Cadastros e Arquivos. Caso os arquivos sejam de imagem, o diretório deverá ficar em /Dados/Sistema/Relações/Relações entre Cadastros/Relações entre Cadastros e Arquivos/Relações entre cadastros e imagens.

Agora que criamos o diretório de vínculo, devemos criar o arquivo do tipo x-model. Este arquivo precisa ter, necessariamente, as propriedades a seguir:

  • this.linkedTableName: deve conter o nome da tabela de cadastro que ficará vinculada aos arquivos importados. Exemplo:

    this.linkedTableName = 'iGroupUser';
    
  • this.linkFieldName: o nome do campo, na tabela de vínculo, que será utilizado como chave estrangeira para a tabela de cadastro. Este é o campo base do relacionamento entre cada registro de vínculo e o respectivo registro associado na tabela de cadastro. Exemplo:

    this.linkFieldName = 'iGroupUser';
    
  • this.formatFileName: uma lista com os nomes dos campos-chaves de pesquisa. Cada arquivo importado deverá conter, em seu nome, chaves de pesquisa que serão utilizadas na busca e vinculação do arquivo importado. A importação ocorrerá para cada arquivo que tiver, em seu nome, uma chave de pesquisa correspondente a um registro da tabela de cadastro. Assim, por exemplo, para um this.formatFileName.push('iName'), os arquivos importados serão aqueles que contiverem em seu nome um valor correspondente na coluna iName da tabela de cadastro. Veja o manual Importação de documentos ou imagens para mais detalhes do seu uso.

  • this.storageKind: indica o tipo de armazenamento de arquivos. Para arquivos públicos deve ser informado “vfs” e para arquivos privados deve ser informado “lob”. Exemplo:

    this.storageKind = 'vfs';
    
  • this.storageClassKey: para arquivos públicos deve ser informada a chave do diretório onde ficarão armazenados os arquivos no sistema de arquivos virtuais, ou seja, na tabela iVfs. Para a importação de imagens, é recomendado que o diretório seja filho de /Dados/Arquivos/Imagens. Já para arquivos privados deve ser informado a chave de uma classe filha de /Dados/Sistema/Large Objects. Exemplo:

    this.storageClassKey = -1892603144; // de Usuários
    
  • this.accept (opcional): indica o tipo dos arquivos aceitos na operação de upload. Mais detalhes em 'UploadOptions.prototype.accept'. Exemplo:

    this.accept = 'image/*'; // Somente imagens serão importadas
    
  • this.maxFiles (opcional): define a quantidade máxima de arquivos que podem ser recebidos. Por padrão, será imposto o limite de 50 arquivos vinculados ao cadastro. Exemplo:

    this.maxFiles = 50;
    
  • this.maxFileSize (opcional): define o tamanho máximo do arquivo a ser importado em bytes. Por padrão, será imposto o limite de 10Mb. Exemplo:

    this.maxFileSize = 10 * Math.pow(1024, 2); // 10MB
    
  • this.maxTotalSize (opcional): define o tamanho máximo em bytes disponível para armazenamento de todos os arquivos vinculados ao cadastro. Por padrão, será imposto o limite de 100Mb. Exemplo:

    this.maxTotalSize = 100 * Math.pow(1024, 2); // 10MB
    

Ainda neste arquivo do tipo x-model, outra necessidade é a própria definição do campo citado em linkFieldName. Exemplo da definição do campo iGroupUser na tabela iDataRel, campo este utilizado para a vinculação de imagens ao cadastro de usuários do Sistema:

var fld = this.field('iGroupUser', 'int64');
fld.label = 'Usuário';
fld.required = true;
fld.classKey = -1898187809 /* Usuários */;
fld.lookupType = LookupType.RECORD;
fld.help = 'Campo que armazena a chave do usuário associado à imagem.';

Configurando atributos para o arquivo

No arquivo x-model da vinculação de arquivos a cadastros poderão ser criados campos dinâmicos, que representam os atributos do arquivo. Esses atributos serão gravados como atributos extras do arquivo, podendo ser recuperado através do método 'FileStorage.prototype.getExtraFileAttributes'. Exemplo:

var fld = this.fileAttribute('size', 'int64');
fld.label = 'Tamanho';
fld.classKey = -1898141855; /* Tamanho */
fld.required = true;
fld.help = 'Atributo tamanho da imagem.';

Atenção: eventos não podem ser definidos para esses campos.