Sempre vejo na internet um monte de informações erradas quando o assunto é o cache do Dynamics AX. O AX 4.0 apenas faz o cache se você fizer a pesquisa usando os valores dos índices. Veremos exemplos abaixo, tenha em mente que o índice da tabela CustTable é o campo AccountNum.
Exemplo 1: Colocaremos um registro no cache. No exemplo seguinte iremos ler os dados que estão no cache, já nos exemplos 3 e 4, isto não acontecerá.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | static void cachingTest(Args _args) { CustTable custTable; CustTrans custTrans; //example 1* select custTable where custTable.AccountNum == "4001"; info(strfmt("%1",custTable.wasCached())); //not cached //example 2 select custTable where custTable.AccountNum == "4001"; info(strfmt("%1",custTable.wasCached())); //cached //example 3 select custTable where custTable.AccountNum == "4001" && custTable.Name == "The Glass Bulb"; info(strfmt("%1",custTable.wasCached())); //not cached //example 4 select custTable where custTable.AccountNum == "4001" join custTrans where custTable.AccountNum == custTrans.AccountNum; info(strfmt("%1",custTable.wasCached())); //not cached } |
* Nos casos onde os registros já estavam no cache da AOS, o status é SvrRecordCached.
Já no AX 2009 o mecanismo do cache foi melhorado! Qualquer índice pode ser usada para otimizar o cache. Então, vamos repetir o teste no AX2009. Nos exemplos seguintes, nós buscaremos duas vezes pelo mesmo registro. A primeira vez nós usaremos o índice PartyID que colocará o registro no cache, na segunda vez nós vamos procurar pelo índice AccountNum e encontraremos o registro já no cache.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | static void cachingTest(Args _args) { CustTable custTable; CustTrans custTrans; //example 1* select custTable where custTable. PartyId== "215"; //PartyID também é um índice info(strfmt("%1",custTable.wasCached())); //not cached //example 2 select custTable where custTable.AccountNum == "4001"; //same record like partyID == “215” info(strfmt("%1",custTable.wasCached())); //cached //example 3 select custTable where custTable.AccountNum == "4001" && custTable.Name == "The Glass Bulb"; info(strfmt("%1",custTable.wasCached())); //not cached //example 4 select custTable where custTable.AccountNum == "4001" join custTrans where custTable.AccountNum == custTrans.AccountNum; info(strfmt("%1",custTable.wasCached())); //not cached } |
Leave a reply