Administração do sistema
Modelo de rotinas custom pesadas para serem executadas com feedback
RT.FAQ-136921
Algumas vezes é necessário executar rotinas pesadas e consequentemente lentas para ajustar algum legado que podem levar muito tempo (até mesmo dias) para serem executadas. Nestes casos pode-se optar por algum artifício que "quebre" a quantidade de registros em vários lotes pequenos separados por um pequeno intervalo de tempo para não "derrubar" o servidor.
Veja o exemplo Groovy abaixo:
import br.com.eligo.ent.*;
import br.com.telescope.adsrt.lib.RecordNotFoundException;
import br.com.telescope.util.Db;
// pequena pausa
Thread.sleep(2000);
// Criar/consultar preferência que retorna a data de início
EntPreferencias pref = new EntPreferencias(ctx);
try {
pref.findByPreferencia("000_FIFO");
} catch (RecordNotFoundException ex) {
pref.setPreferencia("000_FIFO");
pref.setValor("2000-01-01");
pref.ins();
}
// Busca a próxima data a ser processada
Date d = Db.getFirst(Date.class,
"select min(data_movimento)"
+ " from movimentos_estoques"
+ " where data_movimento > '"
+ pref.valueOfValor() + "'", );
// Se não tem mais nada, terminou!
if (d == null) {
return;
}
// Processa o que tem para processar na data
int i = 0;
mov = new EntMovimentosEstoques(ctx);
mov.filterBy().equal(mov.getDataMovimento(), d);
while (mov.next()) {
mov.criarConsumosFifo();
i++;
}
// Informa o que foi feito
ctx.p(d.toString() + " - " + i + " consumos realizados!");
// Salva a preferência indicando a data do que já foi feito
pref.setValor(d.toString());
pref.upd();
// Repete a própria rotina (até não encontrar mais o que fazer)
// IMPORTANTE: TROCAR O ID ABAIXO PELO ID DESTA ROTINA CUSTOM
ctx.p("<" + "script>window.open('?Z_ACTION=EXECUTAR&A_ID=8428892','_self');<" + "/script>");
Atenção
Observar o ID da ultima linha do script que deve ser substituído pelo ID da respectiva rotina custom