Criar Constraints com Dataset De BD Externo

Bom dia pessoal, sou iniciante no Fluig e gostaria de ajuda. Eu tenho um Dataset avançado que é alimentado pelo nosso banco de dados externo. No meu caso estou levando alguns dados da tabela SX5 do banco do Protheus, porem eu precisava filtrar deste dataset algumas informações.
Segue meu código do dataset:

function createDataset(fields, constraints, sortFields) {
//cria data sete com select na tabela CCHA010 do Protheus
var newDataset = DatasetBuilder.newDataset();

    var dataSource = "/jdbc/MP1222";
    var ic = new javax.naming.InitialContext();
    var ds = ic.lookup(dataSource);
    var created = false;
    var myQuery = "SELECT X5_TABELA, X5_CHAVE, X5_DESCRI FROM SX5010 X5 WHERE X5_TABELA IN ('02','SG') AND X5.D_E_L_E_T_ = '' ";
    
    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 (stmt != null) {
            stmt.close();
        }
        if (conn != null) {
            conn.close();
        }
    }
    return newDataset;

}
Meu data sete funciona bem, porem eu precisava adicionar constantes nele e não estou conseguindo. Nesse caso eu preciso pegar este dataset e criar outro com as constraintes filtrando o campo X5_Tabela, X5_TABELA = SG e o outro igual a 02. Porem quando crio estes datassets a constrainte não e aplicada.

Código do dataset com constrainte:

function createDataset(fields, constraints, sortFields) {
var X5_TABELA = DatasetFactory.createConstraint(“X5_TABELA”, “SG”, “SG”, ConstraintType.MUST);
var dataset = DatasetFactory.getDataset(“DS-SX5”, null, new Array(X5_TABELA), null);
return dataset;
}

Esse dataset com a constraint retorna todos os dados do dataset primário.
Alguém poderia me explicar onde eu estou errando e como eu aplicaria esses filtros da melhor forma?

Em dataset do sistema ou jornalizado o Fluig faz tudo pra gente.

Já em dataset avançado a gente precisa ver o que o usuário indicou nos fields, constraints e sortFields e a partir disso fazer a filtragem e ordenação (se julgar que o dataset deva se preocupar com essas coisas).

Nessa Documentação do Fluig explica como pecorrer as constraints. Aí a partir dessas constraints você monta o seu WHERE da consulta SQL.

Dependendo da quantidade de dados e frequência de atualização você também pode fazer um dataset jornalizado, buscando tudo o que precisa da base, e aí o Fluig tratará pra você os demais detalhes.

Bom dia, Obrigado por responder Bruno.
Mas assim nesse caso eu estou montando um dataset cunsutnado a tabela toda do Banco de Dados Externo. Com isso eu uso esse dataset exclusivo para informações dentro do meu formulário.
Por ex: Essa Tabela X5 eu precisava filtrar somente o que é X5_Tabela = SG, e usar esse dataset com a constrainte em um campo zoom. Mas não estou conseguindo. Hoje estou fazendo um dataset diferente para cada campo zoom, vou la faço um dataset avançado mudando apenas o where do SQL. Seria isso mesmo? Mesmo lendo a documentação não estou entendendo como usar as constraintes.

Exemplo:

/**
 * Exemplo
 *
 * @param {string[]} fields Campos Solicitados
 * @param {Constraint[]} constraints Filtros
 * @param {string[]} sorts Campos da Ordenação
 * @returns {Dataset}
 */
function createDataset(fields, constraints, sorts) {
    var dataset = DatasetBuilder.newDataset();

    var tabela = "";

    for (var i = 0; i < constraints.length; ++i) {
        if (constraints[i].fieldName == "tabela") {
            tabela = constraints[i].initialValue;
        }
    }

    // Garantir que só vão informar valores válidos
    if (tabela != "02" && tabela != "SG") {
        tabela = "";
    }

    var myQuery = "SELECT X5_TABELA, X5_CHAVE, X5_DESCRI "
        + "FROM SX5010 X5 "
        + "WHERE X5.D_E_L_E_T_ = '' ";

    if (tabela != "") {
        myQuery += "AND X5_TABELA = '" + tabela + "'";
    } else {
        myQuery += "AND X5_TABELA IN ('02','SG')";
    }

    // Executa o resto do seu código normalmente

    return dataset;
}

Bruno, Bom dia!
Você me deu um norte muito muito bom, seguindo sua solução fiz uma pequena modificação no código para atender melhor minha necessidade.

Segue modificação:

var newDataset = DatasetBuilder.newDataset();

    var dataSource = "/jdbc/MP1222";
    var ic = new javax.naming.InitialContext();
    var ds = ic.lookup(dataSource);
    var created = false;
    var filtro = '';
    var myQuery = "SELECT X5_TABELA, X5_CHAVE, X5_DESCRI " 
    + "FROM SX5010 X5 "
    + "WHERE X5.D_E_L_E_T_ = '' ";
   
    if(constraints !== null && constraints.length){
	   if(constraints[0].constraintType == ConstraintType.MUST){
	        for (var i=0; i < constraints.length; i++){
	        if(constraints[i]){
	            filtro = constraints[i].initialValue;
	            }
	        }
	   }
    }
	 
    
    //grante informar valores falidos
    if(filtro != "02" && filtro != "SG"){
        filtro = ""
    }
    
    if(filtro !== ""){
        myQuery += "AND X5_TABELA = '" + filtro + "'";
    }else{
        myQuery += "AND X5_TABELA IN ('02','SG')";
    }  //Restante do código... 

Muito obrigado, pela ajuda!