Olá a todos,
Estou tentado fazer uma consulta a um dataset quando clico no botão salvar/enviar através do evento beforeTaskSave:
function beforeTaskSave(colleagueId, nextSequenceId, userList) {
var Codigo = hAPI.getCardValue("CODIGO");
log.warn("BEFORE-TASK");
log.info("CODIGO: " + Codigo);
log.info("NEXT-SEQUENCE-ID" + nextSequenceId);
log.info("CODIGO-LENGTH" + Codigo.length());
if (nextSequenceId == 5 && Codigo.length() == 9) {
log.warn("PASSOU NO IF !!!");
var c1 = DatasetFactory.createConstraint("CODIGO", "%" + Codigo + "%", "%" + Codigo + "%", ConstraintType.SHOULD);
var constraints1 = new Array(c1);
var fields1 = new Array("CODIGO");
var dataset4 = DatasetFactory.getDataset("SolicitacaoDeVerba", fields1, constraints1, null);
log.warn(dataset4);
if (dataset4.values.length() <= 0)
$("#CODIGO").val(Codigo + "001");
}
}
Porém o mesmo apresenta erro no momento em que eu tento fazer esse if if (dataset4.values.length() <= 0)
Abaixo segue o erro do log:
(default task-66) [Solicitação: 280] - Processo: SolicitacaodeVerbas - versão: 25 - Usuário Executor : allan.silva - Gestor : Não - Substituto : Não - Estado atual : 4 - Estado destino : 5 - Executando evento : beforeTaskSaveERRO AO EXECUTAR SCRIPT -> NOK - sun.org.mozilla.javascript.internal.EvaluatorException: Java class "[[Ljava.lang.Object;" has no public instance field or method named "__noSuchMethod". (#18) in at line number 18
Acredito que o seu erro seja no “$(”#CODIGO").val(Codigo + “001”);" e não no IF, pois o evento é realizado em back-end e o comando jQuery não irá ser reconhecido.
Nessa caso você vai ter que usar o hAPI.setCardValue().
Abraço!
Boa Tarde Kanaãm,
Alterei o meu IF e deixei dessa forma
if (dataset4.values.length() <= 0) {
log.warn("PASSOU NO IF 2 !!!");
}
mesmo assim ele ainda continua dando erro na linha do IF.
Ahhh, você está usando .length() como se fosse um método, porém length é um atributo do objeto.
Tire os parenteses.
Abraço!
Kanaãm, deu certo aqui cara muito obrigado.
Só fiquei com uma dúvida, o retorno no dataset, é um array, como eu faço pra percorrer ele no beforetaskSave ?
Allan, você também pode usar dataset4.rowsCount para saber o número de registros retornados do dataset. Para percorrer o resultado do dataset você pode usar o método getValue(): for (var i = 0; i < dataset4.rowsCount; i++) {
log.info(dataset4.getValue(i, “CODIGO”));
}
Diogo e Kanaãm, muito Obrigado pelas respostas, deu tudo certo.
Tente dessa forma seguindo a sugestão do Diogo
function beforeTaskSave(colleagueId, nextSequenceId, userList) {
var Codigo = hAPI.getCardValue("CODIGO");
log.warn("BEFORE-TASK");
log.info("CODIGO: " + Codigo);
log.info("NEXT-SEQUENCE-ID" + nextSequenceId);
log.info("CODIGO-LENGTH" + Codigo.length());
if (nextSequenceId == 5 && Codigo.length() == 9) {
log.warn("PASSOU NO IF !!!");
var c1 = DatasetFactory.createConstraint("CODIGO", "%" + Codigo + "%", "%" + Codigo + "%", ConstraintType.SHOULD);
var constraints1 = new Array(c1);
var fields1 = new Array("CODIGO");
var dataset4 = DatasetFactory.getDataset("SolicitacaoDeVerba", fields1, constraints1, null);
log.warn(dataset4);
for (var i = 0; i < dataset4.rowsCount; i++) {
hAPI.setCardValue("CODIGO",dataset4.getValue(i, "CODIGO"));
}
}
}
Kanaãm, muito Obrigado pelas respostas, deu tudo certo.
Beleza!
Por nada!
Abraço!