Erro ao acessar atividade

Em 2 atividades do fluxo aparece a mensagem de erro no log:

2018-03-14 11:53:42,519 ERROR [com.datasul.technology.webdesk.customization.CustomizationManager] (default task-33) [Solicitação: 512] - Processo: RD-Melhoria_Processo - versão: 25 - Usuário Executor : 000001 - Gestor : Não - Substituto : Não - Estado atual : 94 - Executando evento : displayFieldsERRO AO EXECUTAR SCRIPT -> NOK - sun.org.mozilla.javascript.internal.WrappedException: Wrapped java.util.NoSuchElementException (#793) in at line number 793 2018-03-14 11:53:42,566 ERROR [com.datasul.technology.webdesk.forms.business.CardIndexJSListener] (default task-33) Erro ao executar o evento displayFields não foi implementado para o fichário 44 na versão 22000 mensagem: sun.org.mozilla.javascript.internal.WrappedException: Wrapped java.util.NoSuchElementException (#793) in at line number 793.

Nas demais atividades, o fluxo segue normalmente. Logo que vai abrir o formulário, aparece o alerta de problema no displayFields e gera o erro acima no log.

Coincidência ou não, estas 2 atividades possuem o mesmo nome, mas em fluxos diferentes (códigos diferentes no fluxo).

Encontrei algo relacionado ao erro NoSuchElementException, que informava que não haviam itens a seguir para que o iterator pudesse usar o next, mas não consegui encontrar onde poderia estar causando isto, visto que nas demais atividades, o código no fonte é o mesmo e corre tudo ok.

Alguem saberia o que pode estar acontecendo?


    case 94:    
var processoHistory = consult_dataset_process_history(numrd, Now_State)

var movimento = processoHistory.getValue(0,"processHistoryPK.movementSequence");

    var processo = consult_dataset_process(numrd, movimento);            
        var prazoDataset = processo.getValue(0, "deadline");        
        var dataprazo = sdf.format(prazoDataset);
        form.setValue('txprazodp', dataprazo);


            if(gestor == "true"){

                arr = ["txprazodp"];

            }else{

                var arr = ["rbanaldp", "txanaldp" ];

                form.setValue('txrespadp', colaborador.getValue(0, "colleagueName"));
                form.setValue('txdataadp', dataAtual);
                form.setValue('txcodrespadp', getValue('WKUser'));


            }

        var mapaForm = new java.util.HashMap();

mapaForm = form.getCardData();
        var it = mapaForm.keySet().iterator();

        while (it.hasNext()) {

            var key = it.next();

            for (var i = 0; i < arr.length; i++) {

                if (key == arr[i]) {                                        
                    form.setEnabled(key, true);
                    //if(it.hasNext()){

                        var key = it.next(); //***********LINHA 793**********

                    //}
                } else {

                    form.setEnabled(key, false);
                }

            }
        }


        break;

O que tem na linha 793?

Coloquei ali no código, como comentário… var key = it.next(); //*LINHA 793

O problema não é só porque está estourando seu objeto? Você colocou seu for dentro do seu while. O While garante que quando não houver mais nenhum campo, ele saia do loop, mas seu for não tem nenhuma validação assim, então está estourando. Esse if que vc tinha não funcionava e impedia isso?

É que ele estaria verificando junto do array (var arr) a quantidade e comparando os valores…se igual, ativaria o campo. Removendo o for, ele não liberaria nada, pois não entraria no if (key == arr[i])

Ok, mas o problema é o fato de vc estar dando um .next() dentro do For. Você não precisa dele, pq fora do for você já pegou o valor que precisa. Agora dentro do for apenas compara com o arr[i].

Acho que se tirar essa linha fora seu código já funciona.

@Claudio, ao remover a variável key da linha 793, ele está liberando apenas um dos campos e não os 2. São um campo select e um textarea. Sem a linha 793, está liberando apenas o textarea. Em todas as outras atividades, o código é o mesmo do que foi colocado na descrição deste tópico, alterando apenas o nome dos campos a liberar, e está funcionando tudo ok. Não sei o que acontece com estas 2 atividades especificas.

Thiago,

Creio que você não precisa declarar a variável key novamente (na linha 793), pois você já possui ela antes dessa linha.

Deste jeito, além de pegar o próximo valor do array (não será o mesmo valor que você declarou antes do "for"), você vai tentar iterar para o próximo item do array quando já estiver no último item (ou seja, não existe).

Abs,

Marcos

@Marcos, ao remover a variável key da linha 793, ele está liberando apenas um dos campos e não os 2. São um campo select e um textarea. Sem a linha 793, está liberando apenas o textarea. Em todas as outras atividades, o código é o mesmo do que foi colocado na descrição deste tópico, alterando apenas o nome dos campos a liberar, e está funcionando tudo ok. Não sei o que acontece com estas 2 atividades especificas.