Como Consultar Dataset ao salvar um formulário evento beforeTaskSave?

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!