Essa semana tive que dar uma revisada no comando changecompany, que faz a mudança da “empresa” atual para qualquer outra registrada no ax, precisava dar suporte a alguns desenvolvedores que trabalham comigo e resolvi escrever a respeito.
O comando básico é:
1 2 3 4 5 6 | //Atualmente estamos na empresa DAT changeCompany("DA2") { //Agora estamos na empresa DA2 } //Aqui voltamos para a empresa DAT |
Em um cenário comum, imagine que temos as empresas DAT (default), DA2 (empresa 2) e DA3 (empresa 3), e queremos listar todos os clientes cadastrados nas 3 empresas, logo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | static void job1(Args _args) { CustTable ctDAT, ctDA2, ctDA3; ; //Estamos na empresa DAT while select ctDAT { print ctDAT.Name; } changeCompany("DA2") { while select ctDA2 { print ctDA2.Name; } } changeCompany("DA3") { while select ctDA3 { print ctDA3.Name; } } } |
Dessa forma temos primeiro os nomes dos clientes da DAT impressos, seguido pelos nomes da DA2 e por fim os nomes da DA3.
Você também pode fazer inserts usando os dados de outras empresas e etc, basta usar esse mesmo modelo e pronto, sem problemas.
Caso queira pegas os dados de todas as empresas, você pode fazer um select na tabela do sistema DataArea, pegar os ids e rodar o changecompany como exibido acima. Já o AX 2009 implementa o crossCompany, que é muito mais fácil.
[]s
Pichler
One Response
Renato Honório
14|Sep|2009 1Fala velho, só fica esperto com o seguinte, se você utilizar o mesmo tablebuffer para os selects, o ax vai se perder e vai falhar em algum changecompany, para isso o que fiz foi buffer = null; entre os chagecompany.
Abraços,
Honório
Leave a reply