Tipos de dados e campos
Como criar filtros mais complexos para consultar dados das entidades usando a classe Filter do Telescope?
ADSRT.FAQ-2738
Para montar queries com filtros devem ser montados conforme regras específicas, deve utilizar a classe Filter. Veja o exemplo a seguir:
EntPedidos pedido = new EntPedidos(ctx);
EntPessoas cliente = pedido.joinCliente();
// Define o filtro para a entidade pedido
br.com.telescope.sql.Filter filtro = new br.com.telescope.sql.Filter();
// Se tem percentual no parâmetro, define a query com a claúsula LIKE, senão com EQUAL ( = )
if ([parametro].indexOf("%") >= 0) {
filtro.like(cliente.getNome(), [parametro]);
} else {
filtro.equal(cliente.getNome(), [parametro]);
}
// Se precisa incluir uma restrição com OR, criar os filtros específicos e usa o método "filtro.or( ... )"
br.com.telescope.sql.Filter filtroData = new br.com.telescope.sql.Filter();
filtroData.equal(texto.getDataEntrega(), [hoje]);
br.com.telescope.sql.Filter filtroNull = new br.com.telescope.sql.Filter();
filtroNull.isNull(texto.getDataEntrega());
filtro.or(filtroNull, filtroData...);
pedido.filterBy(filtro);
pedido.findAll();
while (pedido.next()) {
System.out.println("Pedido: " + pedido.valueOfNumero());
System.out.println("Fornecedor: " + fornecedor.valueOfNome());
System.out.println("Cliente: " + cliente.valueOfNome());
System.out.println("Cidade (do cliente): " + cidade.valueOfNome());
}
// --> exemplo de filtro usando a cláusula ".in(...)"
/**
neste exemplo foi utilizado um array de objetos....
....
docpess.filterBy()
.in(docpess.getTipoDocumentoId(), new Object[] {888 ,999})
.equal(docpess.getDocumento(), valorDoc)