13 Apr 2009
Posted by: Ricardo Pichler in: X++
No Dynamics AX 4.0 é possível passar uma série de comandos no startup do client. Um desses comandos inicializa o processamento em lotes (batch) de um determinado grupo de lotes previamente configurado (básico -> configuração -> lotes -> Grupo de lotes):
Exemplo de um comando interpretado pelo client do AX: Iniciar -> executar -> ax32 -startupcmd=batch_GRUPO.
QUem vai lidar com esse comando é a class SysStartupCmd. O método construct é chamado e recebe a instrução depois de “-startupcmd=” retornando a classe especialista, no caso a SysStartupCmdBatchRun. Essa classe deveria passar para o processo (batchrun) em lotes o nome GRUPO (que é o group id que passamos. A classe também faz o parse do que vem depois do “_”).
Porém nos testes que realizei esse comando nunca funcionou. Eis o que descobri:
Função InfoRun() da class SysStartupCmdBatchRun:
1 2 3 4 5 6 7 | void infoRun() { BatchRun batchRun = new BatchRun(); ; batchRun.parmUseForm(true); batchRun.run(); } |
O grupo de lotes (groupId) nunca foi passado para o objeto, então o correto seria:
1 2 3 4 5 6 7 8 9 10 11 | void infoRun() { BatchRun batchRun = new BatchRun(); ; // if(parm) batchRun.parmGroupId(parm); // batchRun.parmUseForm(true); batchRun.run(); } |
Depois dessa correção o processo em lotes funcionou corretamente. Por favor testem sem a correção e depois com essa correção e postem aqui comentários se funcionou ou não!
UPDATE: Acabei de procurar na NET uma solução para deixar o Dynamics AX rodando batchs via windows service e achei o post do AxaptaBuilder explicando que realmente temos que corrigir a classe em questão.
Vale a pena ler o conteúdo do post do AxaptaBuilder já que ali está tudo bem detalhado. O crédito fica para nosso amigo Yurii Rasskazov!
Abraços e até a próxima
Leave a reply