Arquivos Compartilhados - Shared Files
Recurso para disponibilização de arquivos/documentos de forma pública.
Ativação do recurso
Para habilitar o recurso deve-se ter o seguinte entry point ativo:
INSERT INTO nfs_homol_transpotech_smartos.nfs_entry_point (FILE_OR_DOMAIN, `ACTION`, XMOVA_INSTALLCODE, XMOVA_INSTALLCODE_VERSION, EMPRESA, FILIAL, `LOCAL`, TABELA, ENTRY_NUM, CODE, VERSION, BUILD, ATIVO, CODETYPE, FIELD, DESCRIPTION, INS_DH, UPD_DH, NFS_USER, DB_USER) VALUES('CONFIG', 'SHARED_FILES', NULL, NULL, 9999, 9999, 9999, 'FUNCIONARIO', NULL, '{
"doc_table":"DOC_FUNCIONARIO",
"doc_type_table":"DOC_TIPO",
"doc_relationship_field": "FUNCIONARIO_SEQ_DB",
"doc_field": "ARQUIVO",
"title": "Documentos",
"subtitle": "Download de arquivos",
"logo": "LOGO_EMPRESA_HEADER",
"columns": {
"name": "enable",
"type": "enable",
"validity": "enable"
}
}', 1, 6, 1, 'JSON', NULL, NULL, '2019-11-22 11:08:25', '2025-03-11 14:30:50', NULL, 'nfs.fabio@189.127.15.246');
O campo CODE
é onde setamos a configuração, é um JSON.
{
"doc_table":"DOC_FUNCIONARIO",
"doc_type_table":"DOC_TIPO",
"doc_relationship_field": "FUNCIONARIO_SEQ_DB",
"doc_field": "ARQUIVO",
"title": "Documentos",
"subtitle": "Download de arquivos",
"logo": "LOGO_EMPRESA_HEADER",
"columns": {
"name": "enable",
"type": "enable",
"validity": "enable"
}
}
doc_table ➡️ Tabela dos documentos.
doc_type_table ➡️ Tabela que classifica o tipo do documento.
doc_relationship_field ➡️ Campo que representa o relacionamento com a entidade.
doc_field ➡️ Campo que guarda a url do documento.
title ➡️ Título que é apresentado no topo da tela de acesso aos documentos.
subtitle ➡️ Subtítulo, aparece abaixo do título.
logo ➡️ Deixar "LOGO_EMPRESA_HEADER" para usar o logo configurado para o cabeçalho.
columns ➡️ Ativa/desativa exibição de colunas.

--
A tabela FUNCIONARIO
que é a entidade que agrupa os documentos recebe um novo campo, para armazenar a chave única que será a forma de identificação do funcionário, no caso.
O campo será o SHARED_FILES_KEY
.
Exemplo:
insert
into
nfs_homol_transpotech_smartos.nfs_core_ds_tabela_campo (TABELA_NOME,
NOME,
SEQ,
SYS,
SEND_XMOVA,
GRID,
GRID_MOBILE,
DESCRICAO,
DESCRICAO_RESUMIDA,
TIPO,
OBRIGATORIO,
TAMANHO,
TAMANHO_DECIMAL,
MASCARA,
INSERT_UPDATE,
DISABLED,
HINT,
LINK,
VALIDACAO,
OPCOES,
VALOR_DEFAULT,
VALIDACAO_VIEW,
FILTRO_VIEW,
TOOLTIP_MESSAGE,
PROPERTIES,
CONFIG)
values('FUNCIONARIO',
'SHARED_FILES_KEY',
null,
0,
1,
3,
1,
'Chave para acesso a documentos',
'Key',
'TXT',
0,
50,
null,
null,
'IU',
'1',
'',
null,
'UNQ',
null,
null,
null,
null,
null,
null,
null);
Na criação de um novo funcionário essa chave será gerada automaticamente, também será exibido um botão para gerar uma nova chave para o funcionário, e um botão que leva para a tela de documentos compartilhados no formulário do usuário.

Na implantação do recurso em uma base de dados com registros já existentes pode-se usar o seguinte modelo de script para fazer a geração manualmente. Ele vai gerar a chave para todos registros que não tem a chave (null), ou os que tem uma chave inválida (vazio).
UPDATE app_funcionario
SET SHARED_FILES_KEY = LOWER(HEX(RANDOM_BYTES(16)))
WHERE SHARED_FILES_KEY IS NULL OR SHARED_FILES_KEY = '';
--
O recurso utiliza o armazenamento no S3, então para o correto funcionamento o campo que guarda a URL do documento precisa ser do tipo FILE
.
Utils
Para a geração dessa key também pode ser usado o método Utils::generateSharedFileKey()
.
Ele vai gerar uma chave única no mesmo padrão das que são geradas automaticamente.
URL Example
https://<domain>/shared/<entity_table>/<SHARED_FILES_KEY>
https://transpotech.h.simova.cloud/shared/FUNCIONARIO/6e829564e20c5cfa9c67f36912a9ec89
A partir dessa chave o usuário é localizado e tem seus documentos listados para download.
Cliente
O recurso foi desenvolvido e implementado usando o cliente TranspoTech
.
transpotech.h.simova.cloud
.