Esta pergunta é recorrente e, via de regra, nos ajudam apontando para o link do help do Fluig.
Entretanto, no help a construção da sentença SQL não leva em conta o uso de constraints, apenas mencionando uma consulta padrão ( var myQuery = "select * from pessoas";), sem a utilização de variáveis.
Através deste forum, tive ajuda num assunto semelhante, mas o uso de constraints aplicava-se a dataset já existente, nativo do Fluig.
Com relação ao uso de constraints - que na minha intenção deverão ser modificados dinamicamente via widget e com acesso a banco de dados externo - eu não encontrei nenhum artigo.
Resumindo: minha necessidade é de, através de uma widget, passar parâmetros a um dataset, que, por sua vez, irá consultar um banco de dados Oracle.
Você terá que percorrer o array de constraints, pegar o que precisa e então concatenar na sua query SQL.
Seria algo mais ou menos assim.
/**
* Executa uma consulta SQL tratando MUST e SHOULD como se fossem a mesma coisa
*
* Caso vá utilizar SHOULD você terá que fazer toda uma tratativa pra colocar o OR nos lugares corretos de acordo com a lógica da SQL.
*
* @param {string[]} fields Campos a retornar
* @param {Constraint[]} constraints Filtros
* @param {string[]} sortFields Campos da ordenação
*/
function createDataset(fields, constraints, sortFields) {
var sql = "SELECT * FROM table";
var where = [];
if (constraints != null && constraints.length) {
for (var i = 0; i < constraints.length; ++i) {
// Aqui você pode se preocupar também se a constraint precisa ser com LIKE, mas não sei qual o campo disso (ainda não encontrei)
// Também é interessante só colocar as '' nos campos que são string, então você teria que validar isso
var operator = constraints[i].constraintType == ConstraintType.MUST_NOT ? " <> " : " = ";
where.push(constraints[i].fieldName + operator + "'" + constraints[i].initialValue) + "'");
}
}
if (where.length) {
sql += " WHERE " + where.join(" AND ");
}
log.info(sql);
}
Caro Bruno, obrigado por sua ajuda. Eu entendi o código, mas está dando um erro estranhíssimo: missing ; before statement na linha var operator = constraints[i].constraintType == ConstraintType.MUST_NOT ? " <> " : " = "; Fui procurar este erro na web e diz que, normalmente, há uma linha que não terminou com ponto-e-vírgula, ou que tem um apóstrofo misturado numa variável. Só que não achei nada disto. Copiei o código para outro editor (Visual Studio) e não há nada disto.