Acessar processInstanceId de dentro do Dataset

Gostaria de utilizar o numero da solicitação no filtro do dataset customizado.

function createDataset(fields, constraints, sortFields) {

var NOME_SERVICO = "WSCONSSQL"; var CAMINHO_SERVICO = "com.totvs.WsConsultaSQL";

var dataset = DatasetBuilder.newDataset();

try{ var servico = ServiceManager.getServiceInstance(NOME_SERVICO); log.info("Servico: " + servico);

log.info("Iniciando...");

var serviceHelper = servico.getBean(); log.info("Helper: " + serviceHelper);

var instancia = servico.instantiate(CAMINHO_SERVICO); log.info("Instancia: " + instancia);

var ws = instancia.getRMIwsConsultaSQL(); log.info("WS: " + ws);

var processo = getValue("WKNumProces"); //Número da solicitação de processo. PROBLEMA!!!! log.info("Processo: " + processo);

//var serviceHelper = servico.getBean();

var authService = serviceHelper.getBasicAuthenticatedClient(ws, "com.totvs.IwsConsultaSQL", 'usuario', 'senha');

//log.info("Params: " + "NSEQITMMOV="+fields[3]+ ";CODCOLIGADA="+fields[1] + ";IDMOV="+fields[0] + ";TIPOAPROVACAOFLUIG="+fields[2]+ ";VALORLIQUIDO="+fields[4]);

// Executa uma consulta previamente disponibilizada e cadastrada no RM var result = authService.realizarConsultaSQL("BORDERO", 1, "F", "IDFLUIG="+processo); log.info("result BORDERO: " + result);

if ((result != null) && (result.indexOf("===") != -1)) { var msgErro = result.substring(0, result.indexOf("==="));

throw msgErro; }

var xmlResultados = new XML(result); dataset.addColumn("IDFLUIG"); dataset.addColumn("IDBORDERO"); dataset.addColumn("DESC_BORDERO"); dataset.addColumn("IDLAN"); dataset.addColumn("FAVORECIDO"); dataset.addColumn("NUMERODOCUMENTO"); dataset.addColumn("DATAPREVBAIXA"); dataset.addColumn("DATAVENCIMENTO"); dataset.addColumn("VALORORIGINAL"); dataset.addColumn("VALORLIQUIDO");

for each(lan in xmlResultados.Resultado) { dataset.addRow(new Array(lan.IDFLUIG.toString(), lan.IDBORDERO.toString(), lan.DESC_BORDERO.toString(), lan.IDLAN.toString(), lan.FAVORECIDO.toString(), lan.NUMERODOCUMENTO.toString(), lan.DATAPREVBAIXA.toString(), lan.DATAVENCIMENTO.toString(), lan.VALORORIGINAL.toString(), lan.VALORLIQUIDO.toString())); }

return dataset; } catch (e) { if (e == null) e = "Erro desconhecido, verifique o log do AppServer.";

var mensagemErro = "Erro na comunicação com o TOTVS TBC: " + e; log.error(mensagemErro);

dataset.addColumn("ERROR"); dataset.addRow(new Array(mensagemErro));

return dataset; }}

function ValidaCampo(campo, valor) { if ((valor != null) && (valor != "")) { return "<"+campo+">"+valor+" "; } else return ""; }

function parseContext(constraints) { var context = ""; if ((constraints != null) && (constraints.length > 0) && (constraints[0].getFieldName() == "RMSContext")) { context = constraints[0].getInitialValue(); }

return context; }

// Transforma o conceito de constraints do Fluig para o Filtro do TBC. function parseConstraints(constraints) { var filter = ""; for each(con in constraints) {

if (con.getFieldName().toUpperCase() == "RMSCONTEXT") continue;

filter += "(";

if (con.getFieldName().toUpperCase() == "RMSFILTER") { filter += con.getInitialValue(); } else if (con.getConstraintType() == ConstraintType.SHOULD) { filter += "("; filter += con.getFieldName(); filter += "="; filter += con.getInitialValue(); filter += ")"; filter += " OR "; filter += "("; filter += con.getFieldName(); filter += "="; filter += con.getFinalValue()(); filter += ")"; } else { if (con.getInitialValue() == con.getFinalValue()) { filter += con.getFieldName();

if (ConstraintType.MUST == con.getConstraintType()) { filter += " = "; } else if (ConstraintType.MUST_NOT == con.getConstraintType()) { filter += " <> "; }

filter += con.getInitialValue(); } else { filter += con.getFieldName(); filter += " BETWEEN "; filter += con.getInitialValue(); filter += " AND "; filter += con.getFinalValue() } }

filter += ")";

filter += " AND "; }

if (filter.length == 0) { filter = "1=1"; } else filter = filter.substring(0, filter.length-5);

return filter;

}

Boa tarde Herick,

um dataset customizado não tem acesso direto a variável WKNumProces.

Você pode então passar o valor dela como constraint para o dataset quando chamar ele de uma atividade de serviço ou evento de processo:


var numProces = getValue("WKNumProces");
var constraint = DatasetFactory.createConstraint("WKNumProces", numProces, numProces, ConstraintType.MUST);

var dataset = DatasetFactory.getDataset("dataset_consulta_sql", null, constraints, null);

Então dentro do seu dataset você buscaria o valor da constraint:


var processo = "";
for (var i = 0; i < constraints.length; i++) {
    if (constraints[i].fieldName == "WKNumProces") {
        processo = constraints[i].initialValue;    
    }
}

Obrigado pela ajuda Diogo
Adicionei a chamada abaixo ao Dataset, mas ele retorna null quando é acessado o formulário por dentro do processo.
var numProces = getValue(“WKNumProces”);
log.info("WKNumProces: " + numProces);

2019-06-05 17:39:54,952 INFO [com.datasul.technology.webdesk.customization.ScriptingLog] (default task-19) WKNumProces: null

Segunda tentativa
var numProces = getValue(“WKNumProces”);
var constraint = DatasetFactory.createConstraint(“WKNumProces”, numProces, numProces, ConstraintType.MUST);
log.info("constraint: " + constraint);
2019-06-05 18:12:49,128 INFO [com.datasul.technology.webdesk.customization.ScriptingLog] (default task-28) constraint: FIELD_NAME=WKNumProces; INITIAL_VALUE=null; FINAL_VALUE=null; CONSTRAINT_TYPE=MUST; IS_LIKE_SEARCH=false;

Qual evento de formulário vc utilizou?

function displayFields(form,customHTML){ var numProces = getValue("WKNumProces"); var constraint = DatasetFactory.createConstraint("WKNumProces", numProces, numProces, ConstraintType.MUST); log.info(constraint); var dataset = DatasetFactory.getDataset("processo_teste", null, [constraint], null); log.dir(dataset); }

Ao iniciar o processo ele vai retornar o valor 0, mas depois ele deve retornar o valor da solicitação

Boa tarde Diogo
Fiz o seguinte:
’
function afterTaskCreate(colleagueId){

//Recupera o numero da solicitação
var processo = getValue("WKNumProces");
hAPI.setCardValue("n_solicitacao", processo);

}’ // Trouxe o numero do processo para o formulário - Ok

Na sequencia incluí um script ao form, mas não estou conseguindo filtrar.
Form Dontpad