- Criei um serviço JDBC com a URL:jdbc:oracle:thin:@10.10.34.56:1521/dbconerp, salvei e teste de conexão Ok!
- Criei um dataset dsColetarDadosCTT para retornar os dados de um centro de custo específico. Teste Ok!
- Criei um dataset dsColetarDadosSC7 para retornar os dados dos itens do pedido de compras. Mas estou com o erro a seguir:
2026-07-15 16:39:32,995 ERROR [com.datasul.technology.webdesk.customization.ScriptingLog] (default task-239) ERRO==============> java.sql.SQLRecoverableException: IO Error: An existing connection was forcibly closed by the remote host
2026-07-15 16:39:32,995 ERROR [com.datasul.technology.webdesk.customization.CustomizationManager] (default task-239) - Usuário Executor : admin - Substituto : Não - Executando evento : createDatasetERRO AO EXECUTAR SCRIPT → NOK - Wrapped java.sql.SQLRecoverableException: Closed Connection
2026-07-15 16:39:32,995 WARN [com.fluig.monitoring.jschronos.JSChronos] (default task-239) CustomizationManagerImpl.invokeFunction.createDataset executou por 303 segundos
2026-07-15 16:39:32,995 WARN [com.fluig.monitoring.jschronos.JSChronos] (default task-239) params: [null, [Lcom.totvs.technology.foundation.dataset.SearchConstraint;@32387d8a, null, Thread = default task-239, datasetId = dsColetarDadosSC7]]
2026-07-15 16:39:32,995 ERROR [com.datasul.technology.webdesk.dataset.CustomizedDatasetBuilder] (default task-239) Não foi possível executar script do dataset.
2026-07-15 16:39:32,995 ERROR [com.datasul.technology.webdesk.dataset.CustomizedDatasetBuilder] (default task-239) Wrapped java.sql.SQLRecoverableException: Closed Connection: com.datasul.technology.webdesk.customization.CustomizationException: Wrapped java.sql.SQLRecoverableException: Closed Connection
function createDataset(fields, constraints, sortFields) {
log.info('>> dsColetarDadosCTT <<');
log.info('>> constraints <<');
log.dir(constraints);
var newDataset = DatasetBuilder.newDataset();
var dataSource = "java:/jdbc/Protheus";
var ic = new javax.naming.InitialContext();
var ds = ic.lookup(dataSource);
var created = false
var CTT_CUSTO = "01030601001";
if(constraints != null && constraints.length > 0){
for (var c = 0; c < constraints.length; c++){
if(constraints[c].fieldName == "CTT_CUSTO" && constraints[c].initialValue != null ){
CTT_CUSTO = constraints[c].initialValue;
}
}
}
var query = " SELECT * "
+ " FROM CTT010 CTT "
+ " WHERE CTT.CTT_CUSTO = '"+CTT_CUSTO+"' "
+ " AND CTT.D_E_L_E_T_ = ' ' ";
log.info('>> dsColetarDadosCTT >> query: '+query)
try {
var conn = ds.getConnection();
var stmt = conn.createStatement();
var rs = stmt.executeQuery(query);
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;
}
function createDataset(fields, constraints, sortFields) {
log.info('>> dsColetarDadosSC7 <<');
log.info('>> constraints <<');
log.dir(constraints);
var newDataset = DatasetBuilder.newDataset();
var dataSource = "java:/jdbc/Protheus";
var ic = new javax.naming.InitialContext();
var ds = ic.lookup(dataSource);
var created = false
var C7_FILIAL = "01010004";
var C7_NUM = "238816";
if(constraints != null && constraints.length > 0){
for (var c = 0; c < constraints.length; c++){
if(constraints[c].fieldName == 'C7_FILIAL' && constraints[c].initialValue != null ){
C7_FILIAL = constraints[c].initialValue;
}
if(constraints[c].fieldName == 'C7_NUM' && constraints[c].initialValue != null ){
C7_NUM = constraints[c].initialValue;
}
}
}
var query = " SELECT * "
+ " FROM SC7010 SC7 "
+ " WHERE SC7.C7_NUM = '"+C7_NUM+"' "
+ " AND SC7.C7_FILIAL = '"+C7_FILIAL+"' "
+ " AND SC7.D_E_L_E_T_ = ' ' ";
log.info('>> dsColetarDadosSC7 >> query: '+query)
try {
var conn = ds.getConnection();
var stmt = conn.createStatement();
var rs = stmt.executeQuery(query);
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;
}
Cheguei abrir um chamado na TOTVS sobre a questão mas informaram que poderia ser alguma restrição no ambiente do cliente como Firewall ou algum software de segurança, mas o cliente não possui. Via SQL Developer no VSCode não tenho problemas ao rodar as consultas, utilizando a mesma string de conexão e autenticação.
Alguma dica?