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 (<Unknown source>#793) in <Unknown source> 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 (<Unknown source>#793) in <Unknown source> 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?
— Claudio Neto 14 de Mar de 2018Coloquei ali no código, como comentário... var key = it.next(); //*LINHA 793**
— Thiago Silva 14 de Mar de 2018O 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?
— Claudio Neto 14 de Mar de 2018É 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])
— Thiago Silva 14 de Mar de 2018Ok, 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 Neto 14 de Mar de 2018@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 Silva 16 de Mar de 2018