Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

01. DADOS GERAIS

Produto:

Solucoes_totvs_parceiros
SolucaoParceirosGestão Jurídica by Legal Desk

Linha de Produto:

Linhas_totvs
LinhaLinha Protheus

Segmento:

Segmentos_totvs
SegmentoJurídico

Módulo:

Modulos_totvs_juridico
ModulosTOTVSJuridicoDepartamentos - Departamentos (SIGAJURI)

Função:



Fontes alterados

alt-lote.service.ts

home-societario.component.tsprocesso.component.tsjursocietario.service.tsselect-branch.component.html
alt-consulta.component.tsdet-nip.component.tscombos-fwmodel-adapter.service.tslegalprocess-adapter.service.tsselect-branch.component.ts
resumo-consultas.service.tsresumo-nip.service.tsfwmodel-adaptor.service.tslegalprocess.service.tsselect-branch.service.ts
alt-contrato.component.tsjurnip.service.tsfwmodel.service.tslegaltask.service.tsbreadcrumb-info-process.service.ts
home-contratos.component.tspesq-avancada.component.tshttp-juri.service.tsnotification.service.tsdet-subsidios.service.ts
contrato.component.tse-social.service.tsinstancia.service.tsprotheus.service.tsdet-tarefa-form.component.ts
jurdeeplegal.service.tsalt-processo.component.tsjurconsultas.service.tsusers.service.tsdet-tarefa.component.ts
distribuicao.component.tsdet-processo.component.htmljurcontencioso.service.tsrelacionamentos.service.tstarefas.component.ts
home.component.htmldet-processo.component.tsjurcontratos.service.tswidget-encerramento.component.tsenvironment-minglePROD.ts
home.component.tspedidos.service.tsjurrestricoes.service.tswidget-encerramento.service.tsenvironment.ts
.prettierignorepackage.json



País:Brasil
Ticket:
Requisito/Story/Issue (informe o requisito relacionado) :DJURDEP-10603


02. SITUAÇÃO/REQUISITO

Implementar uma solução de Cache nos combos e nas requisições mais utilizadas como Consulta de Filial, consulta de Resultados de Follow-up, Tipo de envolvimento e consulta de processos.

03. SOLUÇÃO

Implementada a biblioteca "ts-cacheable" para manter o cache das requisições no LocalStorage. Agora é possível definir quando fazemos as requisições se elas serão guardadas no Cache ou não. O Cacheable é utilizado somente para requisições GET, visto que as demais não necessitam guardar informações

Algumas regras foram criadas:

    • O sistema irá guardar a resposta da requisição no LocalStorage obedecendo o tempo desde a execução.
      • Atualmente existem 2 tempos de Cache: O Diário (DailyCache) que dura por 24 horas desde o tempo da execução e o Temporário (TempCache) que dura 30 minutos desde o tempo de execução.
    • Além do tempo, o Cache necessita que uma chave seja criada para reconhecer se o que já está no Cache é reutilizável de modo a evitar que seja feita a chamada para o BackEnd.
      • A chave é composta por:
        • Host: Host da requisição - Ex: /juri/ ou url do Mingle;
        • EndpointClass: Classe do Endpoint - Ex: FWMODEL ou JURLEGALPROCESS;
        • URI: URI do endpoint - Ex: JURA095 ou SearchProcess;
        • QueryParams: Parâmetros opcionais utilizados na requisição - Ex: FIRSTLEVEL ou EMPTYFIELD;
        • Valor Filtrado: Filtro informado nos Adapters para quando utilizamos o que o usuário digitou ou o ID que foi definido ao abrir a tela editando.
    • Exemplo: 
      • Para preencher o campo de Tipo de envolvimento com o Mingle ativo o sistema irá preencher a chave da seguinte forma:
        • HostEndpointClassURIQueryParamsValorFiltrado
          URL do MingleFWModelJURA009

          FirstLevel: False

          EmptyField: True

          VirtualField: True

          ""
      • Quando o usuário digitar "Aut" a chave ficará da seguinte forma:
        • HostEndpointClassURIQueryParamsValorFiltrado
          URL do MingleFWModelJURA009

          FirstLevel: False

          EmptyField: True

          VirtualField: True

          "Aut"
        • Com isso a chave será diferente, o que indica para o sistema que ele precisa realizar a chamada HTTP para o Protheus para buscar o novo response.
      • Se o usuário apagar o Aut a chave ficará da seguinte forma:
        • HostEndpointClassURIQueryParamsValorFiltrado
          URL do MingleFWModelJURA009

          FirstLevel: False

          EmptyField: True

          VirtualField: True

          ""
        • Com isso a chave ficará igual a que existe já em Cache. Se não passou o tempo de expiração do Cache o sistema irá reaproveitar o response antigo invés de refazer a consulta no Backend.

Para ativar o cache para uma determinada requisição é necessário informar na utilização do service que a requisição utilizará o Cacheable. Para isso é necessário definir qual o Tipo de Cache a ser utilizado conforme exemplo abaixo:

Bloco de código
languagejs
themeRDark
titleImplementação de chamada com Cacheable
async getDetailProcess(nCarregaLista: number = 0) {  
	this.fwmodel.restore();
	this.fwmodel.setChave(btoa(atob(this.filial) + this.cajuri))
	this.fwmodel.setModelo('JURA095');
	this.fwmodel.setFirstLevel(false);
	this.fwmodel.setCampoVirtual(true);
	this.fwmodel.setCacheType(ETypeCache.TEMP_CACHE) // Para o Cache temporário utilizar o ETypeCache.TEMP_CACHE. 
													 // Para o Cache Diário utilizar o ETypeCache.DAILY_CACHE
 	this.fwmodel.get('getDetailProcess').subscribe(data => {
		// Código
	}
}

Vale lembrar que o Cacheable previne a requisição de ser feita caso já tenha sido feita anteriormente, ou seja, se houver alguma alteração nos dados da requisição, por exemplo, a alteração da Área do Processo, o Cacheable não irá atualizar o cache sozinho. Para resolver isso, ao realizar qualquer atualização de dados que estão no Cache temos que excluir o cache da memória manualmente.

Para remover o Cache foi criada uma função que recebe os seguintes parâmetros:

    • TipoCache: Em qual Tipo de cache será realizada a busca
    • ListEndpoints: Array de String com os Endpoints a serem pesquisados. 
Bloco de código
languagejs
themeRDark
titleImplementação da remoção de Endpoint do Cache
submitDetalhes() {
	this.fwmodel.restore();
	this.fwmodel.setModelo('JURA095');
	this.fwmodel.put(this.pk, this.setBodyDetalhes(), 'Alteração da consulta').subscribe(
		data => {
			if (data.hasOwnProperty('models')) {
				this.poNotification.success(this.litAltConsulta.detalhes.successAlt);
				this.getDetailConsulta();
			}
		},
		error => {},
		()=>{
			// Irá remover do Cacheable o cache da JURA095 e da requisição tlprocess/detail que é utilizada no resumo do processo 
			HttpJuriService.removeFromCache(ETypeCache.TEMP_CACHE, ["JURA095/" + this.pk, 'tlprocess/detail/' + atob(this.filial) + '/' + this.cajuri])
			this.isLoadingDetalhes = false;
		}
	);
}

Rotinas que estão com Cache:

RotinaTipo de Cache aplicado
Consulta de FilialCache diário
Tipo de EnvolvimentoCache diário
Alteração de Processo ConsultivoCache temporário
Resumo do Processo ConsultivoCache temporário
Alteração de ContratoCache temporário
Resumo de ContratoCache temporário
Consulta de Processo ContenciosoCache temporário
Alteração de Processo ContenciosoCache temporário
Encerramento de processoCache temporário 
E-SocialCache temporário
Listagem de Tipo de Assunto JurídicoCache diário
Status de Follow-upCache temporário
Breadcrumb - Busca de processoCache temporário
RelacionamentoCache temporário
Tipo de Follow-upCache diário
Preposto do Follow-upCache diário

04. DEMAIS INFORMAÇÕES

Não há.

05. ASSUNTOS RELACIONADOS

  • Não há.



Templatedocumentos