01. DADOS GERAIS
Produto: | Gestão Jurídica by Legal Desk | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Linha de Produto: | Linha Protheus | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Segmento: | Jurídico | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Módulo: | Departamentos - Departamentos (SIGAJURI) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Função: |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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.
- A chave é composta por:
- Exemplo:
- Para preencher o campo de Tipo de envolvimento com o Mingle ativo o sistema irá preencher a chave da seguinte forma:
Host EndpointClass URI QueryParams ValorFiltrado URL do Mingle FWModel JURA009 FirstLevel: False
EmptyField: True
VirtualField: True
""
- Quando o usuário digitar "Aut" a chave ficará da seguinte forma:
Host EndpointClass URI QueryParams ValorFiltrado URL do Mingle FWModel JURA009 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:
Host EndpointClass URI QueryParams ValorFiltrado URL do Mingle FWModel JURA009 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 preencher o campo de Tipo de envolvimento com o Mingle ativo o sistema irá preencher a chave da seguinte forma:
- O sistema irá guardar a resposta da requisição no LocalStorage obedecendo o tempo desde a execução.
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:
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.
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:
Rotina | Tipo de Cache aplicado |
---|---|
Consulta de Filial | Cache diário |
Tipo de Envolvimento | Cache diário |
Alteração de Processo Consultivo | Cache temporário |
Resumo do Processo Consultivo | Cache temporário |
Alteração de Contrato | Cache temporário |
Resumo de Contrato | Cache temporário |
Consulta de Processo Contencioso | Cache temporário |
Alteração de Processo Contencioso | Cache temporário |
Encerramento de processo | Cache temporário |
E-Social | Cache temporário |
Listagem de Tipo de Assunto Jurídico | Cache diário |
Status de Follow-up | Cache temporário |
Breadcrumb - Busca de processo | Cache temporário |
Relacionamento | Cache temporário |
Tipo de Follow-up | Cache diário |
Preposto do Follow-up | Cache diário |
04. DEMAIS INFORMAÇÕES
Não há.
05. ASSUNTOS RELACIONADOS
- Não há.
- documento_tecnico
- bra
- ts-cacheable
- totvs_juridico_dept
- tjd
- squad_juridico_dept
- versao_12_1_33
- versao_12_1_27
- versao_12_1_25
- totvs_legal
- jura095
- jura106
- filial_tjd
- temp_cache
- daily_cache
- etypecache
- alt-lote_service
- fwmodel-adaptor_service
- fwmodel_service
- http-juri_service
- instancia_service
- jurconsultas_service
- jurcontencioso_service
- jurcontratos_service
- jurrestricoes_service
- jursocietario_service
- legalprocess-adapter_service
- legalprocess_service
- legaltask_service
- notification_service
- protheus_service
- resumo-consultas_service
- jurdeeplegal_service
- resumo-nip_service
- jurnip_service
- e-social_service
- pedidos_service
- combos-fwmodel-adapter_service
- users_service
- relacionamentos_service
- widget-encerramento_service
- select-branch_service
- breadcrumb-info-process_service
- det-subsidios_service