Alterando a exibição de um campo lookup

Quando se tem uma classe que será exibida em uma grade lookup, o framework adota alguns campos como padrão e os exibe nesta grade. Mas nem sempre essa é a real necessidade do processo, pois algumas classes fogem desse padrão e acabam por ter uma grade pouco intuitiva ou de difícil interpretação.

X-FIND

Como você já imagina, teremos que criar um x-find para fazer com que a grade lookup saia do jeito que queremos, lembrando que o finder deve ser criado na mesma classe do lookup. Nesse registro temos disponível o método addResult que popula um DataSet que será usado para a grid lookup. Então imaginemos que eu tenho uma classe com 4 campos, são eles: iCode, iFirstName, iLastName e iAge. E agora imaginem também que eu tenho um cadastro e preciso que na grade lookup apareçam todos esses campos. Podemos começar criando o meu DataSet.

if (!this.ds) {
  this.ds = connection.cloneLocalCacheByClass(classKey, session.userKey);
  this.ds.indexFieldNames = 'iCode';
  this.ds.indexFieldNames = 'iFirstName';
}

Temos o nosso DataSet indexado por código e por primeiro nome, mas ainda não definimos o que vai ser exibido. Para fazer isso teremos que usar o método addResult. Lembrando que todas as funcionalidades disponíveis no x-find podem ser utilizadas, mas para esse manual se prenderá à concatenação dos conteúdos de todos os campos criados.

var showValue = '';

while (!this.ds.eof) {
  showValue = this.ds.str('iCode') + ' - ' + this.ds.str('iFirstName') + ' ' +
    this.ds.str('iLastName') + ', ' + this.ds.str('iAge');
  this.addResult(this.ds.num('iKey'), this.ds.num('iClass'), showValue);
  this.ds.next();
}

Com esse código feito e corretamente posicionado ele vai ser processado no momento da montagem da grid lookup lhe dando o resultado esperado.