Frequentemente vejo as pessoas perguntando: Tenho o formulário A com um registro selecionado, quero que quando eu clicar no botão X, abra o formulário B, já com o registro filtrado (pertinente ao registro do formulário A). Talvez a pergunta tenha ficado confusa, mas vamos lá, talvez com o código fique mais claro, ou não.
Basicamente a operação consiste em sempre usar um MenuItem e preencher os argumentos do mesmo, seja via Properties ou então via linha de código.
Quando usamos via properties (não exisge código), basta que os relacionamentos estejam corretamente setados e que você informe na propriedade DataSource do botão (menuItem) o datasource que irá enviar junto com o clique, o resto, o próprio AX já irá fazer.
O pessoal do http://www.fourone.se/ escreveu um artigo e publicou um job que:
Primeiro ira exibir o formulário CustTable filtrado pelo registro de cliente código 4004 e quando este formulário for fechado, o formulário CustTrans será exibido mostrando dados sobre o cliente que vimos no form CustTable. Também é exibido como você também pode parar o código esperando que o formulário seja fechado ou então simplesmente dar um detach e continuar independente do que aconteça no formulário.
Abaixo o código com alguns comentários:
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 27 28 29 30 31 32 33 34 35 36 37 | static void FO_OpenFilteredForms(Args _args) { Args argsCust, argsTrans; FormRun formRun, formRun2; //Aqui é feita a seleção do cliente código 4004 e atribuído a variável custTable CustTable custTable = CustTable::find("4004"); ; //Aqui é passado o nome do formulário que será aberto, no caso, CustTable argsCust = new Args(formStr(CustTable)); //Aqui é passado o registro previamente selecionado, no caso, o cliente código 4004 argsCust.record(custTable); formRun = classFactory.formRunClass(argsCust); formRun.init(); formRun.run(); //Aqui é o comando onde a instrução de esperar pelo formulário é dada formRun.wait(); print "Isto será impresso quando " + "o formulário CustTable for fechado."; pause; //Aqui é passado o nome do formulário que será aberto, no caso, CustTrans argsTrans = new Args(formStr(CustTrans)); //Aqui é passado o registro previamente selecionado, no caso, o cliente código 4004 //Perceba que o registro é o mesmo, nada mudou, o que mudou foi o formulário argsTrans.record(custTable); formRun2 = classFactory.formRunClass(argsTrans); formRun2.init(); formRun2.run(); //Aqui é o comando onde a instrução de não esperar (detach) pelo formulário é dada formRun2.detach(); print "Isto será impresso quando " + "o formulário CustTrans for aberto."; pause; } |
[]s
Pichler
Leave a reply