Executar UPDATE em banco oracle via fluig

preciso faz um Update em um banco oracle, mas não vai de jeito nenhum.

Alguém tem um exemplo?
Criei um datasource jdbc que faz select de boa.

Esse é o update que to fazendo.

function createDataset(fields, constraints, sortFields) {
	var dataset = DatasetBuilder.newDataset();

	dataset.addColumn("RowsAffected");

	var dataSource = "/jdbc/winthorjdbc";
	var ic = new javax.naming.InitialContext();
	var ds = ic.lookup(dataSource);
	var created = false;
	var QUERY = "UPDATE PCPEDIDO SET DATAFLUIG = '11/10/1980'";
	try {
		var conn = ds.getConnection();
		var stmt = conn.createStatement();
		var rs = stmt.executeUpdate(QUERY);
		log.info("Linhas afetadas " +rs.toString());
		dataset.addRow([rs.toString()]);
	} catch (e) {
		log.error("ERRO==============> " + e.message);
	} finally {
		if (stmt != null) {
			stmt.close();
		}
		if (conn != null) {
			conn.close();
		}
	}
	return dataset;

}

Boa tarde Daniel,

De UPDATE não achei aqui, mas de INSERT tenho esse, pode tentar adaptar para UPDATE.
Nele utilizo prepareStatement pra evitar inject, dessa forma que vc fez ali é perigoso. Eu encaminho os dados pelas constraints.

        /**
 * 	@author Willian Fellipe Laynes
 *  @mail   willianlaynes@hotmail.com
	@example 
	var c = [];
	c.push(DatasetFactory.createConstraint('nome_do_campo1', 'S', 'VARCHAR', ConstraintType.MUST));//tipo CHAR
	c.push(DatasetFactory.createConstraint('nome_do_campo2', 'N', 'VARCHAR', ConstraintType.MUST));//tipo CHAR
	c.push(DatasetFactory.createConstraint('nome_do_campo3', '629864683'   , 'INTEGER', ConstraintType.MUST)); //tipo INTEGER
	c.push(DatasetFactory.createConstraint('nome_do_campo4', '01/02/2021'   , 'DATE', ConstraintType.MUST)); //tipo DATE
	var ds = DatasetFactory.getDataset('DS_INSERT', null, c, null);
	console.log(ds)
	
	@returns
	Retorno Coluna STATUS(true/false) e MSG("texto"), 
​
 */
​
function createDataset(fields, constraints, sortFields) {
    log.info("======RETORNO PROCEDURE=====INICIOU================")
    var newDataset = DatasetBuilder.newDataset();
    newDataset.addColumn("STATUS");
    newDataset.addColumn("MSG");
    try {
        var minhaQuery = "";
        var sqlInsert = "";
        var sqlValues = "";
        var table = "SUA_TABELA";
​
        //PRODUÇÃO DATASOURCE
        var dataSource = "jdbc/AppDS"; //CONEXAO COM O SERVIDOR DESEJADO, ESSE É O PADRÃO DO SERVIDOR DO FLUIG
​
        var ic = new javax.naming.InitialContext();
        var ds = ic.lookup(dataSource);
        var created = false;
        if (constraints != null) {
​
            sqlInsert += " (nnumeatend";
            sqlValues += " VALUES (seqatend.nextval@s"; //NO MEU CASO TEM AUTO INCREMENTE, TALVEZ PRECISE AJSUTAR ESSA LOGICA, DEVIDO A VIRGULA INICIAL DO FOR LOGO ABAIXO
​
            for (i = 0; i < constraints.length; i++) {
                var tipo = constraints[i].finalValue;
​
                if (constraints[i].initialValue != "") {
                    sqlInsert += "," + constraints[i].fieldName;
                    if (tipo != "DATE") {
                        sqlValues += ",?";
                    } else {
                        sqlValues += ",to_date(?,'dd/MM/yyyy hh24:mi:ss')";
                    }
                }
            }
            sqlInsert += ")";
            sqlValues += ")";
​
            minhaQuery = " ";
            minhaQuery += "	INSERT INTO  " + table;
            minhaQuery += sqlInsert
            minhaQuery += sqlValues
​
            var conn = ds.getConnection();
            var stmt = conn.prepareStatement(minhaQuery);
​
​
            var indice = 1;
            for (i = 0; i < constraints.length; i++) {
​
                if (constraints[i].initialValue != "") {
                    var tipo = constraints[i].finalValue;
                    if (tipo == "VARCHAR") {
                        stmt.setString(indice++, constraints[i].initialValue);
                    } else if (tipo == "DATE") {
                        stmt.setString(indice++, constraints[i].initialValue);
                    } else if (tipo == "INTEGER") {
                        stmt.setInt(indice++, constraints[i].initialValue);
                    } else {
                        stmt.setString(indice++, constraints[i].initialValue);
                    }
                }
            }
​
            var rs = stmt.execute();
​
            if (rs == false) {
                newDataset.addRow(new Array('true', "Dados inseridos com sucesso(" + rs + ")"));
            } else {
                newDataset.addRow(new Array('false', "Erro ao inserir os dados :(" + rs + ")")); //NUNCA EXECUTA ESSA LINHA, SOMENTE PARA EVITAR ERRO CASO CAIA
            }
​
        } else {
            newDataset.addRow(new Array('false', "Necessário informar os campos e seus valores "));
​
        }
    } catch (e) {
        log.info("CATCH erro de execusão do dataset:	" + e.message)
        newDataset.addRow(new Array('false', "CATCH erro de execusão do dataset :(" + e.message + ")"));
    } finally {
        if (rs != null && rs != false)
            rs.close();
        if (stmt != null)
            stmt.close();
        if (conn != null)
            conn.close();
    }
    return newDataset;
}
1 curtida

Talvez tenha que usar nessa linha aqui:
var rs = stmt.execute();
​ algo assim
var rs = stmt.executeUpdate();

Eu to usando exatamente isso.

var rs = stmt.execute();

Deve ser merda do fluig.
No log do eclipse vem a seguinte mensagem:

reloading token
calling tokenService.getToken(“admin”, *****); (323 ms)
calling datasetService.getDataset(“cd58753f-0aeb-4e9b-8b12-c8f6be1c5b8c”, “”, “1”, “ds_winthor_update_pedido”, “net.java.dev.jaxb.array.StringArray@7145469”, “com.totvs.tds.ecm.foundation.ws.SearchConstraintDtoArray@646e17b9”, “net.java.dev.jaxb.array.StringArray@515576b0”); (10005 ms)
javax.xml.ws.WebServiceException: java.net.SocketTimeoutException: Read timed out
at com.sun.xml.ws.transport.http.client.HttpClientTransport.readResponseCodeAndMessage(HttpClientTransport.java:210)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.createResponsePacket(HttpTransportPipe.java:241)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:232)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:145)
at com.sun.xml.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:110)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:1136)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:1050)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:1019)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:877)
at com.sun.xml.ws.client.Stub.process(Stub.java:463)
at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:191)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:108)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:92)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:161)
at com.sun.proxy.$Proxy57.getDataset(Unknown Source)
at com.totvs.tds.ecm.foundation.ws.FluigDatasetService.getDataset(FluigDatasetService.java:25)
at com.totvs.tds.ecm.server.core.WSMethods.getDataset(WSMethods.java:975)
at com.totvs.tds.ecm.dsviewer.views.DatasetView.refreshDataset(DatasetView.java:316)
at com.totvs.tds.ecm.dsviewer.views.DatasetView.openConf(DatasetView.java:290)
at com.totvs.tds.ecm.dsviewer.views.DatasetView.access$1(DatasetView.java:261)
at com.totvs.tds.ecm.dsviewer.views.DatasetView$3.run(DatasetView.java:162)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:473)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:565)
at org.eclipse.jface.action.ActionContributionItem.lambda$5(ActionContributionItem.java:436)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:86)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4428)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1079)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4238)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3817)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1150)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1039)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:680)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:594)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:151)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590)
at org.eclipse.equinox.launcher.Main.run(Main.java:1499)
Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read1(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.HttpURLConnection.getResponseCode(Unknown Source)
at com.sun.xml.ws.transport.http.client.HttpClientTransport.readResponseCodeAndMessage(HttpClientTransport.java:206)
… 49 more
javax.xml.ws.WebServiceException: java.net.SocketTimeoutException: Read timed out
at com.sun.xml.ws.transport.http.client.HttpClientTransport.readResponseCodeAndMessage(HttpClientTransport.java:210)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.createResponsePacket(HttpTransportPipe.java:241)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:232)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:145)
at com.sun.xml.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:110)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:1136)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:1050)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:1019)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:877)
at com.sun.xml.ws.client.Stub.process(Stub.java:463)
at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:191)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:108)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:92)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:161)
at com.sun.proxy.$Proxy57.getDataset(Unknown Source)
at com.totvs.tds.ecm.foundation.ws.FluigDatasetService.getDataset(FluigDatasetService.java:25)
at com.totvs.tds.ecm.server.core.WSMethods.getDataset(WSMethods.java:975)
at com.totvs.tds.ecm.dsviewer.views.DatasetView.refreshDataset(DatasetView.java:316)
at com.totvs.tds.ecm.dsviewer.views.DatasetView.openConf(DatasetView.java:290)
at com.totvs.tds.ecm.dsviewer.views.DatasetView.access$1(DatasetView.java:261)
at com.totvs.tds.ecm.dsviewer.views.DatasetView$3.run(DatasetView.java:162)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:473)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:565)
at org.eclipse.jface.action.ActionContributionItem.lambda$5(ActionContributionItem.java:436)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:86)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4428)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1079)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4238)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3817)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1150)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1039)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:680)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:594)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:151)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590)
at org.eclipse.equinox.launcher.Main.run(Main.java:1499)
Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read1(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.HttpURLConnection.getResponseCode(Unknown Source)
at com.sun.xml.ws.transport.http.client.HttpClientTransport.readResponseCodeAndMessage(HttpClientTransport.java:206)
… 49 more

SELECT você esta conseguindo fazer? Ou só UPDATE? O Usuário cadastrado no domain.xml tem permissão para UPDATE?

Select vai de boa. Somente o update falha o usuário tem sim permissão.

2021-05-08 13:31:09,789 ERROR [com.datasul.technology.webdesk.customization.ScriptingLog] (default task-85) ERRO==============> java.sql.SQLException: javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:/jdbc/winthorjdbc

Boa tarde @Daniel_Sales , tudo bem?
eu uso esse código, funciona tanto em Mysql tanto SQLServer, nunca testei em Oracle, mas dá uma olhada (ele funciona tudo Select, Insert, Update , Store Procedure)

function createDataset(fields, constraints, sortFields) {
var myQuery = “select name from sys.tables where name like ‘ml0%’ order by name”;
var newDataset = DatasetBuilder.newDataset();
var dataSource = “java:/jdbc/AppDS”;
var ic = new javax.naming.InitialContext();
var ds = ic.lookup(dataSource);
var created = false;
var fieldName = getConstraint(“query”, 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++) {
                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);
    var dataset = DatasetBuilder.newDataset();	
    dataset.addColumn("Erro");
    dataset.addRow(new Array(e.message)); 
    
    return dataset;
} finally {
     if(rs != null) { //fechamento do resultSet
        rs.close();
      }
      if(stmt != null) { //fechamento do statement
        stmt.close();
      }
      if(conn != null) { //fechamento da conexão
        conn.close();
      }
}
return newDataset;

}

Obrigado pelas dicas resolvi o bo era erro na infra do cliente. barrando o fluig no update.