Vamos explorar como os novos métodos introduzidos na versão 25.6, TheApplication().GetDCache e TheApplication().PutDCache, junto com o Coherence Caching (Coherence Enterprise Caching), podem transformar a experiência dos seus usuários. Preparados?
Lentidão em relatórios com Campos Calculados
Imagine que você precisa carregar dados repetidamente, seja para exibir um relatório, preencher uma view ou atualizar um dashboard.
Esses dados podem vir de campos calculados complexos, consultas demoradas ao banco de dados ou até integrações externas.
O problema é que, toda vez que o sistema precisa desses dados, ele refaz todo o trabalho do zero, consumindo tempo e recursos.
Essa ineficiência gera telas lentas, usuários frustrados e, claro, aquela sensação de “por que isso demora tanto?”.

A Solução
Agora, a boa notícia: a partir da versão 25.6, a Oracle introduziu uma integração poderosa com o Coherence Caching, um sistema de cache distribuído que pode armazenar dados temporariamente para acessos rápidos. E, para tornar isso ainda mais fácil, temos dois novos métodos no objeto TheApplication(): GetDCache e PutDCache.
Esses métodos permitem que você salve resultados de cálculos ou consultas no cache e os recupere depois, sem precisar repetir o trabalho pesado.
A ideia é simples: em vez de recalcular ou buscar dados repetidamente, você invoca um serviço para armazenar o resultado no cache com PutDCache e, nas próximas vezes, pega esse valor direto com GetDCache.
A Estratégia de Duplicação BCs
Agora que entendemos o básico, vamos ao plano de ação detalhado. A estratégia que propomos aqui é criar uma abordagem de dois passos, usando dois Business Components: o original, onde os dados são processados inicialmente, e uma cópia, que acessa os dados já armazenados no cache. Vamos por partes:
1 – Manter o Business Component Original para Processamento Inicial:
- No BC original (como o “Period” do nosso exemplo da imagem), você mantém toda a lógica de processamento, sejam campos calculados, consultas ao banco ou integrações. Aqui, o trabalho pesado é feito, como o cálculo de campos ou a busca dados complexos em MVL, por exemplo.
2 – Criar um Business Component Cópia para Acesso ao Cache:
- Duplique o BC original (digamos, “Period Cached”) e configure os campos calculados para buscar os valores diretamente do cache usando um código customizado que tenta recuperar o valor do cache. Veja o código do campo “TSIT Faturamento Projetado”:
- IfNull(InvokeServiceMethod(“TSIT Reports”, “GetCacheData”, ” ‘Key2’=’TSIT Faturamento Projetado’, ‘Key1’=’eval([Id])’, ‘Key0’=’P1’ “,”Result”), -1)
- Aqui,
P1é um identificador de contexto,eval([Id])é a chave única do registro, eTSIT Despesas Totaisé o tipo de dado armazenado. OResulté o resultado do seu processamento.
- Esse BC cópia será usado nas views, relatórios ou qualquer ponto que precise de performance, já que acessar o cache é muito mais rápido que reprocessar os dados.
- Duplique o BC original (digamos, “Period Cached”) e configure os campos calculados para buscar os valores diretamente do cache usando um código customizado que tenta recuperar o valor do cache. Veja o código do campo “TSIT Faturamento Projetado”:
3 – Integrar Siebel com a solução de Cache
- O Coherence Caching, como descrito na documentação da Oracle, é um sistema distribuído que armazena dados em cache, garantindo acesso rápido e escalabilidade. Ele funciona como um “banco de dados temporário” super-rápido.
- Para configurar, você precisa habilitar a solução de cache no seu ambiente Siebel CRM (conforme o guia Siebel CRM and Coherence Enterprise Caching). Depois, os métodos
GetDCacheePutDCachese comunicam automaticamente com o cache, sem que você precise mexer na infraestrutura.
- Use chaves únicas para cada dado no cache, combinando identificadores como
[Id]do registro e um contexto fixo (comoP1para um relatório específico). Isso evita conflitos e facilita a recuperação. - Quando os dados no BC original mudarem ou quando você quiser, atualize o cache com um novo
PutDCachepara garantir que os valores no BC cópia estejam sempre corretos.
- Use chaves únicas para cada dado no cache, combinando identificadores como
Veja um exemplo de eScript do Siebel:
function GetDCache(Inputs, Outputs)
{
try
{
var vKey0 = Inputs.GetProperty('Key0');
var vKey1 = Inputs.GetProperty('Key1');
var vKey2 = Inputs.GetProperty('Key2');
var vKey = vKey0 + '|' + vKey1 + '|' + vKey2;
var vKeyNew = '';
var vCacheFields = '';
var vArrTemp = '';
var vResult = '';
var vTemp = '';
var vBO = '';
var vBC = '';
if (vKey0.length>0 && vKey1.length>0 && vKey2.length>0) {
vResult = TheApplication().GetDCache(vKey); //Recupera do Cache se exitir
}
if (vResult.length <= 0) { //Se não existir, carrega o cache com os dados da origem
if (vKey0 == 'P1') {
vBO = TheApplication().GetBusObject('Period');
vBC = vBO.GetBusComp('Period');
vCacheFields = 'TSIT Despesas Totais,TSIT Faturamento Projetado,TSIT JulianMonth,...'; //Todos os campos calculados
}
with (vBC)
{
vArrTemp = vCacheFields.split(",");
for(i=0; i < vArrTemp.length; i++)
{
ActivateField(vArrTemp[i]);
}
SetViewMode(AllView);
ClearToQuery();
ExecuteQuery(ForwardOnly);
var isRecord = FirstRecord();
while(isRecord)
{
for(var i=0; i < vArrTemp.length; i++)
{
vKeyNew = vKey0 + '|' + GetFieldValue('Id') + '|' + vArrTemp[i] ;
vTemp = GetFieldValue(vArrTemp[i]);
TheApplication().PutDCache(vKeyNew, vTemp);
if (vKeyNew == vKey)
vResult = vTemp;
}
isRecord = NextRecord();
}
}
}
}
catch(e)
{
Outputs.SetProperty('Result', '');
throw e;
}
finally
{
vBO = vBC = vArrTemp = null;
Outputs.SetProperty('Result',vResult);
}
}
Com essa abordagem, o processamento pesado só acontece uma vez (ou quando necessário), e os acessos subsequentes usam os dados do cache via Business Component cópia, tornando tudo muito mais rápido.
Nesse exemplo, o relatório que levava aproximadamente 20 segundos para carregar no Siebel, agora leva menos que 1 segundo ao acessar os dados co Coherence Caching.
Se o assunto “cache” no Siebel CRM te interessa, dê uma conferida no artigo Siebel CRM – Adequação dos Parâmetros de Cache do Configurador de Produtos.
Espero que seja útil.
