Looplex Knowledge Base
Cache
O tube cache serve para armazenar dados visando o seu acesso mais rápido na plataforma.
Formato:
cache(<cacheConfig>, <dataReceiver>, <dataOrigin>)<dataReceiver>.cache(<cacheConfig>, <dataOrigin>)Parâmetros:
- cacheConfig: É a estrutura que armazena as configurações do tube cache. É sempre uma estrutura que deve contem fields:
[key] : String,[scope] : List,[secondsToExpire] : Integer,[cacheVoid] : Boolean. Veja abaixo:
struct[CacheConfig] { name = "CacheConfig" fields { +[key] : String { name = "key" default = "key1" }, +[scope] : List("operand", "template", "document") { name = "scope" default = "operand" atomic = true }, +[secondsToExpire] : Integer { name = "seconds" default = 300 }, +[cacheVoid] : Boolean { name = "cacheVoid" default = false } }}Onde:
[key]: é o identificador que será usado pelo tube cache para o conjunto de dados que foi salvo. Assim, a informação e suas versões (alterações) recebem um identificador diferente e isso impede que hajam informações duplicadas no cache;
[scope]: determina o escopo de acesso às informações armazenadas no cache. São três possibilidades: operand para determinar que o escopo é o operando (ou mesmo variável) e permitir o acesso global às informações salvas. Note que o operand faz com que as informações possam ser acessadas mesmo de outros templates, ou seja, é salvar dados que serão globais; template determinar que o escopo é o template, permitindo o acesso às informações por todos documentos gerados pelo template em que o tube é usado e document para determinar que o escopo é apenas no documento gerado;
[secondsToExpire]: configura o tempo que as informações serão armazenadas no cache. Como o nome sugere, só é possível usar segundos e o valor máximo aceiro é de ().
[cacheVoid]: configura se permissão ou não do tube cache armazenar o valor void, ou seja, vazio/nada.
Observação: O default é usado para definir o valor com o qual o field será iniciado.
dataReceiver: define onde essas informações serão salvas;
dataOrigin: define a origem dos dados que serão armazenados e é sempre uma operação, como um tube ou mesmo uma atribuição.
Retorno:
Retorna os dados armazenados no dataReceiver, identificados pela key selecionada.
Exemplo:
1. tube cache com APIGet: nesse exemplo usamos o cache para armazenar as informações recebidas pelo APIGet. No tube APIGet usamos um web service de CEP para obtermos os dados do endereço correspondente ao CEP informado.
Na estrutura <strEndereco> acrescentamos o field [cepSemTracos] para atruibuir o CEP informado pelo usuário, para isso usamos o tube isNotEmpty para verificar se o usuário já preenchou o field [cep] e não termos a execução de um tube sem valores preenchidos e o tube replace para substituir o traço por uma string vazia. Além disso, usamos o field [cepSemTracos] no endpoint do APIGet e como key no <cacheConfig>.
Para ter a lógica completa e operacional desse exemplo recomendamos que veja o template dessa lógica aqui.
declarations { -<cacheConfig> : Struct { name = "CacheConfig" fields { +[key] : String { name = "key" default = "key1" }, +[scope] : List("operand", "document", "template") { name = "scope" default = "operand" atomic = true }, +[secondsToExpire] : Integer { name = "seconds" default = 300 }, +[cacheVoid] : Boolean{ name = "cacheVoid" default = false } } }, +<strEndereco> : Struct { name = "Endereço" fields { +[cep] : String where ("\d\d\d\d\d-\d\d\d") { name = "CEP" }, +[logradouro] : String { name = "Logradouro" }, &[complemento] : String { name = "Complemento" }, &[bairro] : String { name = "Bairro" }, +[cidade] : String { name = "Cidade" }, -[uf] : String { name = "UF" }, -[cepSemTracos] : String } loaders { if ([cep].isNotEmpty()) { [cepSemTracos] = [cep], [cepSemTracos] = [cepSemTracos].replace("-", "") } } }}operations { <cacheConfig.key> = <strEndereco.cepSemTracos>, cache( <cacheConfig>, // cacheConfig <strEndereco>, // dataReceiver APIGet(<strEndereco>, null, "https://viacep.com.br/ws/" & <strEndereco.cepSemTracos> & "/json/", "localidade:cidade, complemento:null") // dataOrigin ) }