Bom dia!
Gostaria de ajuda em uma questão que estou com dificuldade!
Eu tenho a tarefa de pegar o valor de um campo do formulário que é preenchido pelo usuário, usar esse valor para realizar uma “consulta” dentro de um dataset, pegar o resultado dessa “consulta” e preencher outros campos do meu formulário. Esse dataset é uma consulta da tabela do Protheus.
Ex:
Usuário digita a matricula,
O campo nome é preenchido com nome do usuário dono da matricula mencionada.
Alguém poderia me explicar como é possível fazer isso no fluig? Tenho que criar uma API, ou da para fazer com os recursos internos do Fluig.
Olá, para consumir o dataset e ter o retorno dos dados no formulário é simples, o que vai mudar é o dataset em si. Como você acessa os dados do Protheus? Via API? Via SQL? Dependendo como for o dataset vai ser feito de um jeito.
Qualquer que seja o caso, você deve criar um serviço no Painel de Controle
Caso seja uma API, cadastre ela como REST ou SOAP e preencha os campos de autenticação caso REST
Caso seja consulta SQL, cadastre um serviço JDBC apontando para a base.
Exemplo de dataset que executa sentença SQL
function createDataset(fields, constraints, sortFields) {
var Dataset = DatasetBuilder.newDataset();
var dataSource = "/jdbc/{NOME_SERVICO_JDBC}"; //NOME DO SERVICO JDBC CRIADO NO PAINEL DE CONTROLE DO FLUIG
var ic = new javax.naming.InitialContext();
var ds = ic.lookup(dataSource);
var created = false;
var myQuery = getSQL(constraints);
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++) {
Dataset.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";
}
}
Dataset.addRow(Arr);
}
} catch (e) {
log.error("ERRO==============> " + e.message);
} finally {
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
}
return Dataset;
}
function getSQL(constraints) {
var query;
var matricula = ""
if (constraints != null) {
for (var i = 0; i < constraints.length; i++) {
if (constraints[i].fieldName == "matricula" && constraints[i].initialValue && constraints[i].initialValue != "") {
matricula = constraints[i].initialValue;
}
}
}
query = "{QUERY_SQL}";
log.info(query);
return query;
}
Exemplo de dataset que consome API REST
function createDataset(fields, constraints, sortFields) {
var dataset = DatasetBuilder.newDataset();
var matricula = "";
if (constraints != null) {
for (var i = 0; i < constraints.length; i++) {
if (constraints[i].fieldName == "matricula" && constraints[i].initialValue && constraints[i].initialValue != "") {
matricula = constraints[i].initialValue;
}
}
}
var endpoint "{ENDPOINT_API}";
try {
var list = fluigAPI.getAuthorizeClientService();
var data = {
companyId: getValue("WKCompany") + '',
serviceCode: '{NOME_SERVICO_FLUIG}',
endpoint: endpoint,
method: 'get',
params: {
"{BODY_REQUISICAO}"
}
}
var result = JSON.parse(list.invoke(JSON.stringify(data)).getResult())
//UTILIZE O RETORNO JSON PARA MONTAR A ESTRUTURA DO DATASET
} catch (err) {
log.info("ERRO =====> " + err)
}
return dataset;
}
Para consumir o dataset no formulario (Imagine que o nome do dataset é ds_funcionario)
const c1 = DatasetFactory.createConstraint("matricula", matricula, matricula, ConstraintType.MUST);
const ds = DatasetFactory.getDataset("ds_funcionario", null, [c1], null).values; //RETORNA UMA ARRAY DE OBJETOS COM OS DADOS DO DATASET
Da uma procura que tem documentação. Qualquer coisa retorna aqui com mais detalhes.
Boa sorte.
Abs
1 curtida