Siebel CRM e Coherence Caching – Dados como Commodity em 3 Passos

Coherence Cache
Vamos mergulhar em um caso de uso clássico no mundo do Siebel CRM: a lentidão no acesso a dados, seja por campos calculados, consultas pesadas ao banco de dados ou qualquer outra fonte que demande tempo de processamento.
 
Se você já se deparou com usuários esperando eternamente por uma tela ou relatório, sabe do que estou falando.Nessas situações, quando um dado precisa ser acessado várias vezes e o custo desse acesso é “caro” em termos de performance, o uso de cache surge como uma estratégia bastante interessante. Por isso estamos chamados esses dados de commodity.
 

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?”.

Relatórios Siebel CRM

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, e TSIT Despesas Totais é o tipo de dado armazenado. O Result é 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.

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 GetDCache e PutDCache se 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 (como P1 para 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 PutDCache para garantir que os valores no BC cópia estejam sempre corretos.

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. 

Coherence Cache

Compartilhe esse conteúdo com seus contatos