Quando trabalhamos com métodos display, se colocarmos um breakpoint no método poderemos ver que o método é chamado muitas vezes, ainda mais se for exbido em uma grid. Isso faz com que a performance caia drasticamente, é ai onde o método cacheAddMethod é extremamente útil.

Quando usamos o método cacheAddMethod nós colocamos o método na memória, e a diferença é que o método roda apenas quando o formulário é carregado ou quando navegamos entre os registros.

Para o método cacheAddMethod fazer o que é proposto, nós temos que colocá-lo no início do formulário, para ser mais exato, devemos colocá-lo no método init() do DS (DataSource) em questão.

Um exemplo disso está no formulário SalesTable, DS SalesLine, método init():

1
2
3
4
5
6
7
8
9
10
11
public void init()
{
    super();
 
    salesLine_ds.cacheAddMethod(tablemethodstr(SalesLine, invoicedInTotal));
    salesLine_ds.cacheAddMethod(tablemethodstr(SalesLine, deliveredInTotal));
    salesLine_ds.cacheAddMethod(tablemethodstr(SalesLine, pickedInTotalSalesUnit));
    salesLine_ds.cacheAddMethod(tablemethodstr(SalesLine, reservedPhysicalInSalesUnit));
    salesLine_ds.cacheAddMethod(tablemethodstr(SalesLine, reservedOnOrderInSalesUnit));
    salesLine_ds.cacheAddMethod(tablemethodstr(SalesLine, onOrderInSalesUnit));
}

Com isso o formulário roda muito mais rápido, mas tem alguns efeitos colaterais que você precisa saber. Imagine que esse método display deverá se atualizar caso algo aconteça no seu formulário, como por exemplo um checkbox foi marcado e isso deverá fazer o método mudar seu comportamente. O problema é que você já fez o cache do método no método init(), ou seja, antes de qualquer ação do usuário interagir com o formulário, mas agora, você precisa que após essa interação, o cache seja refeito e para isso, vamos usar o método cacheAddMethod novamente só que ele será chamado do método modified como podemos ver abaixo:

1
2
3
4
5
6
7
public void modified()
{
    ;
    super();
 
    SalesTable_ds.cacheCalculateMethod(tablemethodstr(SalesTable, OurTestMethod));
}

Nós simplesmente adicionamos um modificador ao campo que irá refazer o cache novamente a cada vez que o valor do nosso campo for alterado.

[]s
Pichler