Prezados,
O filtro no zoom apenas funciona em datasets sincronizados?
Tenho um dataset que recebe um WHERE = X, com isso não consigo sincronizar.
Existe alguma forma de possuir dataset que possui constraint e consegue filtrar os resultados no zoom?
Zoom estrutura:
_mat = '1313'
reloadZoomFilterValues('Cc', 'MATRICULA,' + _mat)
Dataset::
if (constraints != null) {
for (var i = 0; i < constraints.length; i++) {
if (constraints[i].fieldName == "MATRICULA") {
C_MATRICULA = constraints[i].initialValue;
}
}
}
var myQuery = "SELECT CC FROM CENTRO_CUSTO("+C_MATRICULA+", 1, 0, 0)) ORDER BY DESCRI";
Quando executo o zoom, ele carrega os dados corretamente, porém quando vou usar o filtro não funciona.
Ex:
DADOS RETORNADOS:
1 - Unidade São Paulo
2 - Financeiro
3 - Matriz
Quando uso o zoom: ele carrega os três resultados, porém quando vou digitar no zoom a palavra: "Matriz" --> retorna os três resultados;
Se o dataset for sincronizado eu consigo efetuar o filtro no zoom em real time.
Não funciona no caso de um dataset customizadO. Eu preciso usar o filtro no zoom em real time…
@Luís,
Tem um exemplo aqui de como tratar os filtros do dataset customizado:
https://forum.totvs.io/t/como-colocar-parametros-no-dataset-customizado/11081
UPDATE
Você pode montar desa forma:
var sql = "SELECT matricula, ccusto, descricao FROM CENTRO_CUSTO WHERE 1=1 ";
newDataset.addColumn("matricula");
newDataset.addColumn("ccusto");
newDataset.addColumn("descricao");
if(constraints != null) {
if(constraints.length > 0) {
for (var i = 0; i < constraints.length; i++) {
// AQUI VOCÊ TRATA O FILTRO
if (constraints[i].fieldName == 'matricula') {
filtro += "AND matricula LIKE '%" + constraints[i].initialValue + "%' ";
}
if (constraints[i].fieldName == 'ccusto') {
filtro += "AND ccusto LIKE '%" + constraints[i].initialValue + "%' ";
}
if (constraints[i].fieldName == 'descricao') {
filtro += "AND descricao LIKE '%" + constraints[i].initialValue + "%' ";
}
}
filtro += "ORDER BY descricao ";
}
}
sql = sql + filtro;</code></pre>
Você quer buscar pela matrícula ou pela descrição? Pois parece que no seu código você está montando o select para buscar somente pela matrícula.
Adicionei um exemplo na minha resposta
Luis,
eu estava passando pelo mesmo problema. Vou explicar como eu resolvi.
Estava filtando meu zoomColecao com o seguinte código:
filtro = 'id_selo_editorial,' + selectedItem["id_selo_editorial"];
reloadZoomFilterValues("zoomColecao", filtro);
Mesmo aplicando meu reloadZoomFilterValues o meu customDataset não estava sendo filtrado. COmo ele foi criado através de uma query ao banco de dados, então eu preciso tratar o filtro dentro do do meu createDataSet customizado, com esse código resolvi meu problema:
if(constraints != null) {
//tratamento de filtros
if(constraints.length > 0) {
for (var i = 0; i < constraints.length; i++) {
if (constraints[i].fieldName == 'id_selo_editorial') {
filtro = "and id_selo_editorial="+constraints[i].initialValue;
}
}
}
}
var myQuery = "select id_colecao, id_selo_editorial, desc_colecao from colecao where 1=1 "+filtro;
Espero ter ajudado de alguma forma. Fico a disposição.
Utilizo dessa forma já, o filtro não funciona em real time, no momento que o user vai digitando caractere por caractere dentro do zoom. Faz o teste no seu aí, tente usar o zoom filtrando sua coleção, porém no autocomplete do zoom.
@Luís, como está a estrutura do seu Zoom?
Coloquei mais detalhes no tópico.