Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Excel Com Execução em Background

Devido a configurações para melhor desempenho do sistema não recomendamos a gerar um excel que com muitos dados diretamente no navegador, se passou de 2 minutos já é muito tempo para um processo do sistema ficar exclusivo para isso. Também se leva em conta que o cliente pode tentar gerar o mesmo relatório várias vezes.

Dependendo do tempo parar gerar o relatório também não conseguimos dar esse responsabilidade para o Scheduler, porque vai gerar um timeout, porque o se aumentar o timeout dele pode ser que fique muito tempo preso numa mesma fila.

Para solucionar esse problemas estamos utilizando uma aplicação de código aberto chamada de Async Jobs, nele enviamos o relatório para que seja gerado em background.

nfs_excel_bg.png

Acima é representando o fluxo dos dados, que são:

  • É feita a ação de gerar o relatório
  • Dados do relatório são enviados para o Async Jobs e é mostrado um LINK para acessar a tela de Download
  • Após dois minutos depois do envio, é iniciado o processo do relatório
  • E criado um novo registro dizendo que a geração do relatório está em progresso
  • Ao finalizar a tela de Download atualizada e o arquvo é salvo no AWS S3 onde fica disponível para download

Configuração no relatório

No relatório Excel na coluna EXPORT_OPTIONS é necessário adiconar mais uma chave e valor, que é "background":true".

Ex.:

{
	"excel": {
		"template":  ""
	},
	"background":true
}

Create Table

Também é bom verificar se existe a tabela nfs_reports_background, caso não, executar o create table abaixo:

CREATE TABLE `nfs_reports_background` (
  `SEQ_DB` bigint NOT NULL AUTO_INCREMENT,
  `EMPRESA` int DEFAULT NULL,
  `FILIAL` int DEFAULT NULL,
  `LOCAL` int DEFAULT NULL,
  `REPORT_NAME` varchar(200) NOT NULL,
  `FILE_NAME` varchar(300) NOT NULL,
  `INS_DH` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `UPD_DH` timestamp null ON UPDATE CURRENT_TIMESTAMP,
  `USUARIO_SEQ_DB` bigint,
  `PROGRESS_STATUS` tinyint default 0,
  PRIMARY KEY (`SEQ_DB`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;