Pra mim a sua solução é bem ruim, pois você está montando um SQL que é facilmente encontrado no código e alguém com conhecimento pode criar qualquer SQL e passar pro seu dataset pra obter o que quiser. É uma grande falha de segurança.
Quanto ao seu problema você precisa validar o tipo da Constraint e tratar os casos.
let arrayConstraints = [
DatasetFactory.createConstraint(
"ANO_MES",
"2022-01",
"2022-01",
ConstraintType.MUST
),
DatasetFactory.createConstraint(
"CATEGORIA",
"CONS",
"CONS",
ConstraintType.MUST_NOT
)
];
let arrayOrdenacao= ["NOME"];
let resultado = DatasetFactory.getDataset(
"meu_dataset",
null,
arrayConstraints,
arrayOrdenacao
);
No seu código você indicou que a Constraint ANO_MES é MUST e a Constraint CATEGORIA é MUST_NOT.
No seu Dataset você precisa tratar isso.
Exemplo:
var clausulas = [];
var comparacao = "";
if (constraints !== null) {
for (var i = 0; i < constraints.length; i++) {
comparacao = constraints[i].constraintType == ConstraintType.MUST ? " = " : " <> ";
if (constraints[i].fieldName == "ANO_MES") {
clausulas.push("anoMes " + comparacao + "'" + constraints[i].initialValue + "'");
}
if (constraints[i].fieldName == "CATEGORIA ") {
clausulas.push("CATEGORIA " + comparacao + "'" + constraints[i].initialValue + "'");
}
}
var sql = "SELECT * FROM TABELA WHERE " + clausulas.join(" AND ");
É uma atividade bem complicada em Dataset Avançado tratar todas as possibilidades de Constraints, então é bom analisar bem cada caso.
Por exemplo, se a pessoa colocar uma constraint SHOULD você teria que tratar com um OR na consulta e pode ir complicando cada vez mais.
Por isso é interessante definir bem a regra de negócio para o uso do Dataset pra não deixar a implementação complicada demais.