Boa tarde.
Resumo:
Gostaria de fazer um SQL com parametros e pegar este parameto de um campo do formulario, é possivel ?
Case:
Tenho duas tabelas no meu BD.
Uma sendo clientes e a outra sendo processos.
A tebala Cliente tem mais de 1000 mil registros.
A tabela processo tem apenas uns 100 registros ( mas nela tem o nome de cada Cliente ).
Existe uma forma de eu criar um dataset avanaçado no Fluig studio, e ao preencher o campo "CLIENTE" ( No formulario ), a consulta SQL entenda ( pode ser como parametro ) que é para trazer os registros da Tabela Processo com a referencia ao nome do Cliente em uma lista?
Ou alguma outra forma ?
Obrigado.
Deixo abaixo como fazer o parâmetro. A única coisa que não fiz nesse exemplo foi usar constraint (que você poderia receber a data por ele).
function createDataset(fields, constraints, sortFields) {
var newDataset = DatasetBuilder.newDataset();
//Pode trocar a string 201905 por um parâmetro via constraints
var myQuery = getQuery('201905');
var dataSource = "/jdbc/FluigDSRO";
var ic = new javax.naming.InitialContext();
var ds = ic.lookup(dataSource);
var created = false;
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;
}
function getQuery(anomes){
var query = '';
query += "SELECT ";
query += " CCUSTO as [CCusto] ";
query += "FROM MINHA TABELA Q2 ";
query += "WHERE CAMP_DATA BETWEEN '"+anomes+"01' AND '"+anomes+"31' AND ";
return query;
}
Janilson, agradeço muito pela sua resposta a minha dúvida e esta me ajudando e muito.
Teria mais uma duvida aqui.
No meu formulario html, eu gostaria de digitar o nome do cliente e ao sair deste campo passar o valor para o parametro ou constrainst da solução que voce me informou, e ao filtrar o SQL eu possa colocar o conteúdo em um outro campo , tipo combobox , isso é possível ?
Obrigado.
No formulário você pode criar um evento JS para quando esse campo mudar de valor você pesquisar o dataset passando o valor como constraint. Nessa documentação, Desenvolvimento de Formulários - TOTVS Fluig - TDN , você encontra como acessar o dataset pelo formulário usando o arquivo /webdesk/vcXMLRPC.js. Aí é só popular o combobox com o resultado do dataset.