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
)
}
Edit this page on GitHub