Zoom não filtra no mobile

Estou tendo problemas com um zoom que se recusa a filtrar valores na versão mobile (apenas na desktop ok), sempre exibindo uma mesma lista inteira de valores retornados de uma base de dados. Vi em alguns casos aqui que devo tratar as constraints dentro do dataset customizado, mas confesso que estou meio perdido quanto a onde devo fazer este tratamento, e como;

criei 2 datasets:

ds_experimental:


function createDataset(fields, constraints, sortFields) {
    var newDataset = DatasetBuilder.newDataset();
    log.info("QUERY: " + myQuery);
    var dataSource = "/jdbc/BD_PROTHEUS12_BMB";
    var ic = new javax.naming.InitialContext();
    var ds = ic.lookup(dataSource);
    var created = false;

    var myQuery = "SELECT "+
                    "SB1.B1_XXMODEL, SB1.B1_DESC, SB1.B1_GRUPO, SB1.B1_COD, SX5.X5_CHAVE, SX5.X5_DESCRI "+
                    "FROM SB1010 AS SB1 INNER JOIN SX5010 AS SX5 "+
                    "ON SB1.B1_XXMODEL = SX5.X5_CHAVE AND SX5.X5_TABELA = 'Z3' AND SX5.X5_FILIAL = '01' "+
                    "WHERE SB1.B1_FILIAL = '01' AND SB1.D_E_L_E_T_ <>'*' AND SB1.B1_GRUPO = 'VEIC' AND SB1.B1_LOCPAD IN ('DM', 'SE')";

    try {
        var conn = ds.getConnection();
        var stmt = conn.createStatement();
        var rs = stmt.executeQuery(myQuery);
        var columnCount = rs.getMetaData().getColumnCount();
        while (rs.next()) {
            if (!created) {
                for (var i = 1; i <= columnCount; i++) {
                    newDataset.addColumn(rs.getMetaData().getColumnName(i));
                }
                created = true;
            }
            var Arr = new Array();
            for (var i = 1; i <= columnCount; i++) {
                var obj = rs.getObject(rs.getMetaData().getColumnName(i));
                if (null != obj) {
                    Arr[i - 1] = rs.getObject(rs.getMetaData().getColumnName(i)).toString();
                } else {
                    Arr[i - 1] = "null";
                }
            }

            newDataset.addRow(Arr);
        }
    } catch (e) {
        log.error("ERRO==============> " + e.message);
    } finally {
        if (rs != null) {
            rs.close();
        }
        if (stmt != null) {
            stmt.close();
        }
        if (conn != null) {
            conn.close();
        }
    }
    return newDataset;
}

ds_get_experimental:


function defineStructure() {

}
function onSync(lastSyncDate) {

}
function createDataset(fields, constraints, sortFields) {
    var dataset = DatasetBuilder.newDataset();

    var dataset = DatasetFactory.getDataset("ds_experimental", null, null, null);

    return dataset;
}
function onMobileSync(user) {

}

Este segundo apenas será útil se eu tiver que aplicar ou tratar as tais constraints nele, correto?

Problema solucionado; Já havia visto a solução em outras respostas, porém estava tendo problemas quanto a onde encaixar essa solução; O código que resolveu a questão, colocado dentro do bloco try{} foi o seguinte:


        if (constraints != null) {
            for (var i = 0; i < constraints.length; i++) {
                if (constraints[i].fieldName == "B1_COD") {
                    myQuery += " AND SB1.B1_COD like UPPER('%" +constraints[i].initialValue + "%')";
                }
            }
        }

O segundo dataset que eu havia criado se fez desnecessário, uma vez que todos os filtros que eu precisava foram aplicados diretamente à consulta SQL.

O resultado final foi o seguinte:

ds_experimental:


function createDataset(fields, constraints, sortFields) {
    var newDataset = DatasetBuilder.newDataset();
    var dataSource = "/jdbc/BD_PROTHEUS12_BMB";
    var ic = new javax.naming.InitialContext();
    var ds = ic.lookup(dataSource);
    var created = false;

    var myQuery = "SELECT "+
                    "SB1.B1_XXMODEL, SB1.B1_DESC, SB1.B1_GRUPO, SB1.B1_COD, SX5.X5_CHAVE, SX5.X5_DESCRI "+
                    "FROM SB1010 AS SB1 INNER JOIN SX5010 AS SX5 "+
                    "ON SB1.B1_XXMODEL = SX5.X5_CHAVE AND SX5.X5_TABELA = 'Z3' AND SX5.X5_FILIAL = '01' "+
                    "WHERE SB1.B1_FILIAL = '01' AND SB1.D_E_L_E_T_ <>'*' AND SB1.B1_GRUPO = 'VEIC' AND SB1.B1_LOCPAD IN ('DM', 'SE')";

    try {

    // TRATAMENTO DA CONSTRAINT PARA DATASET CUSTOMIZADO
        // ESTE CÓDIGO PERMITE QUE A LISTA DE OPÇÕES DO ZOOM SEJA ATUALIZADA
        if (constraints != null) {
            for (var i = 0; i < constraints.length; i++) {
                if (constraints[i].fieldName == "B1_COD") {
                    myQuery += " AND SB1.B1_COD like UPPER('%" +constraints[i].initialValue + "%')";
                }
            }
        }

        var conn = ds.getConnection();
        var stmt = conn.createStatement();
        var rs = stmt.executeQuery(myQuery);
        var columnCount = rs.getMetaData().getColumnCount();
        while (rs.next()) {
            if (!created) {
                for (var i = 1; i <= columnCount; i++) {
                    newDataset.addColumn(rs.getMetaData().getColumnName(i));
                }
                created = true;
            }
            var Arr = new Array();
            for (var i = 1; i <= columnCount; i++) {
                var obj = rs.getObject(rs.getMetaData().getColumnName(i));
                if (null != obj) {
                    Arr[i - 1] = rs.getObject(rs.getMetaData().getColumnName(i)).toString();
                } else {
                    Arr[i - 1] = "null";
                }
            }
            newDataset.addRow(Arr);
        }
    } catch (e) {
        log.error("ERRO==============> " + e.message);
    } finally {
        if (rs != null) {
            rs.close();
        }
        if (stmt != null) {
            stmt.close();
        }
        if (conn != null) {
            conn.close();
        }
    }


    return newDataset;
}