Estava lendo um blog outro dia e vi novamente sobre usar um método Edit em um datasource para marcar ou não um registro em uma grid, sem ter a necessidade de alterar a tabela e criar um campo só para esta seleção.
No entanto, isso é um pouco chato na primeira vez que se vai fazer, por questões de escopo (acredito eu), no meu caso se complicou mais e tive que usar o modelo abaixo, já que queria preencher um MAP com os recids que estavam marcados.
A solução:
Form: É um formulário simples, onde eu listo os itens da InventTable.
No método classdeclaration:
1 2 3 4 | public class FormRun extends ObjectRun { Map myMap; } |
No DataSource InventTable eu criei o seguinte método:
1 2 3 4 5 6 7 8 | edit NoYes markInvent( boolean _set, InventTable _invent, NoYes _mark ) { return element.inventMark(_set, _invent, _mark); } |
De volta ao form, eu criei os outros dois métodos que me faltavam:
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 38 | public void initMyMap() { myMap = new Map(Types::Int64, Types::Int64); } edit NoYes inventMark( boolean _set, InventTable _invent, NoYes _mark ) { NoYes click; ; if(!myMap) element.initMyMap(); if (_set) { if (_mark) { myMap.insert(_invent.RecId,_invent.RecId); click = NoYes::Yes; } else { if (myMap.exists(_invent.RecId)) myMap.remove(_invent.RecId); click = NoYes::No; } } else click = myMap.exists(_invent.RecId); return click; } |
Explicação:
No class declaration eu declaro o meu map;
No DataSource eu crio o método e associo esse metodo a um checkbox que coloquei na minha grid;
Quando clico no checkbox, chamo o método markInvent e envio os parametros: set = true, _invent = registro atual, _mark = sim ou não;
O método markInvent por sua vez apenas chama o inventMark que irá fazer o processamento necessário e retornar um sim ou não;
Este último método apenas verifica qual o valor passado em mark, se sim, adiciona o valor ao map, se não remove o valor.
Obs.: O único motivo de eu chamar um método do formulário ao invés de executar tudo no primeiro edit é que se eu faço no datasource ele não atualizava meu MAP, eu acredito que por uma questão de escopo, mas não posso afirmar.
[]s
Pichler
Leave a reply