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 ) }